diff options
-rw-r--r-- | source3/lib/charcnv.c | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/source3/lib/charcnv.c b/source3/lib/charcnv.c index d11620ecd7..69d1db0e48 100644 --- a/source3/lib/charcnv.c +++ b/source3/lib/charcnv.c @@ -945,6 +945,32 @@ char *strdup_lower(const char *s) return out_buffer; } +char *talloc_strdup_lower(TALLOC_CTX *ctx, const char *s) +{ + size_t size; + smb_ucs2_t *buffer = NULL; + char *out_buffer; + + size = push_ucs2_talloc(ctx, &buffer, s); + if (size == -1 || !buffer) { + TALLOC_FREE(buffer); + return NULL; + } + + strlower_w(buffer); + + size = pull_ucs2_talloc(ctx, &out_buffer, buffer); + TALLOC_FREE(buffer); + + if (size == (size_t)-1) { + TALLOC_FREE(out_buffer); + return NULL; + } + + return out_buffer; +} + + size_t ucs2_align(const void *base_ptr, const void *p, int flags) { if (flags & (STR_NOALIGN|STR_ASCII)) |