sbase

suckless unix tools
git clone git://git.2f30.org/sbase
Log | Files | Refs | README | LICENSE

commit 7cb966c170bc5094ecbc5874ac9afd69a51ad5df
parent 5d0abb92aae6f0693713cd407070257022380079
Author: FRIGN <dev@frign.de>
Date:   Tue,  3 Mar 2015 17:24:14 +0100

Audit pwd(1)

Nothing special
1) Update manpage to current style.
2) Reorder functions
3) Logical trickery in getpwd()

Diffstat:
MREADME | 2+-
Mpwd.1 | 4++--
Mpwd.c | 30+++++++++++++-----------------
3 files changed, 16 insertions(+), 20 deletions(-)

diff --git a/README b/README @@ -54,7 +54,7 @@ The following tools are implemented ('*' == finished, '#' == UTF-8 support, #* paste yes none =*| printenv non-posix none #* printf yes none -=* pwd yes none +=*| pwd yes none = readlink non-posix none =* renice yes none =*| rm yes none (-i) diff --git a/pwd.1 b/pwd.1 @@ -1,4 +1,4 @@ -.Dd November 23, 2014 +.Dd March 3, 2015 .Dt PWD 1 .Os sbase .Sh NAME @@ -13,7 +13,7 @@ prints the path of the current working directory. .Sh OPTIONS .Bl -tag -width Ds .It Fl L -Logical path, uses $PWD (default). +Logical path, uses $PWD. This is the default. .It Fl P Physical path, avoids all symlinks. .El diff --git a/pwd.c b/pwd.c @@ -6,7 +6,19 @@ #include "util.h" -static const char *getpwd(const char *cwd); +static const char * +getpwd(const char *cwd) +{ + const char *pwd; + struct stat cst, pst; + + if (!(pwd = getenv("PWD")) || pwd[0] != '/' || stat(pwd, &pst) < 0) + return cwd; + if (stat(cwd, &cst) < 0) + eprintf("stat %s:", cwd); + + return (pst.st_dev == cst.st_dev && pst.st_ino == cst.st_ino) ? pwd : cwd; +} static void usage(void) @@ -34,19 +46,3 @@ main(int argc, char *argv[]) return 0; } - -static const char * -getpwd(const char *cwd) -{ - const char *pwd; - struct stat cst, pst; - - if (!(pwd = getenv("PWD")) || pwd[0] != '/' || stat(pwd, &pst) < 0) - return cwd; - if (stat(cwd, &cst) < 0) - eprintf("stat %s:", cwd); - if (pst.st_dev == cst.st_dev && pst.st_ino == cst.st_ino) - return pwd; - else - return cwd; -}