X-Git-Url: https://gitweb.dragonflybsd.org/~uqs/games.git/blobdiff_plain/137b0862d19bb2a8c2dc5e43e90f5fb6ab1c24ac..c91833b608a45e8bca8bd985725ce3bfa716466a:/games/hack/hack.unix.c diff --git a/games/hack/hack.unix.c b/games/hack/hack.unix.c index 318d88b353..6810cba5cd 100644 --- a/games/hack/hack.unix.c +++ b/games/hack/hack.unix.c @@ -19,7 +19,9 @@ #include /* for time_t and stat */ #include +#include #include +#include static struct tm *getlt(void); static bool veryold(int); @@ -95,13 +97,32 @@ struct stat buf, hbuf; void gethdate(const char *name) { -/* old version - for people short of space */ -char *np; - - name = "/usr/games/hide/hack"; - if(stat(name, &hbuf)) - error("Cannot get status of %s.", - (np = rindex(name, '/')) ? np+1 : name); + char *p, *np, *path; + char filename[MAXPATHLEN+1]; + + if (strchr(name, '/') != NULL || (p = getenv("PATH")) == NULL) + p = ""; + np = path = strdup(p); /* Make a copy for strsep. */ + if (path == NULL) + err(1, NULL); + + for (;;) { + if ((p = strsep(&np, ":")) == NULL) + break; + if (*p == '\0') /* :: */ + (void) strlcpy(filename, name, sizeof(filename)); + else + (void) snprintf(filename, sizeof(filename), + "%s/%s", p, name); + + if (stat(filename, &hbuf) == 0) { + free(path); + return; + } + } + error("Cannot get status of %s.", + (p = strrchr(name, '/')) ? p+1 : name); + free(path); } bool