summaryrefslogtreecommitdiffstats
path: root/src/eval.c
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2018-02-18 22:13:29 +0100
committerBram Moolenaar <Bram@vim.org>2018-02-18 22:13:29 +0100
commitd96ff165113ce5fe62107add590997660e3d4802 (patch)
treed5325a3edba6291b0a6527cdfc1aaa334405327c /src/eval.c
parent4287ed33ddc324d26dd05d3e19596dd74cf479d6 (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.c67
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;