- wim_timestamp_to_timeval(dentry->last_access_time, &tv[0]);
- wim_timestamp_to_timeval(dentry->last_write_time, &tv[1]);
- if (lutimes(output_path, tv) != 0) {
- WARNING("Failed to set timestamp on file `%s': %s",
- output_path, strerror(errno));
+ wim_timestamp_to_timeval(inode->last_access_time, &tv[0]);
+ wim_timestamp_to_timeval(inode->last_write_time, &tv[1]);
+ #ifdef HAVE_LUTIMES
+ ret = lutimes(output_path, tv);
+ #else
+ ret = -1;
+ errno = ENOSYS;
+ #endif
+ if (ret != 0) {
+ #ifdef HAVE_UTIME
+ if (errno == ENOSYS) {
+ struct utimbuf buf;
+ buf.actime = wim_timestamp_to_unix(inode->last_access_time);
+ buf.modtime = wim_timestamp_to_unix(inode->last_write_time);
+ if (utime(output_path, &buf) == 0)
+ return 0;
+ }
+ #endif
+ if (errno != ENOSYS || args->num_lutimes_warnings < 10) {
+ WARNING("Failed to set timestamp on file `%s': %s",
+ output_path, strerror(errno));
+ args->num_lutimes_warnings++;
+ }