mirror of
git://sourceware.org/git/newlib-cygwin.git
synced 2025-01-18 12:29:32 +08:00
* 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>
|
||||
|
||||
* 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;
|
||||
struct timeval tmp[2];
|
||||
path_conv win32 (path);
|
||||
PSECURITY_DESCRIPTOR sd = NULL;
|
||||
DWORD sd_size;
|
||||
|
||||
if (win32.error)
|
||||
{
|
||||
@ -461,8 +459,10 @@ utimes (const char *path, struct timeval *tvp)
|
||||
|
||||
/* MSDN suggests using FILE_FLAG_BACKUP_SEMANTICS for accessing
|
||||
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 (),
|
||||
GENERIC_WRITE,
|
||||
iswinnt ? FILE_WRITE_ATTRIBUTES : GENERIC_WRITE,
|
||||
FILE_SHARE_READ | FILE_SHARE_WRITE,
|
||||
&sec_none_nih,
|
||||
OPEN_EXISTING,
|
||||
@ -477,38 +477,13 @@ utimes (const char *path, struct timeval *tvp)
|
||||
/* What we can do with directories more? */
|
||||
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
|
||||
{
|
||||
res = -1;
|
||||
__seterrno ();
|
||||
}
|
||||
}
|
||||
if (h != INVALID_HANDLE_VALUE)
|
||||
else
|
||||
{
|
||||
if (tvp == 0)
|
||||
{
|
||||
@ -544,9 +519,6 @@ utimes (const char *path, struct timeval *tvp)
|
||||
CloseHandle (h);
|
||||
}
|
||||
|
||||
if (sd)
|
||||
write_sd (win32.get_win32 (), sd, sd_size);
|
||||
|
||||
syscall_printf ("%d = utimes (%s, %x); (h%d)",
|
||||
res, path, tvp, h);
|
||||
return res;
|
||||
|
Loading…
x
Reference in New Issue
Block a user