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)