From a27b48b132e53fff56182e7b435e6e8e5c6fcaea Mon Sep 17 00:00:00 2001 From: Alexandre Julliard <julliard@winehq.org> Date: Sun, 31 Jan 1999 15:08:31 +0000 Subject: [PATCH] Handle set_file_time requests changing only one of access/mod time. --- server/file.c | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/server/file.c b/server/file.c index 1ade0967264..3c5e8161fa7 100644 --- a/server/file.c +++ b/server/file.c @@ -411,17 +411,22 @@ int set_file_time( int handle, time_t access_time, time_t write_time ) if (!(file = get_file_obj( current->process, handle, GENERIC_WRITE ))) return 0; - utimbuf.actime = access_time; - utimbuf.modtime = write_time; - if (utime( file->name, &utimbuf ) == -1) + if (!access_time || !write_time) { - file_set_error(); - release_object( file ); - return 0; + struct stat st; + if (stat( file->name, &st ) == -1) goto error; + if (!access_time) access_time = st.st_atime; + if (!write_time) write_time = st.st_mtime; } + utimbuf.actime = access_time; + utimbuf.modtime = write_time; + if (utime( file->name, &utimbuf ) == -1) goto error; release_object( file ); return 1; - + error: + file_set_error(); + release_object( file ); + return 0; } int file_lock( struct file *file, int offset_high, int offset_low, -- GitLab