PERFORCE change 146986 for review

Gabor Kovesdan gabor at FreeBSD.org
Sat Aug 9 13:21:58 UTC 2008


http://perforce.freebsd.org/chv.cgi?CH=146986

Change 146986 by gabor at gabor_server on 2008/08/09 13:21:56

	- Partly revert the previous change to the binary file detecting,
	  in some case it was more accurate, but in some cases it did
	  not work well

Affected files ...

.. //depot/projects/soc2008/gabor_textproc/grep/file.c#32 edit

Differences ...

==== //depot/projects/soc2008/gabor_textproc/grep/file.c#32 (text+ko) ====

@@ -119,20 +119,32 @@
 {
 	int		 i = 0;
 	char		 ch;
+	size_t		 size;
+	wchar_t		 wbinbuf[BUFSIZ];
+	const char	*src = binbuf;
+	mbstate_t	 mbs;
 
 	/* Fill in the buffer if it is empty. */
 	if (binbufptr == NULL) {
 		/* Only pre-read to the buffer if we need the binary check. */
 		if (binbehave != BINFILE_TEXT) {
-			for (; i < sizeof(binbuf) && !grep_feof(f); i++) {
+			for (; i < sizeof(wbinbuf) && !grep_feof(f); i++) {
 				ch = grep_fgetc(f);
-				if ((unsigned char)ch == 0)
-					f->binary = 1;
 				if (ch != EOF)
 					binbuf[i] = ch;
 				else
 					break;
 			}
+			/* Convert at most (BUFSIZ * sizeof(wint_t)) characters or
+				(BUFSIZ - 1) bytes to wide character string. */
+			size = mbsnrtowcs(wbinbuf, &src, sizeof(wbinbuf), BUFSIZ - 1, &mbs);
+			f->binary = 0;
+			for (; size > 0; size--)
+				if (iswbinary(wbinbuf[size])) {
+					f->binary = 1;
+					break;
+				}
+			
 		}
 		binbufsiz = i;
 		binbufptr = binbuf;


More information about the p4-projects mailing list