#include #include #include #include #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) { if (errno == ENAMETOOLONG) errno = ENOMEM; return 0; } if (ret == 0 || buf[0] != '/') { errno = ENOENT; return 0; } return buf == tmp ? strdup(buf) : buf; }