fstat.c 494 B

123456789101112131415161718192021222324
  1. #include <sys/stat.h>
  2. #include <errno.h>
  3. #include <fcntl.h>
  4. #include "syscall.h"
  5. #include "libc.h"
  6. void __procfdname(char *, unsigned);
  7. int fstat(int fd, struct stat *st)
  8. {
  9. int ret = __syscall(SYS_fstat, fd, st);
  10. if (ret != -EBADF || __syscall(SYS_fcntl, fd, F_GETFD) < 0)
  11. return __syscall_ret(ret);
  12. char buf[15+3*sizeof(int)];
  13. __procfdname(buf, fd);
  14. #ifdef SYS_stat
  15. return syscall(SYS_stat, buf, st);
  16. #else
  17. return syscall(SYS_fstatat, AT_FDCWD, buf, st, 0);
  18. #endif
  19. }
  20. LFS64(fstat);