TODO lib/util/charset: use a stack buffer in smb_iconv() again
authorStefan Metzmacher <metze@samba.org>
Fri, 21 Oct 2011 11:36:24 +0000 (13:36 +0200)
committerStefan Metzmacher <metze@samba.org>
Thu, 10 May 2012 16:47:06 +0000 (18:47 +0200)
metze

lib/util/charset/iconv.c

index 1c507b4b13707d1fd3142d09ef79d58593c1ed69..15b0e2313b4cf542ddd26ba6055bf977a4286046 100644 (file)
@@ -117,7 +117,7 @@ _PUBLIC_ size_t smb_iconv(smb_iconv_t cd,
                 char **outbuf, size_t *outbytesleft)
 {
        /* in many cases we can go direct */
-       if (cd->direct) {
+       if (likely(cd->direct)) {
                return cd->direct(cd->cd_direct, 
                                  inbuf, inbytesleft, outbuf, outbytesleft);
        }
@@ -127,20 +127,8 @@ _PUBLIC_ size_t smb_iconv(smb_iconv_t cd,
 #ifndef SMB_ICONV_BUFSIZE
 #define SMB_ICONV_BUFSIZE 2048
 #endif
-               TALLOC_CTX *mem_ctx;
+               char cvtbuf[SMB_ICONV_BUFSIZE];
                size_t bufsize;
-               char *cvtbuf;
-
-#if _SAMBA_BUILD_ == 3
-               mem_ctx = talloc_tos();
-#else
-               mem_ctx = cd;
-#endif
-               cvtbuf = talloc_array(mem_ctx, char, SMB_ICONV_BUFSIZE);
-
-               if (!cvtbuf) {
-                       return (size_t)-1;
-               }
 
                while (*inbytesleft > 0) {
                        char *bufp1 = cvtbuf;
@@ -161,7 +149,6 @@ _PUBLIC_ size_t smb_iconv(smb_iconv_t cd,
                        if (cd->push(cd->cd_push,
                                     &bufp2, &bufsize,
                                     outbuf, outbytesleft) == -1) {
-                               talloc_free(cvtbuf);
                                return -1;
                        } else if (pull_failed) {
                                /* We want the pull errno if possible */
@@ -169,7 +156,6 @@ _PUBLIC_ size_t smb_iconv(smb_iconv_t cd,
                                return -1;
                        }
                }
-               talloc_free(cvtbuf);
        }
 
        return 0;