Kaynağa Gözat

Add xdirname() again and give dirname(3) another chance

master
lostd 10 yıl önce
ebeveyn
işleme
36cf4136b5
1 değiştirilmiş dosya ile 20 ekleme ve 1 silme
  1. +20
    -1
      noice.c

+ 20
- 1
noice.c Dosyayı Görüntüle

@@ -118,6 +118,25 @@ xrealpath(const char *path)
return p;
}

char *
xdirname(const char *path)
{
char *p, *tmp;

/* Some implementations of dirname(3) may modify `path' and some
* return a pointer inside `path` and we cannot free(3) the
* original string if we lose track of it. */
tmp = xstrdup(path);
p = dirname(tmp);
free(tmp);
if (p == NULL)
printerr(1, "dirname");

/* Make sure this is a malloc(3)-ed string */
p = xstrdup(p);
return p;
}

void
spawn(const char *file, const char *arg)
{
@@ -532,7 +551,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);


Yükleniyor…
İptal
Kaydet