* dir.cc (rmdir): Add more samba workarounds.

This commit is contained in:
Christopher Faylor 2003-09-11 14:43:09 +00:00
parent d13d2a28ff
commit 88092a3ea1
2 changed files with 11 additions and 2 deletions

View File

@ -1,3 +1,7 @@
2003-09-11 Christopher Faylor <cgf@redhat.com>
* dir.cc (rmdir): Add more samba workarounds.
2003-09-11 Corinna Vinschen <corinna@vinschen.de> 2003-09-11 Corinna Vinschen <corinna@vinschen.de>
* shared.cc (user_shared_initialize): Revert length attribute for name * shared.cc (user_shared_initialize): Revert length attribute for name

View File

@ -327,12 +327,17 @@ rmdir (const char *dir)
SetFileAttributes (real_dir, SetFileAttributes (real_dir,
(DWORD) real_dir & ~FILE_ATTRIBUTE_READONLY); (DWORD) real_dir & ~FILE_ATTRIBUTE_READONLY);
if (RemoveDirectory (real_dir)) int rc = RemoveDirectory (real_dir);
DWORD att = GetFileAttributes (real_dir);
/* Sometimes smb indicates failure when it really succeeds, so check for
this case specifically. */
if (rc || att == INVALID_FILE_ATTRIBUTES)
{ {
/* RemoveDirectory on a samba drive doesn't return an error if the /* RemoveDirectory on a samba drive doesn't return an error if the
directory can't be removed because it's not empty. Checking for directory can't be removed because it's not empty. Checking for
existence afterwards keeps us informed about success. */ existence afterwards keeps us informed about success. */
if (GetFileAttributes (real_dir) != INVALID_FILE_ATTRIBUTES) if (att != INVALID_FILE_ATTRIBUTES)
set_errno (ENOTEMPTY); set_errno (ENOTEMPTY);
else else
res = 0; res = 0;