On Wed, May 15, 2013 at 09:12:02PM +1000, Jonathan Gray wrote: > isprint() is to blame here, ie with the following hack it shows a diff > > Index: diff.c > =================================================================== > RCS file: /cvs/src/usr.bin/rcs/diff.c,v > retrieving revision 1.33 > diff -u -p -r1.33 diff.c > --- diff.c 20 Apr 2011 19:34:16 -0000 1.33 > +++ diff.c 15 May 2013 11:08:20 -0000 > @@ -1139,6 +1139,7 @@ asciifile(FILE *f) > > rewind(f); > cnt = fread(buf, 1, sizeof(buf), f); > +return (1); > for (i = 0; i < cnt; i++) > if (!isprint(buf[i]) && !isspace(buf[i])) > return (0);
This should make it work. See also r1.82 of usr.bin/diff/diffreg.c. Index: diff.c =================================================================== RCS file: /cvs/src/usr.bin/rcs/diff.c,v retrieving revision 1.33 diff -u -p -r1.33 diff.c --- diff.c 20 Apr 2011 19:34:16 -0000 1.33 +++ diff.c 15 May 2013 11:24:13 -0000 @@ -1132,17 +1132,14 @@ static int asciifile(FILE *f) { unsigned char buf[BUFSIZ]; - size_t i, cnt; + size_t cnt; if (f == NULL) return (1); rewind(f); cnt = fread(buf, 1, sizeof(buf), f); - for (i = 0; i < cnt; i++) - if (!isprint(buf[i]) && !isspace(buf[i])) - return (0); - return (1); + return (memchr(buf, '\0', cnt) == NULL); } #define begins_with(s, pre) (strncmp(s, pre, sizeof(pre)-1) == 0)