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)
committerKarolin Seeger <kseeger@samba.org>
Thu, 18 Oct 2018 10:59:19 +0000 (12:59 +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>
(cherry picked from commit 4c7e1de46f4287818ef525c8939029ccb09adf65)

source3/modules/vfs_fruit.c

index 9a089e8737e90ee9ef204282fdd693bdd548e5d7..c2d2d35f0831308a166dad1d1ae8ca6b9f4e7a46 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);