diff options
author | jilles <jilles@FreeBSD.org> | 2010-05-09 19:30:52 +0000 |
---|---|---|
committer | jilles <jilles@FreeBSD.org> | 2010-05-09 19:30:52 +0000 |
commit | 84dd6e2dc31dcc4bb1c1300634e0f73823cf925a (patch) | |
tree | ef4f3f354c96b2743770a6add845d31dcfd4da87 /usr.bin | |
parent | 8ae2425c9da1c9617bfe989e82059822368acb4a (diff) | |
download | FreeBSD-src-84dd6e2dc31dcc4bb1c1300634e0f73823cf925a.zip FreeBSD-src-84dd6e2dc31dcc4bb1c1300634e0f73823cf925a.tar.gz |
MFC r207483: 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.
Diffstat (limited to 'usr.bin')
-rw-r--r-- | usr.bin/pathchk/pathchk.1 | 14 | ||||
-rw-r--r-- | usr.bin/pathchk/pathchk.c | 18 |
2 files changed, 26 insertions, 6 deletions
diff --git a/usr.bin/pathchk/pathchk.1 b/usr.bin/pathchk/pathchk.1 index e863955..fb50e84 100644 --- a/usr.bin/pathchk/pathchk.1 +++ b/usr.bin/pathchk/pathchk.1 @@ -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 diff --git a/usr.bin/pathchk/pathchk.c b/usr.bin/pathchk/pathchk.c index dd9768a..2d8fa59 100644 --- a/usr.bin/pathchk/pathchk.c +++ b/usr.bin/pathchk/pathchk.c @@ -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]); |