OSDN Git Service

* dir.cc (rmdir): Add more samba workarounds.
authorcgf <cgf>
Thu, 11 Sep 2003 14:43:08 +0000 (14:43 +0000)
committercgf <cgf>
Thu, 11 Sep 2003 14:43:08 +0000 (14:43 +0000)
winsup/cygwin/ChangeLog
winsup/cygwin/dir.cc

index df7d2b2..28be890 100644 (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>
 
        * shared.cc (user_shared_initialize): Revert length attribute for name
index 96ab1f2..a044f53 100644 (file)
@@ -327,12 +327,17 @@ rmdir (const char *dir)
        SetFileAttributes (real_dir,
                           (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
             directory can't be removed because it's not empty. Checking for
             existence afterwards keeps us informed about success. */
-         if (GetFileAttributes (real_dir) != INVALID_FILE_ATTRIBUTES)
+         if (att != INVALID_FILE_ATTRIBUTES)
            set_errno (ENOTEMPTY);
          else
            res = 0;