* times.cc (utimes): Revert previous change. Just open the
file using FILE_WRITE_ATTRIBUTES instead of GENERIC_WRITE on NT/W2K.
This commit is contained in:
parent
2a9366ff49
commit
91a1423a87
|
@ -1,3 +1,9 @@
|
||||||
|
Wed Aug 15 12:43:00 2001 Corinna Vinschen <corinna@vinschen.de>
|
||||||
|
|
||||||
|
* times.cc (utimes): Revert previous change. Just open the
|
||||||
|
file using FILE_WRITE_ATTRIBUTES instead of GENERIC_WRITE
|
||||||
|
on NT/W2K.
|
||||||
|
|
||||||
Wed Aug 15 12:18:00 2001 Corinna Vinschen <corinna@vinschen.de>
|
Wed Aug 15 12:18:00 2001 Corinna Vinschen <corinna@vinschen.de>
|
||||||
|
|
||||||
* security.cc (set_nt_attribute): Return always -1 in case of
|
* security.cc (set_nt_attribute): Return always -1 in case of
|
||||||
|
|
|
@ -449,8 +449,6 @@ utimes (const char *path, struct timeval *tvp)
|
||||||
int res = 0;
|
int res = 0;
|
||||||
struct timeval tmp[2];
|
struct timeval tmp[2];
|
||||||
path_conv win32 (path);
|
path_conv win32 (path);
|
||||||
PSECURITY_DESCRIPTOR sd = NULL;
|
|
||||||
DWORD sd_size;
|
|
||||||
|
|
||||||
if (win32.error)
|
if (win32.error)
|
||||||
{
|
{
|
||||||
|
@ -461,8 +459,10 @@ utimes (const char *path, struct timeval *tvp)
|
||||||
|
|
||||||
/* MSDN suggests using FILE_FLAG_BACKUP_SEMANTICS for accessing
|
/* MSDN suggests using FILE_FLAG_BACKUP_SEMANTICS for accessing
|
||||||
the times of directories. FIXME: what about Win95??? */
|
the times of directories. FIXME: what about Win95??? */
|
||||||
|
/* Note: It's not documented in MSDN that FILE_WRITE_ATTRIBUTES is
|
||||||
|
sufficient to change the timestamps... */
|
||||||
HANDLE h = CreateFileA (win32.get_win32 (),
|
HANDLE h = CreateFileA (win32.get_win32 (),
|
||||||
GENERIC_WRITE,
|
iswinnt ? FILE_WRITE_ATTRIBUTES : GENERIC_WRITE,
|
||||||
FILE_SHARE_READ | FILE_SHARE_WRITE,
|
FILE_SHARE_READ | FILE_SHARE_WRITE,
|
||||||
&sec_none_nih,
|
&sec_none_nih,
|
||||||
OPEN_EXISTING,
|
OPEN_EXISTING,
|
||||||
|
@ -477,38 +477,13 @@ utimes (const char *path, struct timeval *tvp)
|
||||||
/* What we can do with directories more? */
|
/* What we can do with directories more? */
|
||||||
res = 0;
|
res = 0;
|
||||||
}
|
}
|
||||||
else if (allow_ntsec && win32.has_acls ())
|
|
||||||
{
|
|
||||||
/* The following hack allows setting the correct filetime
|
|
||||||
on NTFS with ntsec ON even when the file is R/O for the
|
|
||||||
current user. This solves the `cp -p' problem and allows
|
|
||||||
a more UNIX like behaviour. Basically we save the file's
|
|
||||||
current security descriptor, change the file access so
|
|
||||||
that we have write access (if possible) and if that worked
|
|
||||||
fine, reset the old security descriptor at the end of the
|
|
||||||
function. */
|
|
||||||
sd_size = 4096;
|
|
||||||
sd = (PSECURITY_DESCRIPTOR) alloca (sd_size);
|
|
||||||
if (read_sd (win32.get_win32 (), sd, &sd_size) <= 0)
|
|
||||||
sd = NULL;
|
|
||||||
else if (set_file_attribute (TRUE, win32.get_win32 (), 0600))
|
|
||||||
sd = NULL;
|
|
||||||
else
|
|
||||||
h = CreateFileA (win32.get_win32 (),
|
|
||||||
GENERIC_WRITE,
|
|
||||||
FILE_SHARE_READ | FILE_SHARE_WRITE,
|
|
||||||
&sec_none_nih,
|
|
||||||
OPEN_EXISTING,
|
|
||||||
FILE_ATTRIBUTE_NORMAL | FILE_FLAG_BACKUP_SEMANTICS,
|
|
||||||
0);
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
res = -1;
|
res = -1;
|
||||||
__seterrno ();
|
__seterrno ();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (h != INVALID_HANDLE_VALUE)
|
else
|
||||||
{
|
{
|
||||||
if (tvp == 0)
|
if (tvp == 0)
|
||||||
{
|
{
|
||||||
|
@ -544,9 +519,6 @@ utimes (const char *path, struct timeval *tvp)
|
||||||
CloseHandle (h);
|
CloseHandle (h);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (sd)
|
|
||||||
write_sd (win32.get_win32 (), sd, sd_size);
|
|
||||||
|
|
||||||
syscall_printf ("%d = utimes (%s, %x); (h%d)",
|
syscall_printf ("%d = utimes (%s, %x); (h%d)",
|
||||||
res, path, tvp, h);
|
res, path, tvp, h);
|
||||||
return res;
|
return res;
|
||||||
|
|
Loading…
Reference in New Issue