Add xdirname() to avoid quirks with dirname(3)

This commit is contained in:
sin 2014-10-22 14:22:55 +01:00
parent abd301333d
commit 75143cd93e

20
noice.c
View file

@ -108,16 +108,30 @@ xstrdup(const char *s)
} }
char * char *
xrealpath(const char *pathname) xrealpath(const char *path)
{ {
char *p; char *p;
p = realpath(pathname, NULL); p = realpath(path, NULL);
if (p == NULL) if (p == NULL)
printerr(1, "realpath"); printerr(1, "realpath");
return p; return p;
} }
char *
xdirname(const char *path)
{
char *p, *tmp;
/* Some implementations of dirname(3) may modify `path' */
tmp = xstrdup(path);
p = dirname(tmp);
free(tmp);
if (p == NULL)
printerr(1, "dirname");
return p;
}
void void
spawn(const char *file, const char *arg) spawn(const char *file, const char *arg)
{ {
@ -533,7 +547,7 @@ nochange:
if (strcmp(path, "/") == 0) { if (strcmp(path, "/") == 0) {
goto nochange; goto nochange;
} else { } else {
dir = dirname(path); dir = xdirname(path);
tmp = xmalloc(strlen(dir) + 1); tmp = xmalloc(strlen(dir) + 1);
strlcpy(tmp, dir, strlen(dir) + 1); strlcpy(tmp, dir, strlen(dir) + 1);
free(path); free(path);