Author: jilles
Date: Sat May  1 22:00:28 2010
New Revision: 207483
URL: http://svn.freebsd.org/changeset/base/207483

Log:
  pathchk: Add the new POSIX -P option.
  
  This option checks for empty pathnames and components starting with '-'.
  Our -p option also checks for the latter, which remains the case.
  
  MFC after:    1 week

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

Modified: head/usr.bin/pathchk/pathchk.1
==============================================================================
--- head/usr.bin/pathchk/pathchk.1      Sat May  1 21:59:06 2010        
(r207482)
+++ head/usr.bin/pathchk/pathchk.1      Sat May  1 22:00:28 2010        
(r207483)
@@ -27,7 +27,7 @@
 .\"
 .\" $FreeBSD$
 .\"
-.Dd May 21, 2002
+.Dd May 1, 2010
 .Dt PATHCHK 1
 .Os
 .Sh NAME
@@ -35,7 +35,7 @@
 .Nd check pathnames
 .Sh SYNOPSIS
 .Nm
-.Op Fl p
+.Op Fl pP
 .Ar pathname ...
 .Sh DESCRIPTION
 The
@@ -95,6 +95,16 @@ No component may start with the hyphen
 .Pq Ql \&-
 character.
 .El
+.It Fl P
+In addition to the default or
+.Fl p
+checks, write a diagnostic for each argument that:
+.Bl -bullet
+.It
+Is empty.
+.It
+Contains a component that starts with a hyphen.
+.El
 .El
 .Sh EXIT STATUS
 .Ex -std

Modified: head/usr.bin/pathchk/pathchk.c
==============================================================================
--- head/usr.bin/pathchk/pathchk.c      Sat May  1 21:59:06 2010        
(r207482)
+++ head/usr.bin/pathchk/pathchk.c      Sat May  1 22:00:28 2010        
(r207483)
@@ -51,6 +51,7 @@ static int     portable(const char *);
 static void     usage(void);
 
 static int      pflag;                 /* Perform portability checks */
+static int      Pflag;                 /* Check for empty paths, leading '-' */
 
 int
 main(int argc, char *argv[])
@@ -58,11 +59,14 @@ main(int argc, char *argv[])
        int ch, rval;
        const char *arg;
 
-       while ((ch = getopt(argc, argv, "p")) > 0) {
+       while ((ch = getopt(argc, argv, "pP")) > 0) {
                switch (ch) {
                case 'p':
                        pflag = 1;
                        break;
+               case 'P':
+                       Pflag = 1;
+                       break;
                default:
                        usage();
                        /*NOTREACHED*/
@@ -102,6 +106,15 @@ check(const char *path)
 
        p = pathd;
 
+       if (Pflag && *p == '\0') {
+               warnx("%s: empty pathname", path);
+               goto bad;
+       }
+       if ((Pflag || pflag) && (*p == '-' || strstr(p, "/-") != NULL)) {
+               warnx("%s: contains a component starting with '-'", path);
+               goto bad;
+       }
+
        if (!pflag) {
                errno = 0;
                namemax = pathconf(*p == '/' ? "/" : ".", _PC_NAME_MAX);
@@ -182,9 +195,6 @@ portable(const char *path)
            "0123456789._-";
        long s;
 
-       if (*path == '-')
-               return (*path);
-
        s = strspn(path, charset);
        if (path[s] != '\0')
                return (path[s]);
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to