diff options
Diffstat (limited to 'source3/lib/filename_util.c')
-rw-r--r-- | source3/lib/filename_util.c | 38 |
1 files changed, 33 insertions, 5 deletions
diff --git a/source3/lib/filename_util.c b/source3/lib/filename_util.c index e22a97a8ee..9a6ab2b34a 100644 --- a/source3/lib/filename_util.c +++ b/source3/lib/filename_util.c @@ -60,8 +60,8 @@ NTSTATUS create_synthetic_smb_fname(TALLOC_CTX *ctx, const char *base_name, ZERO_STRUCT(smb_fname_loc); /* Setup the base_name/stream_name. */ - smb_fname_loc.base_name = CONST_DISCARD(char *, base_name); - smb_fname_loc.stream_name = CONST_DISCARD(char *, stream_name); + smb_fname_loc.base_name = discard_const_p(char, base_name); + smb_fname_loc.stream_name = discard_const_p(char, stream_name); /* Copy the psbuf if one was given. */ if (psbuf) @@ -125,14 +125,42 @@ const char *smb_fname_str_dbg(const struct smb_filename *smb_fname) } /** - * Return a debug string using the talloc_tos(). This can only be called from - * DEBUG() macros due to the debut_ctx(). + * Return a debug string of the path name of an fsp using the talloc_tos(). */ const char *fsp_str_dbg(const struct files_struct *fsp) { return smb_fname_str_dbg(fsp->fsp_name); } +/** + * Create a debug string for the fnum of an fsp. + * + * This is allocated to talloc_tos() or a string constant + * in certain corner cases. The returned string should + * hence not be free'd directly but only via the talloc stack. + */ +const char *fsp_fnum_dbg(const struct files_struct *fsp) +{ + char *str; + + if (fsp == NULL) { + return "fnum [fsp is NULL]"; + } + + if (fsp->fnum == FNUM_FIELD_INVALID) { + return "fnum [invalid value]"; + } + + str = talloc_asprintf(talloc_tos(), "fnum %llu", + (unsigned long long)fsp->fnum); + if (str == NULL) { + DEBUG(1, ("%s: talloc_asprintf failed\n", __FUNCTION__)); + return "fnum [talloc failed!]"; + } + + return str; +} + NTSTATUS copy_smb_filename(TALLOC_CTX *ctx, const struct smb_filename *smb_fname_in, struct smb_filename **smb_fname_out) @@ -202,5 +230,5 @@ bool is_ntfs_default_stream_smb_fname(const struct smb_filename *smb_fname) return false; } - return StrCaseCmp(smb_fname->stream_name, "::$DATA") == 0; + return strcasecmp_m(smb_fname->stream_name, "::$DATA") == 0; } |