9 void __procfdname(char *, unsigned);
11 char *realpath(const char *restrict filename, char *restrict resolved)
16 char buf[15+3*sizeof(int)];
24 fd = open(filename, O_RDONLY|O_NONBLOCK|O_CLOEXEC);
26 __procfdname(buf, fd);
30 resolved = malloc(PATH_MAX);
31 if (!resolved) return 0;
34 r = readlink(buf, resolved, PATH_MAX-1);
39 r = stat(resolved, &st2);
40 if (r<0 || st1.st_dev != st2.st_dev || st1.st_ino != st2.st_ino) {
41 if (!r) errno = ELOOP;
48 if (alloc) free(resolved);