Undo 'Fix compiler warning'. It didn't work because the value of inbuf changes so
authorTim Potter <tpot@samba.org>
Mon, 14 Jul 2003 01:18:43 +0000 (01:18 +0000)
committerTim Potter <tpot@samba.org>
Mon, 14 Jul 2003 01:18:43 +0000 (01:18 +0000)
we end up freeing a pointer we didn't mallocate.

Also, calling strdup() in a frequently called function just to clear up a
const compiler warning seems inelegant and inefficient.
(This used to be commit a0da5ae1198082d0cf18707ed2cf05f728b00d0b)

source3/lib/iconv.c

index e3866c2b53849f524d2fbd592ee33daae3490bea..c09bff5fd7b87b6f0947147e98ae6305b9aba935 100644 (file)
@@ -135,22 +135,17 @@ static size_t sys_iconv(void *cd,
  * enough that Samba works on systems that don't have iconv.
  **/
 size_t smb_iconv(smb_iconv_t cd, 
-                 const char **inbuffer, size_t *inbytesleft,
-                 char **outbuf, size_t *outbytesleft)
+                const char **inbuf, size_t *inbytesleft,
+                char **outbuf, size_t *outbytesleft)
 {
        char cvtbuf[2048];
        char *bufp = cvtbuf;
        size_t bufsize;
-       /* make a copy to ensure inbuffer is const-ed */
-       char* inbuf = smb_xstrdup(*inbuffer);
-       size_t result;
 
        /* in many cases we can go direct */
        if (cd->direct) {
-               result = cd->direct(cd->cd_direct, 
-                                           &inbuf, inbytesleft, outbuf, outbytesleft);
-               SAFE_FREE(inbuf);
-               return result;
+               return cd->direct(cd->cd_direct, 
+                                 (char **)inbuf, inbytesleft, outbuf, outbytesleft);
        }
 
 
@@ -159,23 +154,18 @@ size_t smb_iconv(smb_iconv_t cd,
                bufp = cvtbuf;
                bufsize = sizeof(cvtbuf);
                
-               if (cd->pull(cd->cd_pull,
-                            &inbuf, inbytesleft, &bufp, &bufsize) == -1 && errno != E2BIG) {
-                       SAFE_FREE(inbuf);
-                       return -1;
-               }
+               if (cd->pull(cd->cd_pull, 
+                            (char **)inbuf, inbytesleft, &bufp, &bufsize) == -1
+                   && errno != E2BIG) return -1;
 
                bufp = cvtbuf;
                bufsize = sizeof(cvtbuf) - bufsize;
 
-               if (cd->push(cd->cd_push,
-                            &bufp, &bufsize, outbuf, outbytesleft) == -1) {
-                       SAFE_FREE(inbuf);
-                       return -1;
-               }
+               if (cd->push(cd->cd_push, 
+                            &bufp, &bufsize, 
+                            outbuf, outbytesleft) == -1) return -1;
        }
-       
-       SAFE_FREE(inbuf);
+
        return 0;
 }