lib: Add synthetic_smb_fname_split
authorVolker Lendecke <vl@samba.org>
Fri, 12 Apr 2013 09:06:45 +0000 (11:06 +0200)
committerJeremy Allison <jra@samba.org>
Wed, 17 Apr 2013 21:49:58 +0000 (14:49 -0700)
Signed-off-by: Volker Lendecke <vl@samba.org>
Reviewed-by: Jeremy Allison <jra@samba.org>
source3/include/proto.h
source3/lib/filename_util.c

index 5b9decdc1ca860684b3929200d13dfb6542a5629..f481e9977dead0545b7589a435e6b632bb9ff253 100644 (file)
@@ -1609,6 +1609,9 @@ struct smb_filename *synthetic_smb_fname(TALLOC_CTX *mem_ctx,
                                         const char *base_name,
                                         const char *stream_name,
                                         const SMB_STRUCT_STAT *psbuf);
+struct smb_filename *synthetic_smb_fname_split(TALLOC_CTX *ctx,
+                                              const char *fname,
+                                              const SMB_STRUCT_STAT *psbuf);
 const char *smb_fname_str_dbg(const struct smb_filename *smb_fname);
 const char *fsp_str_dbg(const struct files_struct *fsp);
 const char *fsp_fnum_dbg(const struct files_struct *fsp);
index a92c11e304ef3f350ec9274c1f0b4f04607b76eb..2fe611c6d4be81c429e615356e0be3a4c25f802b 100644 (file)
@@ -117,6 +117,35 @@ NTSTATUS create_synthetic_smb_fname_split(TALLOC_CTX *ctx,
        return status;
 }
 
+struct smb_filename *synthetic_smb_fname_split(TALLOC_CTX *ctx,
+                                              const char *fname,
+                                              const SMB_STRUCT_STAT *psbuf)
+{
+       const char *stream_name = NULL;
+       char *base_name = NULL;
+       struct smb_filename *ret;
+
+       if (!lp_posix_pathnames()) {
+               stream_name = strchr_m(fname, ':');
+       }
+
+       /* Setup the base_name/stream_name. */
+       if (stream_name) {
+               base_name = talloc_strndup(ctx, fname,
+                                          PTR_DIFF(stream_name, fname));
+       } else {
+               base_name = talloc_strdup(ctx, fname);
+       }
+
+       if (!base_name) {
+               return NULL;
+       }
+
+       ret = synthetic_smb_fname(ctx, base_name, stream_name, psbuf);
+       TALLOC_FREE(base_name);
+       return ret;
+}
+
 /**
  * Return a string using the talloc_tos()
  */