summaryrefslogtreecommitdiff
path: root/source3/lib/filename_util.c
diff options
context:
space:
mode:
authorJeremy Allison <jra@samba.org>2016-03-09 14:56:49 -0800
committerJeremy Allison <jra@samba.org>2016-03-10 20:55:09 +0100
commit59f6a73c93c100406851d40e1d676f5b44fd355e (patch)
tree5704217bd0b32af6c1c41b2bfb9cac384e0365d1 /source3/lib/filename_util.c
parentb96511f81b404466aefe5adb623334be254cafa4 (diff)
downloadsamba-59f6a73c93c100406851d40e1d676f5b44fd355e.tar.gz
s3:lib. Add split_stream_filename() Not yet used.
Will replace internals of synthetic_smb_fname_split(). Signed-off-by: Jeremy Allison <jra@samba.org> Reviewed-by: Uri Simchoni <uri@samba.org>
Diffstat (limited to 'source3/lib/filename_util.c')
-rw-r--r--source3/lib/filename_util.c42
1 files changed, 42 insertions, 0 deletions
diff --git a/source3/lib/filename_util.c b/source3/lib/filename_util.c
index 9cd348a2939..1084c21be7d 100644
--- a/source3/lib/filename_util.c
+++ b/source3/lib/filename_util.c
@@ -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;
+}