From 15da22106694bff9f2fc58da86f0554abb810837 Mon Sep 17 00:00:00 2001 From: Ralph Boehme Date: Fri, 10 May 2013 11:01:04 +0200 Subject: [PATCH] Change default FinderInfo for directories to be all 0 Fixes bug #514: Unable to delete EA com.apple.FinderInfo on folders. --- NEWS | 2 ++ etc/afpd/directory.c | 4 ---- etc/afpd/extattrs.c | 7 ------- include/atalk/adouble.h | 2 +- libatalk/adouble/ad_open.c | 24 ++++++++---------------- 5 files changed, 11 insertions(+), 28 deletions(-) diff --git a/NEWS b/NEWS index c74787bf..566cfb5f 100644 --- 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 ================ diff --git a/etc/afpd/directory.c b/etc/afpd/directory.c index 122dfdf5..b7dc0701 100644 --- a/etc/afpd/directory.c +++ b/etc/afpd/directory.c @@ -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); diff --git a/etc/afpd/extattrs.c b/etc/afpd/extattrs.c index 4cbeb642..f6b1cf66 100644 --- a/etc/afpd/extattrs.c +++ b/etc/afpd/extattrs.c @@ -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" */ diff --git a/include/atalk/adouble.h b/include/atalk/adouble.h index 73688b41..c0f4098d 100644 --- a/include/atalk/adouble.h +++ b/include/atalk/adouble.h @@ -1,4 +1,4 @@ -/* + /* * Copyright (c) 1990,1991 Regents of The University of Michigan. * All Rights Reserved. * diff --git a/libatalk/adouble/ad_open.c b/libatalk/adouble/ad_open.c index 12250055..6915cbb1 100644 --- a/libatalk/adouble/ad_open.c +++ b/libatalk/adouble/ad_open.c @@ -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); -- 2.39.2