Fix compiler warning.
authorRafal Szczesniak <mimir@samba.org>
Sun, 13 Jul 2003 16:25:55 +0000 (16:25 +0000)
committerRafal Szczesniak <mimir@samba.org>
Sun, 13 Jul 2003 16:25:55 +0000 (16:25 +0000)
(This used to be commit 3a71b4873034b3fe9dc7b23a95e56c865e857507)

source3/lib/iconv.c

index c09bff5fd7b87b6f0947147e98ae6305b9aba935..e3866c2b53849f524d2fbd592ee33daae3490bea 100644 (file)
@@ -135,17 +135,22 @@ 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 **inbuf, size_t *inbytesleft,
-                char **outbuf, size_t *outbytesleft)
+                 const char **inbuffer, 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) {
-               return cd->direct(cd->cd_direct, 
-                                 (char **)inbuf, inbytesleft, outbuf, outbytesleft);
+               result = cd->direct(cd->cd_direct, 
+                                           &inbuf, inbytesleft, outbuf, outbytesleft);
+               SAFE_FREE(inbuf);
+               return result;
        }
 
 
@@ -154,18 +159,23 @@ size_t smb_iconv(smb_iconv_t cd,
                bufp = cvtbuf;
                bufsize = sizeof(cvtbuf);
                
-               if (cd->pull(cd->cd_pull, 
-                            (char **)inbuf, inbytesleft, &bufp, &bufsize) == -1
-                   && errno != E2BIG) return -1;
+               if (cd->pull(cd->cd_pull,
+                            &inbuf, inbytesleft, &bufp, &bufsize) == -1 && errno != E2BIG) {
+                       SAFE_FREE(inbuf);
+                       return -1;
+               }
 
                bufp = cvtbuf;
                bufsize = sizeof(cvtbuf) - bufsize;
 
-               if (cd->push(cd->cd_push, 
-                            &bufp, &bufsize, 
-                            outbuf, outbytesleft) == -1) return -1;
+               if (cd->push(cd->cd_push,
+                            &bufp, &bufsize, outbuf, outbytesleft) == -1) {
+                       SAFE_FREE(inbuf);
+                       return -1;
+               }
        }
-
+       
+       SAFE_FREE(inbuf);
        return 0;
 }