X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=src%2Funistd%2Fgetcwd.c;h=f407ffe07ed6008fa4af1ce020b60df0a26a7534;hb=595416b11dfbc82d40a59d0edd7e3b04ba7a2d6d;hp=2e540cd41daef91efd37c7656f8f9274d4447ed6;hpb=899b13cae77469a9ed1f076c456b66d567af69d8;p=musl diff --git a/src/unistd/getcwd.c b/src/unistd/getcwd.c index 2e540cd4..f407ffe0 100644 --- a/src/unistd/getcwd.c +++ b/src/unistd/getcwd.c @@ -6,8 +6,20 @@ char *getcwd(char *buf, size_t size) { - char tmp[PATH_MAX]; - if (!buf) buf = tmp, size = PATH_MAX; - if (syscall(SYS_getcwd, buf, size) < 0) return 0; + char tmp[buf ? 1 : PATH_MAX]; + if (!buf) { + buf = tmp; + size = sizeof tmp; + } else if (!size) { + errno = EINVAL; + 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; }