utimensat.c 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. /*
  2. * utimensat() for uClibc
  3. *
  4. * Copyright (C) 2009 Analog Devices Inc.
  5. *
  6. * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
  7. */
  8. #include <sys/syscall.h>
  9. #include <sys/stat.h>
  10. #if defined(__UCLIBC_USE_TIME64__)
  11. #include "internal/time64_helpers.h"
  12. #endif
  13. #if defined(__NR_utimensat) || defined(__NR_utimensat_time64)
  14. #if defined(__UCLIBC_USE_TIME64__) && defined(__NR_utimensat_time64)
  15. int utimensat(int fd, const char *path, const struct timespec times[2], int flags)
  16. {
  17. struct __ts64_struct __times64[2] = {
  18. {
  19. .tv_sec = times ? times[0].tv_sec : 0,
  20. .tv_nsec = times ? times[0].tv_nsec : 0
  21. },
  22. {
  23. .tv_sec = times ? times[1].tv_sec : 0,
  24. .tv_nsec = times ? times[1].tv_nsec : 0
  25. }
  26. };
  27. return INLINE_SYSCALL(utimensat_time64, 4, fd, path, times ? &__times64 : 0, flags);
  28. }
  29. #else
  30. _syscall4(int, utimensat, int, fd, const char *, path, const struct timespec *, times, int, flags)
  31. #endif
  32. libc_hidden_def(utimensat)
  33. #else
  34. /* should add emulation with utimens() and /proc/self/fd/ ... */
  35. #endif