svn commit: r256800 - head/usr.bin/pathchk

Jilles Tjoelker jilles at FreeBSD.org
Sun Oct 20 20:10:31 UTC 2013


Author: jilles
Date: Sun Oct 20 20:10:31 2013
New Revision: 256800
URL: http://svnweb.freebsd.org/changeset/base/256800

Log:
  pathchk: Ensure bytes >= 128 are considered non-portable characters.
  
  This was not broken on architectures such as ARM where char is unsigned.
  
  Also, remove the first non-portable character from the output. POSIX does
  not require this, and printing the first byte may yield an invalid byte
  sequence with UTF-8.
  
  PR:		bin/165988
  Reported by:	Nicolas Rachinsky

Modified:
  head/usr.bin/pathchk/pathchk.c

Modified: head/usr.bin/pathchk/pathchk.c
==============================================================================
--- head/usr.bin/pathchk/pathchk.c	Sun Oct 20 18:40:55 2013	(r256799)
+++ head/usr.bin/pathchk/pathchk.c	Sun Oct 20 20:10:31 2013	(r256800)
@@ -98,7 +98,7 @@ check(const char *path)
 {
 	struct stat sb;
 	long complen, namemax, pathmax, svnamemax;
-	int badch, last;
+	int last;
 	char *end, *p, *pathd;
 
 	if ((pathd = strdup(path)) == NULL)
@@ -142,9 +142,9 @@ check(const char *path)
 			goto bad;
 		}
 
-		if (pflag && (badch = portable(p)) >= 0) {
+		if (pflag && !portable(p)) {
 			warnx("%s: %s: component contains non-portable "
-			    "character `%c'", path, p, badch);
+			    "character", path, p);
 			goto bad;
 		}
 
@@ -183,8 +183,7 @@ bad:	free(pathd);
 }
 
 /*
- * Check whether a path component contains only portable characters. Return
- * the first non-portable character found.
+ * Check whether a path component contains only portable characters.
  */
 static int
 portable(const char *path)
@@ -197,7 +196,7 @@ portable(const char *path)
 
 	s = strspn(path, charset);
 	if (path[s] != '\0')
-		return (path[s]);
+		return (0);
 
-	return (-1);
+	return (1);
 }


More information about the svn-src-head mailing list