|
@@ -207,53 +207,6 @@ int qemu_pipe(int pipefd[2])
|
|
return ret;
|
|
return ret;
|
|
}
|
|
}
|
|
|
|
|
|
-int qemu_utimens(const char *path, const struct timespec *times)
|
|
|
|
-{
|
|
|
|
- struct timeval tv[2], tv_now;
|
|
|
|
- struct stat st;
|
|
|
|
- int i;
|
|
|
|
-#ifdef CONFIG_UTIMENSAT
|
|
|
|
- int ret;
|
|
|
|
-
|
|
|
|
- ret = utimensat(AT_FDCWD, path, times, AT_SYMLINK_NOFOLLOW);
|
|
|
|
- if (ret != -1 || errno != ENOSYS) {
|
|
|
|
- return ret;
|
|
|
|
- }
|
|
|
|
-#endif
|
|
|
|
- /* Fallback: use utimes() instead of utimensat() */
|
|
|
|
-
|
|
|
|
- /* happy if special cases */
|
|
|
|
- if (times[0].tv_nsec == UTIME_OMIT && times[1].tv_nsec == UTIME_OMIT) {
|
|
|
|
- return 0;
|
|
|
|
- }
|
|
|
|
- if (times[0].tv_nsec == UTIME_NOW && times[1].tv_nsec == UTIME_NOW) {
|
|
|
|
- return utimes(path, NULL);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- /* prepare for hard cases */
|
|
|
|
- if (times[0].tv_nsec == UTIME_NOW || times[1].tv_nsec == UTIME_NOW) {
|
|
|
|
- gettimeofday(&tv_now, NULL);
|
|
|
|
- }
|
|
|
|
- if (times[0].tv_nsec == UTIME_OMIT || times[1].tv_nsec == UTIME_OMIT) {
|
|
|
|
- stat(path, &st);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- for (i = 0; i < 2; i++) {
|
|
|
|
- if (times[i].tv_nsec == UTIME_NOW) {
|
|
|
|
- tv[i].tv_sec = tv_now.tv_sec;
|
|
|
|
- tv[i].tv_usec = tv_now.tv_usec;
|
|
|
|
- } else if (times[i].tv_nsec == UTIME_OMIT) {
|
|
|
|
- tv[i].tv_sec = (i == 0) ? st.st_atime : st.st_mtime;
|
|
|
|
- tv[i].tv_usec = 0;
|
|
|
|
- } else {
|
|
|
|
- tv[i].tv_sec = times[i].tv_sec;
|
|
|
|
- tv[i].tv_usec = times[i].tv_nsec / 1000;
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- return utimes(path, &tv[0]);
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
char *
|
|
char *
|
|
qemu_get_local_state_pathname(const char *relative_pathname)
|
|
qemu_get_local_state_pathname(const char *relative_pathname)
|
|
{
|
|
{
|