8 int fstatat(int fd, const char *restrict path, struct stat *restrict st, int flag)
12 if (flag==AT_EMPTY_PATH && fd>=0 && !*path) {
13 ret = __syscall(SYS_fstat, fd, st);
14 if (ret==-EBADF && __syscall(SYS_fcntl, fd, F_GETFD)>=0) {
15 ret = __syscall(SYS_fstatat, fd, path, st, flag);
17 char buf[15+3*sizeof(int)];
18 __procfdname(buf, fd);
20 ret = __syscall(SYS_stat, buf, st);
22 ret = __syscall(SYS_fstatat, AT_FDCWD, buf, st, 0);
28 else if ((fd == AT_FDCWD || *path=='/') && flag==AT_SYMLINK_NOFOLLOW)
29 ret = __syscall(SYS_lstat, path, st);
32 else if ((fd == AT_FDCWD || *path=='/') && !flag)
33 ret = __syscall(SYS_stat, path, st);
35 else ret = __syscall(SYS_fstatat, fd, path, st, flag);
37 return __syscall_ret(ret);
40 weak_alias(fstatat, fstatat64);