]> arthur.barton.de Git - netatalk.git/commitdiff
return the right error code when deleting afp current directory if it's already been...
authordidg <didg>
Tue, 26 Jan 2010 08:14:09 +0000 (08:14 +0000)
committerdidg <didg>
Tue, 26 Jan 2010 08:14:09 +0000 (08:14 +0000)
etc/afpd/directory.c
include/atalk/unix.h
libatalk/vfs/unix.c

index f03e22621d7c123a1e4cb5d8d8be9aba842d4fe3..db3ed8cd2bb3cafae4ad19b695fc5a777a88e331 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * $Id: directory.c,v 1.129 2010-01-21 12:10:19 didg Exp $
+ * $Id: directory.c,v 1.130 2010-01-26 08:14:09 didg Exp $
  *
  * Copyright (c) 1990,1993 Regents of The University of Michigan.
  * All Rights Reserved.  See COPYRIGHT.
@@ -2678,11 +2678,11 @@ int deletecurdir(struct vol *vol)
         goto delete_done;
     }
 
-    if ( !(err = netatalk_rmdir(fdir->d_u_name))) {
+    err = netatalk_rmdir_all_errors(fdir->d_u_name);
+    if ( err ==  AFP_OK || err == AFPERR_NOOBJ) {
         dirchildremove(curdir, fdir);
         cnid_delete(vol->v_cdb, fdir->d_did);
         dir_remove( vol, fdir );
-        err = AFP_OK;
     }
 delete_done:
     if (dp) {
index af671acfa4282f13bf9beea36e31c05a2356e598..697d2a7f4cb4f40123df295c8e9b8dda6ae03ba9 100644 (file)
@@ -1,5 +1,5 @@
 /*
-   $Id: unix.h,v 1.1 2009-10-15 12:06:07 franklahm Exp $
+   $Id: unix.h,v 1.2 2010-01-26 08:14:09 didg Exp $
    Copyright (c) 2009 Frank Lahm <franklahm@gmail.com>
 
    This program is free software; you can redistribute it and/or modify
 /* vfs/unix.c */
 extern int netatalk_unlink(const char *name);
 extern char *fullpathname(const char *);
+
+/* rmdir ENOENT not an error */
 extern int netatalk_rmdir(const char *name);
+
+extern int netatalk_rmdir_all_errors(const char *name);
+
 extern int setfilmode(const char *, mode_t, struct stat *, mode_t);
 extern int dir_rx_set(mode_t mode);
 extern int stickydirmode(const char *name, const mode_t mode, const int dropbox, const mode_t v_umask);
index b8df2292bb3915ef34525f353d2746d365594bae..35363049c5b486da79f7901e9a77803c64782f88 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * $Id: unix.c,v 1.7 2010-01-20 13:22:13 franklahm Exp $
+ * $Id: unix.c,v 1.8 2010-01-26 08:14:09 didg Exp $
  *
  * Copyright (c) 1990,1993 Regents of The University of Michigan.
  * All Rights Reserved.  See COPYRIGHT.
@@ -102,14 +102,13 @@ int setfilmode(const char * name, mode_t mode, struct stat *st, mode_t v_umask)
 
 /* -------------------
    system rmdir with afp error code.
-   ENOENT is not an error.
 */
-int netatalk_rmdir(const char *name)
+int netatalk_rmdir_all_errors(const char *name)
 {
     if (rmdir(name) < 0) {
         switch ( errno ) {
         case ENOENT :
-            break;
+            return AFPERR_NOOBJ;
         case ENOTEMPTY :
             return AFPERR_DIRNEMPT;
         case EPERM:
@@ -124,6 +123,18 @@ int netatalk_rmdir(const char *name)
     return AFP_OK;
 }
 
+/* -------------------
+   system rmdir with afp error code.
+   ENOENT is not an error.
+*/
+int netatalk_rmdir(const char *name)
+{
+    int ret = netatalk_rmdir_all_errors(name);
+    if (ret == AFPERR_NOOBJ)
+        return AFP_OK;
+    return ret;
+}
+
 /* -------------------
    system unlink with afp error code.
    ENOENT is not an error.