Date: Sun, 11 May 2014 18:49:19 +0000 (UTC) From: Thomas Quinot <thomas@FreeBSD.org> To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r265893 - head/usr.bin/stat Message-ID: <201405111849.s4BInJwS025302@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: thomas Date: Sun May 11 18:49:18 2014 New Revision: 265893 URL: http://svnweb.freebsd.org/changeset/base/265893 Log: Minor fixes to previous change introducing switch -H, as per comments on -arch. Reviewed by: gleb Modified: head/usr.bin/stat/stat.1 head/usr.bin/stat/stat.c Modified: head/usr.bin/stat/stat.1 ============================================================================== --- head/usr.bin/stat/stat.1 Sun May 11 18:27:04 2014 (r265892) +++ head/usr.bin/stat/stat.1 Sun May 11 18:49:18 2014 (r265893) @@ -130,6 +130,7 @@ and use .Xr fhstat 2 instead of .Xr lstat 2 . +This requires root privileges. .It Fl L Use .Xr stat 2 Modified: head/usr.bin/stat/stat.c ============================================================================== --- head/usr.bin/stat/stat.c Sun May 11 18:27:04 2014 (r265892) +++ head/usr.bin/stat/stat.c Sun May 11 18:49:18 2014 (r265893) @@ -186,6 +186,7 @@ int format1(const struct stat *, /* stat char *, size_t, /* a place to put the output */ int, int, int, int, /* the parsed format */ int, int); +int hex2byte(const char [2]); #if HAVE_STRUCT_STAT_ST_FLAGS char *xfflagstostr(unsigned long); #endif @@ -214,7 +215,7 @@ main(int argc, char *argv[]) lsF = 0; fmtchar = '\0'; usestat = 0; - nfs_handle = 0; + nfs_handle = 0; nonl = 0; quiet = 0; linkfail = 0; @@ -327,32 +328,27 @@ main(int argc, char *argv[]) rc = fstat(STDIN_FILENO, &st); } else { int j; - char *inval; file = argv[0]; if (nfs_handle) { rc = 0; - bzero (&fhnd, sizeof fhnd); - j = MIN(2 * sizeof fhnd, strlen(file)); - if (j & 1) { + bzero(&fhnd, sizeof(fhnd)); + j = MIN(2 * sizeof(fhnd), strlen(file)); + if ((j & 1) != 0) { rc = -1; } else { while (j) { - ((char*) &fhnd)[j / 2 - 1] = - strtol(&file[j - 2], - &inval, 16); - if (inval != NULL) { - rc = -1; + rc = hex2byte(&file[j - 2]); + if (rc == -1) break; - } - argv[0][j - 2] = '\0'; + ((char*) &fhnd)[j / 2 - 1] = rc; j -= 2; } - if (!rc) - rc = fhstat(&fhnd, &st); - else - errno = EINVAL; } + if (rc == -1) + errno = EINVAL; + else + rc = fhstat(&fhnd, &st); } else if (usestat) { /* @@ -1091,3 +1087,12 @@ format1(const struct stat *st, return (snprintf(buf, blen, lfmt, data)); } + + +#define hex2nibble(c) (c <= '9' ? c - '0' : toupper(c) - 'A' + 10) +int +hex2byte(const char c[2]) { + if (!(ishexnumber(c[0]) && ishexnumber(c[1]))) + return -1; + return (hex2nibble(c[0]) << 4) + hex2nibble(c[1]); +}
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201405111849.s4BInJwS025302>