memcpy(d, s, i);
return i;
- }
+ }
if(slen < 0) {
lslen = 0;
cd = iconv_open_CCSID(dccsid, sccsid, 1);
- }
+ }
else {
lslen = (size_t) slen;
cd = iconv_open_CCSID(dccsid, sccsid, 0);
- }
+ }
if(ICONV_OPEN_ERROR(cd))
return -1;
}
-static char *dynconvert(int dccsid, const char *s, int slen, int sccsid)
+static char *dynconvert(int dccsid, const char *s, int slen, int sccsid,
+ int *olen)
{
char *d;
char *cp;
if(l < 0) {
free(d);
return (char *) NULL;
- }
+ }
if(slen < 0) {
/* Need to null-terminate even when source length is given.
if(l2 < 0) {
free(d);
return (char *) NULL;
- }
+ }
l += l2;
- }
+ }
if((size_t) l < dlen) {
cp = realloc(d, l); /* Shorten to minimum needed. */
if(cp)
d = cp;
- }
+ }
+ if(olen)
+ *olen = l;
return d;
}
for(; from; from = from->next) {
struct curl_slist *nl;
- char *cp = dynconvert(dccsid, from->data, -1, sccsid);
+ char *cp = dynconvert(dccsid, from->data, -1, sccsid, NULL);
if(!cp) {
curl_slist_free_all(to);
curl_to_ccsid(const char *s, unsigned int ccsid)
{
if(s)
- s = dynconvert(ccsid, s, -1, ASCII_CCSID);
+ s = dynconvert(ccsid, s, -1, ASCII_CCSID, NULL);
return s;
}
curl_from_ccsid(const char *s, unsigned int ccsid)
{
if(s)
- s = dynconvert(ASCII_CCSID, s, -1, ccsid);
+ s = dynconvert(ASCII_CCSID, s, -1, ccsid, NULL);
return s;
}
return (char *) NULL;
}
- s = dynconvert(ASCII_CCSID, string, length ? length : -1, sccsid);
+ s = dynconvert(ASCII_CCSID, string, length ? length : -1, sccsid, NULL);
if(!s)
return (char *) NULL;
if(!d)
return (char *) NULL;
- s = dynconvert(dccsid, d, -1, ASCII_CCSID);
+ s = dynconvert(dccsid, d, -1, ASCII_CCSID, NULL);
free(d);
return s;
}
return (char *) NULL;
}
- s = dynconvert(ASCII_CCSID, string, length ? length : -1, sccsid);
+ s = dynconvert(ASCII_CCSID, string, length ? length : -1, sccsid, NULL);
if(!s)
return (char *) NULL;
if(!d)
return (char *) NULL;
- s = dynconvert(dccsid, d, -1, ASCII_CCSID);
+ s = dynconvert(dccsid, d, -1, ASCII_CCSID, NULL);
free(d);
if(s && outlength)
if(!p)
return curl_getdate(p, unused);
- s = dynconvert(ASCII_CCSID, p, -1, ccsid);
+ s = dynconvert(ASCII_CCSID, p, -1, ccsid, NULL);
if(!s)
return (time_t) -1;
*stringp = *bufp;
*bufp += l;
*left -= l;
- }
+ }
return 0;
}
n += strlen(p->protocols[nproto++]);
n += nproto++;
- }
+ }
for(i = 0; i < sizeof(charfields) / sizeof(charfields[0]); i++) {
cpp = (const char **) ((char *) p + charfields[i]);
cpp = (char * *) paramp;
if(*cpp) {
- *cpp = dynconvert(ccsid, *cpp, -1, ASCII_CCSID);
+ *cpp = dynconvert(ccsid, *cpp, -1, ASCII_CCSID, NULL);
if(!*cpp)
ret = CURLE_OUT_OF_MEMORY;
ccsid = va_arg(arg, unsigned int);
if(s) {
- s = dynconvert(ASCII_CCSID, s, -1, ccsid);
+ s = dynconvert(ASCII_CCSID, s, -1, ccsid, NULL);
if(!s) {
result = CURLE_OUT_OF_MEMORY;
if(pfsize == -1) {
/* Data is null-terminated. */
- s = dynconvert(ASCII_CCSID, s, -1, ccsid);
+ s = dynconvert(ASCII_CCSID, s, -1, ccsid, NULL);
if(!s) {
result = CURLE_OUT_OF_MEMORY;
char *s = curl_pushheader_bynum(h, num);
if(s)
- d = dynconvert(ccsid, s, -1, ASCII_CCSID);
+ d = dynconvert(ccsid, s, -1, ASCII_CCSID, NULL);
return d;
}
char *d = (char *) NULL;
if(header) {
- header = dynconvert(ASCII_CCSID, header, -1, ccsidin);
+ header = dynconvert(ASCII_CCSID, header, -1, ccsidin, NULL);
if(header) {
char *s = curl_pushheader_byname(h, header);
free((char *) header);
if(s)
- d = dynconvert(ccsidout, s, -1, ASCII_CCSID);
+ d = dynconvert(ccsidout, s, -1, ASCII_CCSID, NULL);
}
}
if(!string)
return mimefunc(part, string);
- s = dynconvert(ASCII_CCSID, string, -1, ccsid);
+ s = dynconvert(ASCII_CCSID, string, -1, ccsid, NULL);
if(!s)
return CURLE_OUT_OF_MEMORY;
{
char *s = (char *) NULL;
CURLcode result;
+ int osize;
if(!data)
return curl_mime_data(part, data, datasize);
- s = dynconvert(ASCII_CCSID, data, datasize, ccsid);
+ s = dynconvert(ASCII_CCSID, data, datasize, ccsid, &osize);
if(!s)
return CURLE_OUT_OF_MEMORY;
- result = curl_mime_data(part, s, datasize);
+ result = curl_mime_data(part, s, osize);
free(s);
return result;
}
result = curl_url_get(handle, what, &s, flags);
if(result == CURLUE_OK) {
if(s) {
- *part = dynconvert(ccsid, s, -1, ASCII_CCSID);
+ *part = dynconvert(ccsid, s, -1, ASCII_CCSID, NULL);
if(!*part)
result = CURLUE_OUT_OF_MEMORY;
}
CURLUcode result;
if(part) {
- s = dynconvert(ASCII_CCSID, part, -1, ccsid);
+ s = dynconvert(ASCII_CCSID, part, -1, ccsid, NULL);
if(!s)
return CURLUE_OUT_OF_MEMORY;
}
const struct curl_easyoption *option = NULL;
if(name) {
- char *s = dynconvert(ASCII_CCSID, name, -1, ccsid);
+ char *s = dynconvert(ASCII_CCSID, name, -1, ccsid, NULL);
if(s) {
option = curl_easy_option_by_name(s);
char *name = NULL;
if(option && option->name)
- name = dynconvert(ccsid, option->name, -1, ASCII_CCSID);
+ name = dynconvert(ccsid, option->name, -1, ASCII_CCSID, NULL);
return (const char *) name;
}
CURLHcode result = CURLHE_BAD_ARGUMENT;
if(name) {
- char *s = dynconvert(ASCII_CCSID, name, -1, ccsid);
+ char *s = dynconvert(ASCII_CCSID, name, -1, ccsid, NULL);
result = CURLHE_OUT_OF_MEMORY;
if(s) {