vfs_fruit: split out moving of the resource fork
authorRalph Boehme <slow@samba.org>
Fri, 5 Oct 2018 14:44:53 +0000 (16:44 +0200)
committerRalph Boehme <slow@samba.org>
Wed, 10 Oct 2018 20:22:14 +0000 (22:22 +0200)
No change in behaviour.

Bug: https://bugzilla.samba.org/show_bug.cgi?id=13649

Signed-off-by: Ralph Boehme <slow@samba.org>
Reviewed-by: Jeremy Allison <jra@samba.org>
source3/modules/vfs_fruit.c

index 02db5923c6a35d25b87e8e98134236ea6cfae6aa..0aeed3a66bbba4752cf0499339e61b2966193bf3 100644 (file)
@@ -1170,6 +1170,24 @@ static bool ad_convert_truncate(struct adouble *ad,
        return true;
 }
 
+static bool ad_convert_move_reso(struct adouble *ad,
+                                const struct smb_filename *smb_fname,
+                                char *map)
+{
+       if (ad_getentrylen(ad, ADEID_RFORK) == 0) {
+               return true;
+       }
+
+       memmove(map + ad_getentryoff(ad, ADEID_FINDERI) + ADEDLEN_FINDERI,
+               map + ad_getentryoff(ad, ADEID_RFORK),
+               ad_getentrylen(ad, ADEID_RFORK));
+
+       ad_setentryoff(ad, ADEID_RFORK,
+                      ad_getentryoff(ad, ADEID_FINDERI) + ADEDLEN_FINDERI);
+
+       return true;
+}
+
 /**
  * Convert from Apple's ._ file to Netatalk
  *
@@ -1209,15 +1227,12 @@ static int ad_convert(struct adouble *ad,
                return -1;
        }
 
-       if (ad_getentrylen(ad, ADEID_RFORK) > 0) {
-               memmove(map + ad_getentryoff(ad, ADEID_FINDERI) + ADEDLEN_FINDERI,
-                       map + ad_getentryoff(ad, ADEID_RFORK),
-                       ad_getentrylen(ad, ADEID_RFORK));
+       ok = ad_convert_move_reso(ad, smb_fname, map);
+       if (!ok) {
+               munmap(map, origlen);
+               return -1;
        }
 
-       ad_setentryoff(ad, ADEID_RFORK,
-                      ad_getentryoff(ad, ADEID_FINDERI) + ADEDLEN_FINDERI);
-
        ok = ad_convert_truncate(ad, smb_fname);
        if (!ok) {
                munmap(map, origlen);