utimensat.c 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  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. #include <stdint.h>
  11. #if defined(__UCLIBC_USE_TIME64__)
  12. #include "internal/time64_helpers.h"
  13. #endif
  14. #if defined(__NR_utimensat) || defined(__NR_utimensat_time64)
  15. #if defined(__UCLIBC_USE_TIME64__) && defined(__NR_utimensat_time64)
  16. int utimensat(int fd, const char *path, const struct timespec times[2], int flags)
  17. {
  18. struct __ts64_struct __times64[2] = {
  19. {
  20. .tv_sec = times ? times[0].tv_sec : 0,
  21. .tv_nsec = times ? times[0].tv_nsec : 0
  22. },
  23. {
  24. .tv_sec = times ? times[1].tv_sec : 0,
  25. .tv_nsec = times ? times[1].tv_nsec : 0
  26. }
  27. };
  28. return INLINE_SYSCALL(utimensat_time64, 4, fd, path, times ? (uintptr_t) &__times64 : 0, flags);
  29. }
  30. #else
  31. _syscall4(int, utimensat, int, fd, const char *, path, const struct timespec *, times, int, flags)
  32. #endif
  33. libc_hidden_def(utimensat)
  34. #else
  35. /* should add emulation with utimens() and /proc/self/fd/ ... */
  36. #endif