diff options
author | Bram Moolenaar <Bram@vim.org> | 2018-02-18 22:13:29 +0100 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2018-02-18 22:13:29 +0100 |
commit | d96ff165113ce5fe62107add590997660e3d4802 (patch) | |
tree | d5325a3edba6291b0a6527cdfc1aaa334405327c /src/eval.c | |
parent | 4287ed33ddc324d26dd05d3e19596dd74cf479d6 (diff) |
patch 8.0.1523: cannot write and read terminal screendumpsv8.0.1523
Problem: Cannot write and read terminal screendumps.
Solution: Add term_dumpwrite(), term_dumpread() and term_dumpdiff().
Also add assert_equalfile().
Diffstat (limited to 'src/eval.c')
-rw-r--r-- | src/eval.c | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/src/eval.c b/src/eval.c index e5c1dbf88c..d891353f00 100644 --- a/src/eval.c +++ b/src/eval.c @@ -8834,6 +8834,73 @@ assert_equal_common(typval_T *argvars, assert_type_T atype) } void +assert_equalfile(typval_T *argvars) +{ + char_u buf1[NUMBUFLEN]; + char_u buf2[NUMBUFLEN]; + char_u *fname1 = get_tv_string_buf_chk(&argvars[0], buf1); + char_u *fname2 = get_tv_string_buf_chk(&argvars[1], buf2); + garray_T ga; + FILE *fd1; + FILE *fd2; + + if (fname1 == NULL || fname2 == NULL) + return; + + IObuff[0] = NUL; + fd1 = mch_fopen((char *)fname1, READBIN); + if (fd1 == NULL) + { + vim_snprintf((char *)IObuff, IOSIZE, (char *)e_notread, fname1); + } + else + { + fd2 = mch_fopen((char *)fname2, READBIN); + if (fd2 == NULL) + { + fclose(fd1); + vim_snprintf((char *)IObuff, IOSIZE, (char *)e_notread, fname2); + } + else + { + int c1, c2; + long count = 0; + + for (;;) + { + c1 = fgetc(fd1); + c2 = fgetc(fd2); + if (c1 == EOF) + { + if (c2 != EOF) + STRCPY(IObuff, "first file is shorter"); + break; + } + else if (c2 == EOF) + { + STRCPY(IObuff, "second file is shorter"); + break; + } + else if (c1 != c2) + { + vim_snprintf((char *)IObuff, IOSIZE, + "difference at byte %ld", count); + break; + } + ++count; + } + } + } + if (IObuff[0] != NUL) + { + prepare_assert_error(&ga); + ga_concat(&ga, IObuff); + assert_error(&ga); + ga_clear(&ga); + } +} + + void assert_match_common(typval_T *argvars, assert_type_T atype) { garray_T ga; |