From 80a180853d2d177f5c991a36e4b86943d9efa3fe Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Mon, 20 Dec 1999 21:46:41 +0000 Subject: *Finally*. Correct patch to fix timestamp problems from Paul Eggert . I wish I had written this one :-). Jeremy. (This used to be commit 8f93c08881c22d121c7337d11de070e2b8f7ba33) --- source3/smbd/trans2.c | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) (limited to 'source3/smbd') diff --git a/source3/smbd/trans2.c b/source3/smbd/trans2.c index e971f8bbb6..5a8db7efda 100644 --- a/source3/smbd/trans2.c +++ b/source3/smbd/trans2.c @@ -1694,14 +1694,25 @@ static int call_trans2setfilepathinfo(connection_struct *conn, case SMB_SET_FILE_BASIC_INFO: { + /* Patch to do this correctly from Paul Eggert . */ + time_t write_time; + time_t changed_time; + /* Ignore create time at offset pdata. */ /* access time */ tvs.actime = interpret_long_date(pdata+8); - /* write time + changed time, combined. */ - tvs.modtime=MIN(interpret_long_date(pdata+16), - interpret_long_date(pdata+24)); + write_time = interpret_long_date(pdata+16); + changed_time = interpret_long_date(pdata+24); + + tvs.modtime = MAX(write_time, changed_time); + + /* Prefer a defined time to an undefined one. */ + if (tvs.modtime == (time_t)0 || tvs.modtime == (time_t)-1) + tvs.modtime = (write_time == (time_t)0 || write_time == (time_t)-1 + ? changed_time + : write_time); #if 0 /* Needs more testing... */ /* Test from Luke to prevent Win95 from -- cgit