s3:dbwrap_ctdb: change db_ctdb_transaction_store() to return NTSTATUS.
[amitay/samba.git] / source3 / lib / charcnv.c
index eb794d8347f21a967ec936527a5545c95289c8e4..9ac9930267ef6614738f0f5d75a933d3d8d958b9 100644 (file)
@@ -54,14 +54,30 @@ static bool initialized;
  **/
 static const char *charset_name(charset_t ch)
 {
-       const char *ret = NULL;
-
-       if (ch == CH_UTF16LE) ret = "UTF-16LE";
-       else if (ch == CH_UTF16BE) ret = "UTF-16BE";
-       else if (ch == CH_UNIX) ret = lp_unix_charset();
-       else if (ch == CH_DOS) ret = lp_dos_charset();
-       else if (ch == CH_DISPLAY) ret = lp_display_charset();
-       else if (ch == CH_UTF8) ret = "UTF8";
+       const char *ret;
+
+       switch (ch) {
+       case CH_UTF16LE:
+               ret = "UTF-16LE";
+               break;
+       case CH_UTF16BE:
+               ret = "UTF-16BE";
+               break;
+       case CH_UNIX:
+               ret = lp_unix_charset();
+               break;
+       case CH_DOS:
+               ret = lp_dos_charset();
+               break;
+       case CH_DISPLAY:
+               ret = lp_display_charset();
+               break;
+       case CH_UTF8:
+               ret = "UTF8";
+               break;
+       default:
+               ret = NULL;
+       }
 
 #if defined(HAVE_NL_LANGINFO) && defined(CODESET)
        if (ret && !strcmp(ret, "LOCALE")) {
@@ -558,7 +574,7 @@ bool convert_string_talloc(TALLOC_CTX *ctx, charset_t from, charset_t to,
                return false;
        }
        if (srclen == 0) {
-               ob = ((ctx != NULL) ? talloc_strdup(ctx, "") : SMB_STRDUP(""));
+               ob = talloc_strdup(ctx, "");
                if (ob == NULL) {
                        errno = ENOMEM;
                        return false;
@@ -586,8 +602,7 @@ bool convert_string_talloc(TALLOC_CTX *ctx, charset_t from, charset_t to,
                /* wrapped ! abort. */
                if (!conv_silent)
                        DEBUG(0, ("convert_string_talloc: destlen wrapped !\n"));
-               if (!ctx)
-                       SAFE_FREE(outbuf);
+               TALLOC_FREE(outbuf);
                errno = EOPNOTSUPP;
                return false;
        } else {
@@ -754,12 +769,12 @@ size_t unix_strupper(const char *src, size_t srclen, char *dest, size_t destlen)
        size_t size;
        smb_ucs2_t *buffer;
 
-       if (!push_ucs2_talloc(NULL, &buffer, src, &size)) {
+       if (!push_ucs2_talloc(talloc_tos(), &buffer, src, &size)) {
                return (size_t)-1;
        }
 
        if (!strupper_w(buffer) && (dest == src)) {
-               free(buffer);
+               TALLOC_FREE(buffer);
                return srclen;
        }
 
@@ -838,7 +853,7 @@ size_t unix_strlower(const char *src, size_t srclen, char *dest, size_t destlen)
        size_t size;
        smb_ucs2_t *buffer = NULL;
 
-       if (!convert_string_talloc(NULL, CH_UNIX, CH_UTF16LE, src, srclen,
+       if (!convert_string_talloc(talloc_tos(), CH_UNIX, CH_UTF16LE, src, srclen,
                                   (void **)(void *)&buffer, &size,
                                   True))
        {
@@ -952,7 +967,7 @@ size_t push_ascii_nstring(void *dest, const char *src)
        smb_ucs2_t *buffer;
 
        conv_silent = True;
-       if (!push_ucs2_talloc(NULL, &buffer, src, &buffer_len)) {
+       if (!push_ucs2_talloc(talloc_tos(), &buffer, src, &buffer_len)) {
                smb_panic("failed to create UCS2 buffer");
        }
 
@@ -1047,9 +1062,7 @@ size_t pull_ascii(char *dest, const void *src, size_t dest_len, size_t src_len,
 
 /**
  * Copy a string from a dos codepage source to a unix char* destination.
- Talloc version.
- Uses malloc if TALLOC_CTX is NULL (this is a bad interface and
- needs fixing. JRA).
+ * Talloc version.
  *
  * The resulting string in "dest" is always null terminated.
  *
@@ -1271,7 +1284,7 @@ static size_t push_utf8(void *dest, const char *src, size_t dest_len, int flags)
        }
 
        if (flags & STR_UPPER) {
-               tmpbuf = strupper_talloc(NULL, src);
+               tmpbuf = strupper_talloc(talloc_tos(), src);
                if (!tmpbuf) {
                        return (size_t)-1;
                }
@@ -1672,8 +1685,9 @@ ssize_t push_string(void *dest, const char *src, size_t dest_len, int flags)
        if (!(flags & STR_ASCII) && \
            (flags & STR_UNICODE)) {
                ret = push_ucs2(NULL, dest, src, dest_len, flags);
+       } else {
+               ret = push_ascii(dest, src, dest_len, flags);
        }
-       ret = push_ascii(dest, src, dest_len, flags);
        if (ret == (size_t)-1) {
                return -1;
        }