* 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>
+ 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>
+
* fhandler_disk_file.cc (fhandler_disk_file::closedir): Fix bug
introduced by switching to NtClose.
/* 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.
{
int res = GetLastError ();
empty = 0;
- if (res == ERROR_SHARING_VIOLATION ||
- (wincap.access_denied_on_delete ()
- && res == ERROR_ACCESS_DENIED))
+ if (res == ERROR_SHARING_VIOLATION)
{
/* File still inuse, that's ok */
syscall_printf ("Still using %s", name[i]);
}
else if (has_dot_last_component (dir, false))
set_errno (fh->exists () ? EINVAL : ENOENT);
+ else if (!fh->exists ())
+ set_errno (ENOENT);
else if (!fh->rmdir ())
res = 0;
}
else
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);
{
SetFileAttributes (win32_name, (DWORD) win32_name);
- /* Windows 9x seems to report ERROR_ACCESS_DENIED rather than sharing
- violation. */
- if ((wincap.access_denied_on_delete () && lasterr == ERROR_ACCESS_DENIED
- && !win32_name.isremote ())
- || lasterr == ERROR_SHARING_VIOLATION)
+ /* FIXME: Can we get rid of the delqueue now? */
+ if (lasterr == ERROR_SHARING_VIOLATION)
{
/* Add file to the "to be deleted" queue. */
syscall_printf ("Sharing violation, couldn't delete file");
/* Since neither MoveFileEx(MOVEFILE_REPLACE_EXISTING) nor DeleteFile
allow to remove directories, this case is handled separately. */
if (!RemoveDirectoryA (real_new))
- {
- 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);
- }
+ syscall_printf ("Can't remove target directory");
else if (MoveFile (real_old, real_new))
res = 0;
}
chunksize:0,
heapslop:0x0,
is_server:false,
- access_denied_on_delete:false,
has_delete_on_close:true,
has_page_guard:true,
has_security:true,
chunksize:0,
heapslop:0x0,
is_server:false,
- access_denied_on_delete:false,
has_delete_on_close:true,
has_page_guard:true,
has_security:true,
chunksize:0,
heapslop:0x0,
is_server:false,
- access_denied_on_delete:false,
has_delete_on_close:true,
has_page_guard:true,
has_security:true,
chunksize:0,
heapslop:0x0,
is_server:false,
- access_denied_on_delete:false,
has_delete_on_close:true,
has_page_guard:true,
has_security:true,
chunksize:0,
heapslop:0x0,
is_server:false,
- access_denied_on_delete:false,
has_delete_on_close:true,
has_page_guard:true,
has_security:true,
chunksize:0,
heapslop:0x4,
is_server:true,
- access_denied_on_delete:false,
has_delete_on_close:true,
has_page_guard:true,
has_security:true,
chunksize:0,
heapslop:0x4,
is_server:false,
- access_denied_on_delete:false,
has_delete_on_close:true,
has_page_guard:true,
has_security:true,
DWORD chunksize;
DWORD heapslop;
unsigned is_server : 1;
- unsigned access_denied_on_delete : 1;
unsigned has_delete_on_close : 1;
unsigned has_page_guard : 1;
unsigned has_security : 1;
DWORD IMPLEMENT (chunksize)
DWORD IMPLEMENT (heapslop)
bool IMPLEMENT (is_server)
- bool IMPLEMENT (access_denied_on_delete)
bool IMPLEMENT (has_delete_on_close)
bool IMPLEMENT (has_page_guard)
bool IMPLEMENT (has_security)