Throughout remove all usage of wincap.access_denied_on_delete.
* dir.cc (rmdir): Add existance check to be errno-compatible with Linux. * fhandler_disk_file.cc (fhandler_disk_file::rmdir): Drop test for non-existent dir on 9x share. * syscalls.cc (unlink): Add comment. * wincap.cc: Remove access_denied_on_delete flag throughout. * wincap.h: Ditto.
This commit is contained in:
parent
e387a378b4
commit
501f1020f9
|
@ -1,3 +1,13 @@
|
||||||
|
2007-02-22 Corinna Vinschen <corinna@vinschen.de>
|
||||||
|
|
||||||
|
Throughout remove all usage of wincap.access_denied_on_delete.
|
||||||
|
* dir.cc (rmdir): Add existance check to be errno-compatible with Linux.
|
||||||
|
* fhandler_disk_file.cc (fhandler_disk_file::rmdir): Drop test for
|
||||||
|
non-existent dir on 9x share.
|
||||||
|
* syscalls.cc (unlink): Add comment.
|
||||||
|
* wincap.cc: Remove access_denied_on_delete flag throughout.
|
||||||
|
* wincap.h: Ditto.
|
||||||
|
|
||||||
2007-02-22 Corinna Vinschen <corinna@vinschen.de>
|
2007-02-22 Corinna Vinschen <corinna@vinschen.de>
|
||||||
|
|
||||||
* fhandler_disk_file.cc (fhandler_disk_file::closedir): Fix bug
|
* fhandler_disk_file.cc (fhandler_disk_file::closedir): Fix bug
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/* delqueue.cc
|
/* delqueue.cc
|
||||||
|
|
||||||
Copyright 1996, 1998, 1999, 2000, 2001 Red Hat, Inc.
|
Copyright 1996, 1998, 1999, 2000, 2001, 2007 Red Hat, Inc.
|
||||||
|
|
||||||
This file is part of Cygwin.
|
This file is part of Cygwin.
|
||||||
|
|
||||||
|
@ -86,9 +86,7 @@ delqueue_list::process_queue ()
|
||||||
{
|
{
|
||||||
int res = GetLastError ();
|
int res = GetLastError ();
|
||||||
empty = 0;
|
empty = 0;
|
||||||
if (res == ERROR_SHARING_VIOLATION ||
|
if (res == ERROR_SHARING_VIOLATION)
|
||||||
(wincap.access_denied_on_delete ()
|
|
||||||
&& res == ERROR_ACCESS_DENIED))
|
|
||||||
{
|
{
|
||||||
/* File still inuse, that's ok */
|
/* File still inuse, that's ok */
|
||||||
syscall_printf ("Still using %s", name[i]);
|
syscall_printf ("Still using %s", name[i]);
|
||||||
|
|
|
@ -309,6 +309,8 @@ rmdir (const char *dir)
|
||||||
}
|
}
|
||||||
else if (has_dot_last_component (dir, false))
|
else if (has_dot_last_component (dir, false))
|
||||||
set_errno (fh->exists () ? EINVAL : ENOENT);
|
set_errno (fh->exists () ? EINVAL : ENOENT);
|
||||||
|
else if (!fh->exists ())
|
||||||
|
set_errno (ENOENT);
|
||||||
else if (!fh->rmdir ())
|
else if (!fh->rmdir ())
|
||||||
res = 0;
|
res = 0;
|
||||||
|
|
||||||
|
|
|
@ -1404,16 +1404,6 @@ fhandler_disk_file::rmdir ()
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
err = GetLastError ();
|
err = GetLastError ();
|
||||||
/* On 9X ERROR_ACCESS_DENIED is returned if you try to remove a
|
|
||||||
non-empty directory. */
|
|
||||||
if (err == ERROR_ACCESS_DENIED
|
|
||||||
&& wincap.access_denied_on_delete ())
|
|
||||||
err = ERROR_DIR_NOT_EMPTY;
|
|
||||||
/* ...and, that's *not* funny, when trying to remove a non-existing
|
|
||||||
directory on a share, which is hosted by a 9x machine, the error
|
|
||||||
code ERROR_INVALID_FUNCTION is returned. */
|
|
||||||
else if (err == ERROR_INVALID_FUNCTION)
|
|
||||||
err = ERROR_FILE_NOT_FOUND;
|
|
||||||
|
|
||||||
__seterrno_from_win_error (err);
|
__seterrno_from_win_error (err);
|
||||||
|
|
||||||
|
|
|
@ -392,11 +392,8 @@ unlink (const char *ourname)
|
||||||
{
|
{
|
||||||
SetFileAttributes (win32_name, (DWORD) win32_name);
|
SetFileAttributes (win32_name, (DWORD) win32_name);
|
||||||
|
|
||||||
/* Windows 9x seems to report ERROR_ACCESS_DENIED rather than sharing
|
/* FIXME: Can we get rid of the delqueue now? */
|
||||||
violation. */
|
if (lasterr == ERROR_SHARING_VIOLATION)
|
||||||
if ((wincap.access_denied_on_delete () && lasterr == ERROR_ACCESS_DENIED
|
|
||||||
&& !win32_name.isremote ())
|
|
||||||
|| lasterr == ERROR_SHARING_VIOLATION)
|
|
||||||
{
|
{
|
||||||
/* Add file to the "to be deleted" queue. */
|
/* Add file to the "to be deleted" queue. */
|
||||||
syscall_printf ("Sharing violation, couldn't delete file");
|
syscall_printf ("Sharing violation, couldn't delete file");
|
||||||
|
@ -1443,14 +1440,7 @@ rename (const char *oldpath, const char *newpath)
|
||||||
/* Since neither MoveFileEx(MOVEFILE_REPLACE_EXISTING) nor DeleteFile
|
/* Since neither MoveFileEx(MOVEFILE_REPLACE_EXISTING) nor DeleteFile
|
||||||
allow to remove directories, this case is handled separately. */
|
allow to remove directories, this case is handled separately. */
|
||||||
if (!RemoveDirectoryA (real_new))
|
if (!RemoveDirectoryA (real_new))
|
||||||
{
|
syscall_printf ("Can't remove target directory");
|
||||||
syscall_printf ("Can't remove target directory");
|
|
||||||
/* On 9X ERROR_ACCESS_DENIED is returned if you try to remove
|
|
||||||
a non-empty directory. */
|
|
||||||
if (GetLastError () == ERROR_ACCESS_DENIED
|
|
||||||
&& wincap.access_denied_on_delete ())
|
|
||||||
SetLastError (ERROR_DIR_NOT_EMPTY);
|
|
||||||
}
|
|
||||||
else if (MoveFile (real_old, real_new))
|
else if (MoveFile (real_old, real_new))
|
||||||
res = 0;
|
res = 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,7 +17,6 @@ static NO_COPY wincaps wincap_unknown = {
|
||||||
chunksize:0,
|
chunksize:0,
|
||||||
heapslop:0x0,
|
heapslop:0x0,
|
||||||
is_server:false,
|
is_server:false,
|
||||||
access_denied_on_delete:false,
|
|
||||||
has_delete_on_close:true,
|
has_delete_on_close:true,
|
||||||
has_page_guard:true,
|
has_page_guard:true,
|
||||||
has_security:true,
|
has_security:true,
|
||||||
|
@ -81,7 +80,6 @@ static NO_COPY wincaps wincap_nt4 = {
|
||||||
chunksize:0,
|
chunksize:0,
|
||||||
heapslop:0x0,
|
heapslop:0x0,
|
||||||
is_server:false,
|
is_server:false,
|
||||||
access_denied_on_delete:false,
|
|
||||||
has_delete_on_close:true,
|
has_delete_on_close:true,
|
||||||
has_page_guard:true,
|
has_page_guard:true,
|
||||||
has_security:true,
|
has_security:true,
|
||||||
|
@ -145,7 +143,6 @@ static NO_COPY wincaps wincap_nt4sp4 = {
|
||||||
chunksize:0,
|
chunksize:0,
|
||||||
heapslop:0x0,
|
heapslop:0x0,
|
||||||
is_server:false,
|
is_server:false,
|
||||||
access_denied_on_delete:false,
|
|
||||||
has_delete_on_close:true,
|
has_delete_on_close:true,
|
||||||
has_page_guard:true,
|
has_page_guard:true,
|
||||||
has_security:true,
|
has_security:true,
|
||||||
|
@ -209,7 +206,6 @@ static NO_COPY wincaps wincap_2000 = {
|
||||||
chunksize:0,
|
chunksize:0,
|
||||||
heapslop:0x0,
|
heapslop:0x0,
|
||||||
is_server:false,
|
is_server:false,
|
||||||
access_denied_on_delete:false,
|
|
||||||
has_delete_on_close:true,
|
has_delete_on_close:true,
|
||||||
has_page_guard:true,
|
has_page_guard:true,
|
||||||
has_security:true,
|
has_security:true,
|
||||||
|
@ -273,7 +269,6 @@ static NO_COPY wincaps wincap_xp = {
|
||||||
chunksize:0,
|
chunksize:0,
|
||||||
heapslop:0x0,
|
heapslop:0x0,
|
||||||
is_server:false,
|
is_server:false,
|
||||||
access_denied_on_delete:false,
|
|
||||||
has_delete_on_close:true,
|
has_delete_on_close:true,
|
||||||
has_page_guard:true,
|
has_page_guard:true,
|
||||||
has_security:true,
|
has_security:true,
|
||||||
|
@ -337,7 +332,6 @@ static NO_COPY wincaps wincap_2003 = {
|
||||||
chunksize:0,
|
chunksize:0,
|
||||||
heapslop:0x4,
|
heapslop:0x4,
|
||||||
is_server:true,
|
is_server:true,
|
||||||
access_denied_on_delete:false,
|
|
||||||
has_delete_on_close:true,
|
has_delete_on_close:true,
|
||||||
has_page_guard:true,
|
has_page_guard:true,
|
||||||
has_security:true,
|
has_security:true,
|
||||||
|
@ -401,7 +395,6 @@ static NO_COPY wincaps wincap_vista = {
|
||||||
chunksize:0,
|
chunksize:0,
|
||||||
heapslop:0x4,
|
heapslop:0x4,
|
||||||
is_server:false,
|
is_server:false,
|
||||||
access_denied_on_delete:false,
|
|
||||||
has_delete_on_close:true,
|
has_delete_on_close:true,
|
||||||
has_page_guard:true,
|
has_page_guard:true,
|
||||||
has_security:true,
|
has_security:true,
|
||||||
|
|
|
@ -17,7 +17,6 @@ struct wincaps
|
||||||
DWORD chunksize;
|
DWORD chunksize;
|
||||||
DWORD heapslop;
|
DWORD heapslop;
|
||||||
unsigned is_server : 1;
|
unsigned is_server : 1;
|
||||||
unsigned access_denied_on_delete : 1;
|
|
||||||
unsigned has_delete_on_close : 1;
|
unsigned has_delete_on_close : 1;
|
||||||
unsigned has_page_guard : 1;
|
unsigned has_page_guard : 1;
|
||||||
unsigned has_security : 1;
|
unsigned has_security : 1;
|
||||||
|
@ -97,7 +96,6 @@ public:
|
||||||
DWORD IMPLEMENT (chunksize)
|
DWORD IMPLEMENT (chunksize)
|
||||||
DWORD IMPLEMENT (heapslop)
|
DWORD IMPLEMENT (heapslop)
|
||||||
bool IMPLEMENT (is_server)
|
bool IMPLEMENT (is_server)
|
||||||
bool IMPLEMENT (access_denied_on_delete)
|
|
||||||
bool IMPLEMENT (has_delete_on_close)
|
bool IMPLEMENT (has_delete_on_close)
|
||||||
bool IMPLEMENT (has_page_guard)
|
bool IMPLEMENT (has_page_guard)
|
||||||
bool IMPLEMENT (has_security)
|
bool IMPLEMENT (has_security)
|
||||||
|
|
Loading…
Reference in New Issue