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:
parent
5345a5d721
commit
4b25a46624
@ -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;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user