X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=src%2Funistd%2Fgetcwd.c;h=f407ffe07ed6008fa4af1ce020b60df0a26a7534;hb=4554f155dd23a65fcdfd39f1d5af8af55ba37694;hp=a7b925d2dbee5a99f5ec61b77b5870ae3a839143;hpb=4fb7df12f52982412e60afeaf9c4463f78b396fc;p=musl diff --git a/src/unistd/getcwd.c b/src/unistd/getcwd.c index a7b925d2..f407ffe0 100644 --- a/src/unistd/getcwd.c +++ b/src/unistd/getcwd.c @@ -6,14 +6,20 @@ char *getcwd(char *buf, size_t size) { - char tmp[PATH_MAX]; + char tmp[buf ? 1 : PATH_MAX]; if (!buf) { buf = tmp; - size = PATH_MAX; + size = sizeof tmp; } else if (!size) { errno = EINVAL; return 0; } - if (syscall(SYS_getcwd, buf, size) < 0) return 0; + long ret = syscall(SYS_getcwd, buf, size); + if (ret < 0) + return 0; + if (ret == 0 || buf[0] != '/') { + errno = ENOENT; + return 0; + } return buf == tmp ? strdup(buf) : buf; }