From: Ralph Boehme Date: Fri, 5 Oct 2018 14:44:53 +0000 (+0200) Subject: vfs_fruit: split out moving of the resource fork X-Git-Tag: samba-4.8.8~123 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=57962d58b8a1efd869add7283fed9d0041f39606;p=thirdparty%2Fsamba.git vfs_fruit: split out moving of the resource fork No change in behaviour. Bug: https://bugzilla.samba.org/show_bug.cgi?id=13649 Signed-off-by: Ralph Boehme Reviewed-by: Jeremy Allison (cherry picked from commit 4c7e1de46f4287818ef525c8939029ccb09adf65) --- diff --git a/source3/modules/vfs_fruit.c b/source3/modules/vfs_fruit.c index d606be3742d..2ea5d53b1fd 100644 --- a/source3/modules/vfs_fruit.c +++ b/source3/modules/vfs_fruit.c @@ -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);