]> arthur.barton.de Git - netatalk.git/commitdiff
Fix
authorFrank Lahm <franklahm@googlemail.com>
Fri, 20 Jan 2012 09:21:21 +0000 (10:21 +0100)
committerFrank Lahm <franklahm@googlemail.com>
Fri, 20 Jan 2012 09:21:21 +0000 (10:21 +0100)
libatalk/adouble/ad_open.c
libatalk/adouble/ad_read.c
libatalk/adouble/ad_write.c
libatalk/vfs/vfs.c

index 2fd01d97891514882a67266a35e7794460cb9094..d3a4c6b3ace9e8a246a1b43e0e7591af28bbb0a4 100644 (file)
@@ -529,7 +529,8 @@ static int ad_header_read_ea(const char *path, struct adouble *ad, struct stat *
     char     *buf = ad->ad_data;
 
     /* read the header */
-    if (ad_meta_fileno(ad) == -1 && ad->ad_adflags && ADFLAGS_RDWR) {
+    if ((ad_meta_fileno(ad) == -1)
+        && (ad->ad_adflags & ADFLAGS_RDWR)) {
         LOG(log_error, logtype_default, "ad_header_read_ea: need filedescriptor for rw access");
         return -1;
     }
@@ -922,7 +923,8 @@ static int ad_open_hf_ea(const char *path, int adflags, int mode, struct adouble
     ssize_t rforklen;
     int oflags;
 
-    LOG(log_debug, logtype_default, "ad_open_hf_ea(\"%s\", %04o)", path, mode);
+    LOG(log_debug, logtype_default, "ad_open_hf_ea(\"%s\", %s, %04o)",
+        path, adflags2logstr(adflags), mode);
 
     oflags = O_NOFOLLOW | (ad2openflags(adflags) & ~(O_CREAT | O_TRUNC));
 
index 5766ad9d8fec0b5dea430c008b5792fa68e28af6..0da974fbff1dbbff4fd5fabc12f3c7225ecae337 100644 (file)
@@ -83,16 +83,14 @@ ssize_t ad_read( struct adouble *ad, const uint32_t eid, off_t off, char *buf, c
             /* resource fork is not open ( cf etc/afp/fork.c) */
             return 0;
 
-        switch (ad->ad_vers) {
-        case AD_VERSION2:
-#ifndef HAVE_EAFD
-        case AD_VERSION_EA:
+        if (ad->ad_vers == AD_VERSION_EA) {
+#ifdef HAVE_EAFD
+            r_off = 0;
+#else
+            r_off = ADEDOFF_RFORK_OSX;
 #endif
+        } else {
             r_off = ad_getentryoff(ad, eid) + off;
-            break;
-        default:
-            r_off = 0;
-            break;
         }
 
         if (( cc = adf_pread( &ad->ad_resource_fork, buf, buflen, r_off )) < 0 )
index f5a5c9355b5d57603351f1e3ff64c074c3a8264a..bc80db5398cd882de1a8ddb093d69ceffd14689e 100644 (file)
@@ -78,13 +78,15 @@ ssize_t ad_write(struct adouble *ad, uint32_t eid, off_t off, int end, const cha
                 return(-1);
             off = st.st_size - off - ad_getentryoff(ad, eid);
         }
-#ifdef HAVE_EAFD
         if (ad->ad_vers == AD_VERSION_EA) {
+#ifdef HAVE_EAFD
             r_off = 0;
-        } else
+#else
+            r_off = ADEDOFF_RFORK_OSX;
 #endif
+        } else {
             r_off = ad_getentryoff(ad, eid) + off;
-
+        }
         cc = adf_pwrite(&ad->ad_resource_fork, buf, buflen, r_off);
 
         if ( ad->ad_rlen < off + cc )
index 24aa7f63f161155433c4d044811adcf4b4a17880..75f461efab106660cd6555e3cb08b77ebda00011 100644 (file)
@@ -499,7 +499,17 @@ EC_CLEANUP:
  ************************************************************************/
 static int validupath_ea(VFS_FUNC_ARGS_VALIDUPATH)
 {
-    return 1;
+    if (name[0] != '.')
+        return 1;
+    
+    if (!(vol->v_flags & AFPVOL_USEDOTS))
+        return 0;
+
+#ifndef HAVE_EAFD
+    if (name[1] == '_')
+        return 0;
+#endif
+    return netatalk_name(name) && strcasecmp(name,".Parent");
 }             
 
 /* ----------------- */