support null buffer argument to getcwd, auto-allocating behavior

this is a popular extension some programs depend on, and by using a
temporary buffer and strdup rather than malloc prior to the syscall,
i've avoided the dependency on free and thus minimized the bloat cost
of supporting this feature.
This commit is contained in:
Rich Felker 2012-03-01 22:08:05 -05:00
parent 051175d4fe
commit 899b13cae7
1 changed files with 6 additions and 1 deletions

View File

@ -1,8 +1,13 @@
#include <unistd.h> #include <unistd.h>
#include <errno.h> #include <errno.h>
#include <limits.h>
#include <string.h>
#include "syscall.h" #include "syscall.h"
char *getcwd(char *buf, size_t size) char *getcwd(char *buf, size_t size)
{ {
return syscall(SYS_getcwd, buf, size) < 0 ? NULL : buf; char tmp[PATH_MAX];
if (!buf) buf = tmp, size = PATH_MAX;
if (syscall(SYS_getcwd, buf, size) < 0) return 0;
return buf == tmp ? strdup(buf) : buf;
} }