ntdll: Ignore -1 time value same as 0 when setting file times.
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
3172b854ae
commit
2a15f77b49
|
@ -5068,7 +5068,6 @@ todo_wine
|
||||||
memset(&basicinfo, 0, sizeof(basicinfo));
|
memset(&basicinfo, 0, sizeof(basicinfo));
|
||||||
basicinfo.LastAccessTime.QuadPart = -1;
|
basicinfo.LastAccessTime.QuadPart = -1;
|
||||||
ret = pSetFileInformationByHandle(file, FileBasicInfo, &basicinfo, sizeof(basicinfo));
|
ret = pSetFileInformationByHandle(file, FileBasicInfo, &basicinfo, sizeof(basicinfo));
|
||||||
todo_wine
|
|
||||||
ok(ret, "Failed to set basic info, error %d.\n", GetLastError());
|
ok(ret, "Failed to set basic info, error %d.\n", GetLastError());
|
||||||
|
|
||||||
memset(&basicinfo, 0, sizeof(basicinfo));
|
memset(&basicinfo, 0, sizeof(basicinfo));
|
||||||
|
@ -5402,7 +5401,6 @@ static void test_SetFileTime(void)
|
||||||
|
|
||||||
memset(&ft1, 0xff, sizeof(ft1));
|
memset(&ft1, 0xff, sizeof(ft1));
|
||||||
ret = SetFileTime(hfile, NULL, NULL, &ft1);
|
ret = SetFileTime(hfile, NULL, NULL, &ft1);
|
||||||
todo_wine
|
|
||||||
ok(ret, "SetFileTime error %d\n", GetLastError());
|
ok(ret, "SetFileTime error %d\n", GetLastError());
|
||||||
memset(&ft1, 0, sizeof(ft1));
|
memset(&ft1, 0, sizeof(ft1));
|
||||||
ret = GetFileTime(hfile, NULL, NULL, &ft1); /* get the actual time back */
|
ret = GetFileTime(hfile, NULL, NULL, &ft1); /* get the actual time back */
|
||||||
|
|
|
@ -2513,12 +2513,16 @@ NTSTATUS WINAPI NtSetInformationFile(HANDLE handle, PIO_STATUS_BLOCK io,
|
||||||
{
|
{
|
||||||
struct stat st;
|
struct stat st;
|
||||||
const FILE_BASIC_INFORMATION *info = ptr;
|
const FILE_BASIC_INFORMATION *info = ptr;
|
||||||
|
LARGE_INTEGER mtime, atime;
|
||||||
|
|
||||||
if ((io->u.Status = server_get_unix_fd( handle, 0, &fd, &needs_close, NULL, NULL )))
|
if ((io->u.Status = server_get_unix_fd( handle, 0, &fd, &needs_close, NULL, NULL )))
|
||||||
return io->u.Status;
|
return io->u.Status;
|
||||||
|
|
||||||
if (info->LastAccessTime.QuadPart || info->LastWriteTime.QuadPart)
|
mtime.QuadPart = info->LastWriteTime.QuadPart == -1 ? 0 : info->LastWriteTime.QuadPart;
|
||||||
io->u.Status = set_file_times( fd, &info->LastWriteTime, &info->LastAccessTime );
|
atime.QuadPart = info->LastAccessTime.QuadPart == -1 ? 0 : info->LastAccessTime.QuadPart;
|
||||||
|
|
||||||
|
if (atime.QuadPart || mtime.QuadPart)
|
||||||
|
io->u.Status = set_file_times( fd, &mtime, &atime );
|
||||||
|
|
||||||
if (io->u.Status == STATUS_SUCCESS && info->FileAttributes)
|
if (io->u.Status == STATUS_SUCCESS && info->FileAttributes)
|
||||||
{
|
{
|
||||||
|
|
|
@ -1332,10 +1332,9 @@ static void test_file_basic_information(void)
|
||||||
fbi2.LastWriteTime.QuadPart = -1;
|
fbi2.LastWriteTime.QuadPart = -1;
|
||||||
U(io).Status = 0xdeadbeef;
|
U(io).Status = 0xdeadbeef;
|
||||||
res = pNtSetInformationFile(h, &io, &fbi2, sizeof fbi2, FileBasicInformation);
|
res = pNtSetInformationFile(h, &io, &fbi2, sizeof fbi2, FileBasicInformation);
|
||||||
todo_wine {
|
|
||||||
ok ( res == STATUS_SUCCESS, "can't set system attribute, NtSetInformationFile returned %x\n", res );
|
ok ( res == STATUS_SUCCESS, "can't set system attribute, NtSetInformationFile returned %x\n", res );
|
||||||
ok ( U(io).Status == STATUS_SUCCESS, "can't set system attribute, io.Status is %x\n", U(io).Status );
|
ok ( U(io).Status == STATUS_SUCCESS, "can't set system attribute, io.Status is %x\n", U(io).Status );
|
||||||
}
|
|
||||||
memset(&fbi2, 0, sizeof(fbi2));
|
memset(&fbi2, 0, sizeof(fbi2));
|
||||||
res = pNtQueryInformationFile(h, &io, &fbi2, sizeof fbi2, FileBasicInformation);
|
res = pNtQueryInformationFile(h, &io, &fbi2, sizeof fbi2, FileBasicInformation);
|
||||||
ok ( res == STATUS_SUCCESS, "can't get attributes, res %x\n", res);
|
ok ( res == STATUS_SUCCESS, "can't get attributes, res %x\n", res);
|
||||||
|
|
Loading…
Reference in New Issue