]> arthur.barton.de Git - netatalk.git/blobdiff - libatalk/adouble/ad_read.c
Merge master
[netatalk.git] / libatalk / adouble / ad_read.c
index e6d2669d403ba3a0a16b4a53aeeb90746f039a4f..224c72d9fb381fe12470a27117a2aab52117545a 100644 (file)
@@ -102,12 +102,15 @@ ssize_t ad_read( struct adouble *ad, const uint32_t eid, off_t off, char *buf, c
                 }
             }
         } else { /* AD_VERSION_EA */
-            if ((off + buflen) > ad->ad_rlen) {
+            if (off > ad->ad_rlen) {
                 errno = ERANGE;
                 return -1;
             }
-            memcpy(buf, ad->ad_resforkbuf + off, buflen);
-            cc = buflen;
+            if (ad->ad_rlen == 0)
+                return 0;
+            if ((off + buflen) > ad->ad_rlen)
+                cc = ad->ad_rlen;
+            memcpy(buf, ad->ad_resforkbuf + off, cc);
         }
     }