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
This commit is contained in:
parent
01a827bd91
commit
b1c9a3a821
@ -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
|
||||
|
@ -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]);
|
||||
|
Loading…
Reference in New Issue
Block a user