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;
}
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));
/* 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 )
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 )
************************************************************************/
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");
}
/* ----------------- */