vfs_fruit: factor out delete_invalid_meta_stream() from fruit_streaminfo_meta_stream()
authorRalph Boehme <slow@samba.org>
Thu, 7 Dec 2017 13:56:36 +0000 (14:56 +0100)
committerRalph Boehme <slow@samba.org>
Tue, 9 Jan 2018 11:53:32 +0000 (12:53 +0100)
No change in behaviour, just some refactoring before adding more code to
fruit_streaminfo_meta_stream() in the next commit.

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

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

index dfc0dccf062091330aca5e03d7d6271e64e0671e..d72ac7ef92cc3d19b7d8e113c30b2dbb847220c3 100644 (file)
@@ -4896,39 +4896,17 @@ static int fruit_fstat(vfs_handle_struct *handle, files_struct *fsp,
        return rc;
 }
 
-static NTSTATUS fruit_streaminfo_meta_stream(
+static NTSTATUS delete_invalid_meta_stream(
        vfs_handle_struct *handle,
-       struct files_struct *fsp,
        const struct smb_filename *smb_fname,
        TALLOC_CTX *mem_ctx,
        unsigned int *pnum_streams,
        struct stream_struct **pstreams)
 {
-       struct stream_struct *stream = *pstreams;
-       unsigned int num_streams = *pnum_streams;
        struct smb_filename *sname = NULL;
-       int i;
        int ret;
        bool ok;
 
-       for (i = 0; i < num_streams; i++) {
-               if (strequal_m(stream[i].name, AFPINFO_STREAM)) {
-                       break;
-               }
-       }
-
-       if (i == num_streams) {
-               return NT_STATUS_OK;
-       }
-
-       if (stream[i].size == AFP_INFO_SIZE) {
-               return NT_STATUS_OK;
-       }
-
-       DBG_ERR("Removing invalid AFPINFO_STREAM size [%"PRIdMAX"] "
-               "from [%s]\n", (intmax_t)stream[i].size,
-               smb_fname_str_dbg(smb_fname));
-
        ok = del_fruit_stream(mem_ctx, pnum_streams, pstreams, AFPINFO_STREAM);
        if (!ok) {
                return NT_STATUS_INTERNAL_ERROR;
@@ -4952,6 +4930,39 @@ static NTSTATUS fruit_streaminfo_meta_stream(
        return NT_STATUS_OK;
 }
 
+static NTSTATUS fruit_streaminfo_meta_stream(
+       vfs_handle_struct *handle,
+       struct files_struct *fsp,
+       const struct smb_filename *smb_fname,
+       TALLOC_CTX *mem_ctx,
+       unsigned int *pnum_streams,
+       struct stream_struct **pstreams)
+{
+       struct stream_struct *stream = *pstreams;
+       unsigned int num_streams = *pnum_streams;
+       int i;
+
+       for (i = 0; i < num_streams; i++) {
+               if (strequal_m(stream[i].name, AFPINFO_STREAM)) {
+                       break;
+               }
+       }
+
+       if (i == num_streams) {
+               return NT_STATUS_OK;
+       }
+
+       if (stream[i].size != AFP_INFO_SIZE) {
+               DBG_ERR("Removing invalid AFPINFO_STREAM size [%jd] from [%s]\n",
+                       (intmax_t)stream[i].size, smb_fname_str_dbg(smb_fname));
+
+               return delete_invalid_meta_stream(handle, smb_fname, mem_ctx,
+                                                 pnum_streams, pstreams);
+       }
+
+       return NT_STATUS_OK;
+}
+
 static NTSTATUS fruit_streaminfo_meta_netatalk(
        vfs_handle_struct *handle,
        struct files_struct *fsp,