1
0
mirror of https://github.com/samba-team/samba.git synced 2025-03-09 08:58:35 +03:00

Undo 'Fix compiler warning'. It didn't work because the value of inbuf changes so

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)
This commit is contained in:
Tim Potter 2003-07-14 01:18:43 +00:00
parent 5345a5d721
commit 4b25a46624

View 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;
}