]> arthur.barton.de Git - netatalk.git/blobdiff - libatalk/adouble/ad_open.c
Merge remote branch 'sf/product-2-2' into develop
[netatalk.git] / libatalk / adouble / ad_open.c
index bde46e57d7c2f42eb411f43ed38d9e3b03b4d211..98ec4c7f9182cd49e27fa0962be2d0a486aad521 100644 (file)
@@ -1146,7 +1146,12 @@ static int ad_reso_size(const char *path, int adflags, struct adouble *ad)
     EC_INIT;
     struct stat st;
 
-    LOG(log_debug, logtype_default, "ad_reso_size(\"%s\")", path);
+    if (adflags & ADFLAGS_DIR) {
+        ad->ad_rlen = 0;
+        goto EC_CLEANUP;
+    }
+
+    LOG(log_debug, logtype_default, "ad_reso_size(\"%s\"): BEGIN", path);
 
 #ifdef HAVE_EAFD
     ssize_t easz;
@@ -1155,10 +1160,9 @@ static int ad_reso_size(const char *path, int adflags, struct adouble *ad)
         EC_NEG1( fstat(ad_reso_fileno(ad), &st) );
         ad->ad_rlen = st.st_size;
     } else if (ad_meta_fileno(ad) != -1) {
-        EC_NEG1( easz = sys_fgetxattr(ad_meta_fileno(ad), AD_EA_RESO, NULL, 0) );
-        ad->ad_rlen = easz;
+        EC_NEG1( (ad->ad_rlen = sys_fgetxattr(ad_meta_fileno(ad), AD_EA_RESO, NULL, 0)) );
     } else {
-        EC_FAIL;
+        EC_NEG1( (ad->ad_rlen = sys_lgetxattr(path, AD_EA_RESO, NULL, 0)) );
     }
 
 #else
@@ -1638,7 +1642,7 @@ int ad_open(struct adouble *ad, const char *path, int adflags, ...)
 
     va_start(args, adflags);
     if (adflags & ADFLAGS_CREATE)
-        mode = va_arg(args, mode_t);
+        mode = (sizeof(mode_t) < sizeof(int) ? va_arg (args, int) : va_arg (args, mode_t));
     va_end(args);
 
     if (adflags & ADFLAGS_DF) {
@@ -1806,7 +1810,7 @@ int ad_openat(struct adouble  *ad,
 
     va_start(args, adflags);
     if (adflags & ADFLAGS_CREATE)
-        mode = va_arg(args, mode_t);
+        mode = (sizeof(mode_t) < sizeof(int) ? va_arg (args, int) : va_arg (args, mode_t));
     va_end(args);
 
     EC_NEG1( ad_open(ad, path, adflags, mode) );