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)


Reply via email to