]> arthur.barton.de Git - netatalk.git/blobdiff - libatalk/vfs/vfs.c
Fix typo
[netatalk.git] / libatalk / vfs / vfs.c
index 57d64ba1ae5294e601c2b118bdaf7b6a93c0e46f..8495d8c22fba19dd88789b82c6822bfb4a4fb3d6 100644 (file)
@@ -89,26 +89,21 @@ for_each_adouble(const char *from, const char *name, rf_loop fn, void *data, int
     return ret;
 }
 
-/*******************************************************************************
- * classic adouble format 
- *******************************************************************************/
-
 static int netatalk_name(const char *name)
 {
-    return strcasecmp(name,".AppleDouble") &&
-        strcasecmp(name,".AppleDB") &&
-        strcasecmp(name,".AppleDesktop");
+    return strcmp(name,".AppleDB") && strcmp(name,".AppleDesktop");        
 }
 
+/*******************************************************************************
+ * classic adouble format 
+ *******************************************************************************/
+
 static int validupath_adouble(VFS_FUNC_ARGS_VALIDUPATH)
 {
     if (name[0] != '.')
         return 1;
     
-    if (!(vol->v_flags & AFPVOL_USEDOTS))
-        return 0;
-        
-    return netatalk_name(name) && strcasecmp(name,".Parent");
+    return netatalk_name(name) && strcmp(name,".AppleDouble") && strcasecmp(name,".Parent");
 }                                           
 
 /* ----------------- */
@@ -295,8 +290,6 @@ static int RF_renamefile_adouble(VFS_FUNC_ARGS_RENAMEFILE)
 static int RF_copyfile_adouble(VFS_FUNC_ARGS_COPYFILE)
 /* const struct vol *vol, int sfd, const char *src, const char *dst */
 {
-    return 0;
-#if 0
     EC_INIT;
     bstring s = NULL, d = NULL;
     char *dup1 = NULL;
@@ -341,7 +334,10 @@ static int RF_copyfile_adouble(VFS_FUNC_ARGS_COPYFILE)
         EC_ZERO(bcatcstr(d, name));
     }
 
-    EC_ZERO(copy_file(sfd, cfrombstr(s), cfrombstr(d), 0666));
+    /* ignore errors */
+    if (copy_file(sfd, cfrombstr(s), cfrombstr(d), 0666) != 0)
+        if (errno != ENOENT)
+            EC_FAIL;
 
 EC_CLEANUP:
     bdestroy(s);
@@ -352,7 +348,6 @@ EC_CLEANUP:
     if (dup4) free(dup4);
 
     EC_EXIT;
-#endif
 }
 
 #ifdef HAVE_SOLARIS_ACLS
@@ -469,15 +464,12 @@ static int validupath_ea(VFS_FUNC_ARGS_VALIDUPATH)
     if (name[0] != '.')
         return 1;
     
-    if (!(vol->v_flags & AFPVOL_USEDOTS))
-        return 0;
-
 #ifndef HAVE_EAFD
     if (name[1] == '_')
-        return 0;
+        return ad_valid_header_osx(name);
 #endif
-    return netatalk_name(name) && strcasecmp(name,".Parent");
-}             
+    return netatalk_name(name);
+}
 
 /* ----------------- */
 static int RF_chown_ea(VFS_FUNC_ARGS_CHOWN)
@@ -580,50 +572,12 @@ static int RF_deletefile_ea(VFS_FUNC_ARGS_DELETEFILE)
 }
 static int RF_copyfile_ea(VFS_FUNC_ARGS_COPYFILE)
 {
-    return 0;
-#if 0
-    EC_INIT;
-
-    /* copy meta EA */
-    if (copy_ea(AD_EA_META, sfd, src, dst, 0666) != 0)
-        return AFPERR_MISC;
-
-    /* copy reso */
 #ifdef HAVE_EAFD
-    int sfile = -1, dfile = -1, sea = -1, dea = -1;
-
-    if ((sfile = openat(sfd, src, O_RDONLY)) == -1) {
-        ret = AFPERR_MISC;
-        goto copyresoerr;
-    }
-
-    if ((dfile = open(dts, O_WRONLY)) == -1) {
-        ret = AFPERR_MISC;
-        goto copyresoerr;
-    }
-
-    if ((sea = openat(sfile, AD_EA_RESO, O_RDONLY | O_XATTR)) == -1) {
-        ret = AFPERR_MISC;
-        goto copyresoerr;
-    }
-
-    if ((dea = openat(dfile, AD_EA_RESO, O_RDWR | O_CREAT | O_XATTR)) == -1) {
-        ret = AFPERR_MISC;
-        goto copyresoerr;
-    }
-
-    ret = copy_file_fd(sea, dea);
-
-copyresoerr:
-    if (sfile != -1) close(sfile);
-    if (dfile != -1) close(dfile);
-    if (sea != -1) close(sea);
-    if (dea != -1) close(dea);
-    if (ret != 0)
-        return ret;
+    /* the EA VFS module does this all for us */
+    return 0;
+#endif
 
-EC_CLEANUP:
-#else
+    EC_INIT;
     bstring s = NULL, d = NULL;
     char *dup1 = NULL;
     char *dup2 = NULL;
@@ -654,7 +608,17 @@ EC_CLEANUP:
     EC_ZERO(bcatcstr(d, "/._"));
     EC_ZERO(bcatcstr(d, name));
 
-    EC_ZERO(copy_file(sfd, cfrombstr(s), cfrombstr(d), 0666));
+    if (copy_file(sfd, cfrombstr(s), cfrombstr(d), 0666) != 0) {
+        switch (errno) {
+        case ENOENT:
+            break;
+        default:
+            LOG(log_error, logtype_afpd, "[VFS] copyfile(\"%s\" -> \"%s\"): %s",
+                cfrombstr(s), cfrombstr(d), strerror(errno));
+            EC_FAIL;
+                    
+        }
+    }
 
 EC_CLEANUP:
     bdestroy(s);
@@ -663,10 +627,7 @@ EC_CLEANUP:
     free(dup2);
     free(dup3);
     free(dup4);
-#endif
-out:
     EC_EXIT;
-#endif
 }
 
 /* ---------------- */