s3:lib. Add split_stream_filename() Not yet used.
authorJeremy Allison <jra@samba.org>
Wed, 9 Mar 2016 22:56:49 +0000 (14:56 -0800)
committerJeremy Allison <jra@samba.org>
Thu, 10 Mar 2016 19:55:09 +0000 (20:55 +0100)
Will replace internals of synthetic_smb_fname_split().

Signed-off-by: Jeremy Allison <jra@samba.org>
Reviewed-by: Uri Simchoni <uri@samba.org>
source3/include/proto.h
source3/lib/filename_util.c

index 8a273c31a3bfb9329a7e9f3423b1471b79c169d1..7066e4e53ee9ba397dd73d927e0fbe23c0dc3e7c 100644 (file)
@@ -1152,6 +1152,10 @@ bool is_ntfs_stream_smb_fname(const struct smb_filename *smb_fname);
 bool is_ntfs_default_stream_smb_fname(const struct smb_filename *smb_fname);
 bool is_invalid_windows_ea_name(const char *name);
 bool ea_list_has_invalid_name(struct ea_list *ea_list);
+bool split_stream_filename(TALLOC_CTX *ctx,
+                       const char *filename_in,
+                       char **filename_out,
+                       char **streamname_out);
 
 /* The following definitions come from lib/dummyroot.c */
 
index 9cd348a2939660c0a2247dd5f58a22916f0a17ea..1084c21be7d022260f8e478437961d749b31a144 100644 (file)
@@ -280,3 +280,45 @@ bool ea_list_has_invalid_name(struct ea_list *ea_list)
        }
        return false;
 }
+
+/****************************************************************************
+ Split an incoming name into tallocd filename and stream components.
+ Returns true on success, false on out of memory.
+****************************************************************************/
+
+bool split_stream_filename(TALLOC_CTX *ctx,
+                               const char *filename_in,
+                               char **filename_out,
+                               char **streamname_out)
+{
+       const char *stream_name = NULL;
+       char *stream_out = NULL;
+       char *file_out = NULL;
+
+       stream_name = strchr_m(filename_in, ':');
+
+       if (stream_name) {
+               stream_out = talloc_strdup(ctx, stream_name);
+               if (stream_out == NULL) {
+                       return false;
+               }
+               file_out = talloc_strndup(ctx,
+                                       filename_in,
+                                       PTR_DIFF(stream_name, filename_in));
+       } else {
+               file_out = talloc_strdup(ctx, filename_in);
+       }
+
+       if (file_out == NULL) {
+               TALLOC_FREE(stream_out);
+               return false;
+       }
+
+       if (filename_out) {
+               *filename_out = file_out;
+       }
+       if (streamname_out) {
+               *streamname_out = stream_out;
+       }
+       return true;
+}