commit 75143cd93ec82eb1346eefa955ed42f189d6f449
parent abd301333da81b72070fbb575dcd0824d3af038e
Author: sin <sin@2f30.org>
Date: Wed, 22 Oct 2014 14:22:55 +0100
Add xdirname() to avoid quirks with dirname(3)
Diffstat:
1 file changed, 17 insertions(+), 3 deletions(-)
diff --git a/noice.c b/noice.c
@@ -108,16 +108,30 @@ xstrdup(const char *s)
}
char *
-xrealpath(const char *pathname)
+xrealpath(const char *path)
{
char *p;
- p = realpath(pathname, NULL);
+ p = realpath(path, NULL);
if (p == NULL)
printerr(1, "realpath");
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
spawn(const char *file, const char *arg)
{
@@ -533,7 +547,7 @@ nochange:
if (strcmp(path, "/") == 0) {
goto nochange;
} else {
- dir = dirname(path);
+ dir = xdirname(path);
tmp = xmalloc(strlen(dir) + 1);
strlcpy(tmp, dir, strlen(dir) + 1);
free(path);