]> arthur.barton.de Git - netatalk.git/commitdiff
Change default FinderInfo for directories to be all 0
authorRalph Boehme <sloowfranklin@gmail.com>
Fri, 10 May 2013 09:01:04 +0000 (11:01 +0200)
committerRalph Boehme <sloowfranklin@gmail.com>
Fri, 10 May 2013 09:01:04 +0000 (11:01 +0200)
Fixes bug #514:
Unable to delete EA com.apple.FinderInfo on folders.

NEWS
etc/afpd/directory.c
etc/afpd/extattrs.c
include/atalk/adouble.h
libatalk/adouble/ad_open.c

diff --git a/NEWS b/NEWS
index c74787bfa8773791b1681f1f351953af245b1cdc..566cfb5f00bc10075e90de6d482bf7c3a3d72dae 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -19,6 +19,8 @@ Changes in 3.0.4
        detected a dev/inode cache difference and evicted the object
        from the cache. Fixes bug #498.
 * FIX: Add missing include, fixes bug #512.
+* FIX: Change default FinderInfo for directories to be all 0, fixes
+       bug 514.
 
 Changes in 3.0.3
 ================
index 122dfdf59a3fd096001d68182b908e08b7925bbc..b7dc0701f18eafbf006aba524be3bd9988e64e8c 100644 (file)
@@ -1514,10 +1514,6 @@ int getdirparams(const AFPObj *obj,
                 memcpy( data, ad_entry( &ad, ADEID_FINDERI ), 32 );
             } else { /* no appledouble */
                 memset( data, 0, 32 );
-                /* set default view -- this also gets done in ad_open() */
-                ashort = htons(FINDERINFO_CLOSEDVIEW);
-                memcpy(data + FINDERINFO_FRVIEWOFF, &ashort, sizeof(ashort));
-
                 /* dot files are by default visible */
                 if (invisible_dots(vol, cfrombstr(dir->d_u_name))) {
                     ashort = htons(FINDERINFO_INVISIBLE);
index 4cbeb6423ddd316cb28dc32cec5488ce98ed0f81..f6b1cf66178a585c5475aa9f781c8e21ea939612 100644 (file)
@@ -166,13 +166,6 @@ int afp_listextattr(AFPObj *obj _U_, char *ibuf, size_t ibuflen _U_, char *rbuf,
             }
         } else {
             FinderInfo = ad_entry(adp, ADEID_FINDERI);
-
-            if ((adflags & ADFLAGS_DIR)) {
-                /* set default view */
-                uint16 = htons(FINDERINFO_CLOSEDVIEW);
-                memcpy(emptyFinderInfo + FINDERINFO_FRVIEWOFF, &uint16, 2);
-            }
-
             /* Check if FinderInfo equals default and empty FinderInfo*/
             if (memcmp(FinderInfo, emptyFinderInfo, 32) != 0) {
                 /* FinderInfo contains some non 0 bytes -> include "com.apple.FinderInfo" */
index 73688b41a6d1f837bd7909a2dbaed167ed9766a2..c0f4098da7b3590da71d01a3c92f44b6a9f573c4 100644 (file)
@@ -1,4 +1,4 @@
-/*
+ /*
  * Copyright (c) 1990,1991 Regents of The University of Michigan.
  * All Rights Reserved.
  *
index 12250055dbe326e6cc30be3777734a56ab58b316..6915cbb189aa3618680d3a1abcb3f5d39132c745 100644 (file)
@@ -346,22 +346,9 @@ static int new_ad_header(struct adouble *ad, const char *path, struct stat *stp,
         eid++;
     }
 
-    /* put something sane in the directory finderinfo */
-    if (stp == NULL) {
-        stp = &st;
-        if (lstat(path, &st) != 0)
-            return -1;
-    }
-
-    if ((adflags & ADFLAGS_DIR)) {
-        /* set default view */
-        ashort = htons(FINDERINFO_CLOSEDVIEW);
-        memcpy(ad_entry(ad, ADEID_FINDERI) + FINDERINFO_FRVIEWOFF, &ashort, sizeof(ashort));
-    } else {
-        /* set default creator/type fields */
-        memcpy(ad_entry(ad, ADEID_FINDERI) + FINDERINFO_FRTYPEOFF,"\0\0\0\0", 4);
-        memcpy(ad_entry(ad, ADEID_FINDERI) + FINDERINFO_FRCREATOFF,"\0\0\0\0", 4);
-    }
+    /* set default creator/type fields */
+    memcpy(ad_entry(ad, ADEID_FINDERI) + FINDERINFO_FRTYPEOFF,"\0\0\0\0", 4);
+    memcpy(ad_entry(ad, ADEID_FINDERI) + FINDERINFO_FRCREATOFF,"\0\0\0\0", 4);
 
     /* make things invisible */
     if ((ad->ad_options & ADVOL_INVDOTS)
@@ -375,6 +362,11 @@ static int new_ad_header(struct adouble *ad, const char *path, struct stat *stp,
     }
 
     /* put something sane in the date fields */
+    if (stp == NULL) {
+        stp = &st;
+        if (lstat(path, &st) != 0)
+            return -1;
+    }
     ad_setdate(ad, AD_DATE_CREATE | AD_DATE_UNIX, stp->st_mtime);
     ad_setdate(ad, AD_DATE_MODIFY | AD_DATE_UNIX, stp->st_mtime);
     ad_setdate(ad, AD_DATE_ACCESS | AD_DATE_UNIX, stp->st_mtime);