#include <unistd.h> | |
#include <errno.h> | |
#include <limits.h> | |
#include <string.h> | |
#include "syscall.h" | |
char *getcwd(char *buf, size_t size) | |
{ | |
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; | |
} |