#include <errno.h>
#include <unistd.h>
-char *realpath(const char *filename, char *resolved)
+char *realpath(const char *restrict filename, char *restrict resolved)
{
int fd;
ssize_t r;
return 0;
}
+ fd = open(filename, O_RDONLY|O_NONBLOCK|O_CLOEXEC);
+ if (fd < 0) return 0;
+ snprintf(buf, sizeof buf, "/proc/self/fd/%d", fd);
+
if (!resolved) {
alloc = 1;
resolved = malloc(PATH_MAX);
if (!resolved) return 0;
}
- fd = open(filename, O_RDONLY|O_NONBLOCK);
- if (fd < 0) return 0;
- snprintf(buf, sizeof buf, "/proc/self/fd/%d", fd);
-
r = readlink(buf, resolved, PATH_MAX-1);
if (r < 0) goto err;
resolved[r] = 0;