NVEND
};
-/* Format and add code; jump to nomem on malloc error */
-#define ADD(args) do { \
- ret = easysrc_add args; \
- if(ret) \
- goto nomem; \
-} while(0)
-#define ADDF(args) do { \
- ret = easysrc_addf args; \
- if(ret) \
- goto nomem; \
-} while(0)
-#define NULL_CHECK(p) do { \
- if(!p) { \
- ret = CURLE_OUT_OF_MEMORY; \
- goto nomem; \
- } \
-} while(0)
-
-/* #define DECL0(s) ADD((&easysrc_decl, s)) */
-#define DECL1(f,a) ADDF((&easysrc_decl, f,a))
-
-/* #define DATA0(s) ADD((&easysrc_data, s)) */
-#define DATA1(f,a) ADDF((&easysrc_data, f,a))
-/* #define DATA2(f,a,b) ADDF((&easysrc_data, f,a,b)) */
-#define DATA3(f,a,b,c) ADDF((&easysrc_data, f,a,b,c))
-
-#define CODE0(s) ADD((&easysrc_code, s))
-#define CODE1(f,a) ADDF((&easysrc_code, f,a))
-#define CODE2(f,a,b) ADDF((&easysrc_code, f,a,b))
-#define CODE3(f,a,b,c) ADDF((&easysrc_code, f,a,b,c))
-
-/* #define CLEAN0(s) ADD((&easysrc_clean, s)) */
-#define CLEAN1(f,a) ADDF((&easysrc_clean, f,a))
-
-/* #define REM0(s) ADD((&easysrc_toohard, s)) */
-/* #define REM1(f,a) ADDF((&easysrc_toohard, f,a)) */
-#define REM3(f,a,b,c) ADDF((&easysrc_toohard, f,a,b,c))
-
-/* Escape string to C string syntax. Return NULL if out of memory.
- * Is this correct for those wacky EBCDIC guys? */
-
+/* Escape string to C string syntax. Return NULL if out of memory. */
#define MAX_STRING_LENGTH_OUTPUT 2000
#define ZERO_TERMINATED -1
/* If no definition was found, output an explicit value.
* This could happen if new values are defined and used
* but the NameValue list is not updated. */
- CODE2("curl_easy_setopt(hnd, %s, %ldL);", name, lval);
+ ret = easysrc_addf(&easysrc_code, "curl_easy_setopt(hnd, %s, %ldL);",
+ name, lval);
}
else {
- CODE2("curl_easy_setopt(hnd, %s, (long)%s);", name, nv->name);
+ ret = easysrc_addf(&easysrc_code, "curl_easy_setopt(hnd, %s, (long)%s);",
+ name, nv->name);
}
}
if(ret)
warnf(config, "option %s returned error (%d)", name, (int)ret);
#endif
-nomem:
return ret;
}
/* If no definition was found, output an explicit value.
* This could happen if new values are defined and used
* but the NameValue list is not updated. */
- CODE2("curl_easy_setopt(hnd, %s, %ldL);", name, lval);
+ ret = easysrc_addf(&easysrc_code, "curl_easy_setopt(hnd, %s, %ldL);",
+ name, lval);
}
else {
- CODE3("curl_easy_setopt(hnd, %s, (long)(%s | %s));",
- name, nv->name, nv2->name);
+ ret = easysrc_addf(&easysrc_code,
+ "curl_easy_setopt(hnd, %s, (long)(%s | %s));",
+ name, nv->name, nv2->name);
}
}
if(ret)
warnf(config, "option %s returned error (%d)", name, (int)ret);
#endif
-nomem:
return ret;
}
const struct NameValueUnsigned *nvlist,
long lval)
{
- CURLcode ret = CURLE_OK;
bool skip = FALSE;
-
- ret = curl_easy_setopt(curl, tag, lval);
+ CURLcode ret = curl_easy_setopt(curl, tag, lval);
if(!lval)
skip = TRUE;
if((nv->value & ~ rest) == 0) {
/* all value flags contained in rest */
rest &= ~ nv->value; /* remove bits handled here */
- CODE3("%s(long)%s%s",
- preamble, nv->name, rest ? " |" : ");");
- if(!rest)
+ ret = easysrc_addf(&easysrc_code, "%s(long)%s%s",
+ preamble, nv->name, rest ? " |" : ");");
+ if(!rest || ret)
break; /* handled them all */
/* replace with all spaces for continuation line */
msnprintf(preamble, sizeof(preamble), "%*s", (int)strlen(preamble),
/* If any bits have no definition, output an explicit value.
* This could happen if new bits are defined and used
* but the NameValue list is not updated. */
- if(rest)
- CODE2("%s%luUL);", preamble, rest);
+ if(rest && !ret)
+ ret = easysrc_addf(&easysrc_code, "%s%luUL);", preamble, rest);
}
-nomem:
return ret;
}
static CURLcode libcurl_generate_slist(struct curl_slist *slist, int *slistno)
{
CURLcode ret = CURLE_OK;
- char *escaped = NULL;
/* May need several slist variables, so invent name */
*slistno = ++easysrc_slist_count;
- DECL1("struct curl_slist *slist%d;", *slistno);
- DATA1("slist%d = NULL;", *slistno);
- CLEAN1("curl_slist_free_all(slist%d);", *slistno);
- CLEAN1("slist%d = NULL;", *slistno);
- for(; slist; slist = slist->next) {
- free(escaped);
- escaped = c_escape(slist->data, ZERO_TERMINATED);
+ ret = easysrc_addf(&easysrc_decl, "struct curl_slist *slist%d;", *slistno);
+ if(!ret)
+ ret = easysrc_addf(&easysrc_data, "slist%d = NULL;", *slistno);
+ if(!ret)
+ ret = easysrc_addf(&easysrc_clean, "curl_slist_free_all(slist%d);",
+ *slistno);
+ if(!ret)
+ ret = easysrc_addf(&easysrc_clean, "slist%d = NULL;", *slistno);
+ if(ret)
+ return ret;
+ for(; slist && !ret; slist = slist->next) {
+ char *escaped = c_escape(slist->data, ZERO_TERMINATED);
if(!escaped)
return CURLE_OUT_OF_MEMORY;
- DATA3("slist%d = curl_slist_append(slist%d, \"%s\");",
- *slistno, *slistno, escaped);
+ ret = easysrc_addf(&easysrc_data,
+ "slist%d = curl_slist_append(slist%d, \"%s\");",
+ *slistno, *slistno, escaped);
+ free(escaped);
}
-nomem:
- curlx_safefree(escaped);
return ret;
}
{
CURLcode ret = CURLE_OK;
int submimeno = 0;
- char *escaped = NULL;
const char *data = NULL;
const char *filename = part->filename;
/* Parts are linked in reverse order. */
- if(part->prev) {
+ if(part->prev)
ret = libcurl_generate_mime_part(curl, config, part->prev, mimeno);
- if(ret)
- return ret;
- }
/* Create the part. */
- CODE2("part%d = curl_mime_addpart(mime%d);", mimeno, mimeno);
+ if(!ret)
+ ret = easysrc_addf(&easysrc_code, "part%d = curl_mime_addpart(mime%d);",
+ mimeno, mimeno);
+ if(ret)
+ return ret;
switch(part->kind) {
case TOOLMIME_PARTS:
ret = libcurl_generate_mime(curl, config, part, &submimeno);
if(!ret) {
- CODE2("curl_mime_subparts(part%d, mime%d);", mimeno, submimeno);
- CODE1("mime%d = NULL;", submimeno); /* Avoid freeing in CLEAN. */
+ ret = easysrc_addf(&easysrc_code, "curl_mime_subparts(part%d, mime%d);",
+ mimeno, submimeno);
+ if(!ret)
+ /* Avoid freeing in CLEAN. */
+ ret = easysrc_addf(&easysrc_code,
+ "mime%d = NULL;", submimeno);
}
break;
case TOOLMIME_DATA:
data = part->data;
if(!ret) {
+ char *escaped = c_escape(data, ZERO_TERMINATED);
+ ret =
+ easysrc_addf(&easysrc_code,
+ "curl_mime_data(part%d, \"%s\", CURL_ZERO_TERMINATED);",
+ mimeno, escaped);
free(escaped);
- escaped = c_escape(data, ZERO_TERMINATED);
- NULL_CHECK(escaped);
- CODE2("curl_mime_data(part%d, \"%s\", CURL_ZERO_TERMINATED);",
- mimeno, escaped);
}
break;
case TOOLMIME_FILE:
- case TOOLMIME_FILEDATA:
- escaped = c_escape(part->data, ZERO_TERMINATED);
- NULL_CHECK(escaped);
- CODE2("curl_mime_filedata(part%d, \"%s\");", mimeno, escaped);
- if(part->kind == TOOLMIME_FILEDATA && !filename) {
- CODE1("curl_mime_filename(part%d, NULL);", mimeno);
+ case TOOLMIME_FILEDATA: {
+ char *escaped = c_escape(part->data, ZERO_TERMINATED);
+ ret = easysrc_addf(&easysrc_code,
+ "curl_mime_filedata(part%d, \"%s\");", mimeno, escaped);
+ if(part->kind == TOOLMIME_FILEDATA && !filename && !ret) {
+ ret = easysrc_addf(&easysrc_code,
+ "curl_mime_filename(part%d, NULL);", mimeno);
}
+ free(escaped);
break;
+ }
case TOOLMIME_STDIN:
if(!filename)
FALLTHROUGH();
case TOOLMIME_STDINDATA:
/* Can only be reading stdin in the current context. */
- CODE1("curl_mime_data_cb(part%d, -1, (curl_read_callback) fread, \\",
- mimeno);
- CODE0(" (curl_seek_callback) fseek, NULL, stdin);");
+ ret = easysrc_addf(&easysrc_code, "curl_mime_data_cb(part%d, -1, "
+ "(curl_read_callback) fread, \\", mimeno);
+ if(!ret)
+ ret = easysrc_addf(&easysrc_code, " "
+ "(curl_seek_callback) fseek, NULL, stdin);");
break;
default:
/* Other cases not possible in this context. */
}
if(!ret && part->encoder) {
+ char *escaped = c_escape(part->encoder, ZERO_TERMINATED);
+ ret = easysrc_addf(&easysrc_code, "curl_mime_encoder(part%d, \"%s\");",
+ mimeno, escaped);
free(escaped);
- escaped = c_escape(part->encoder, ZERO_TERMINATED);
- NULL_CHECK(escaped);
- CODE2("curl_mime_encoder(part%d, \"%s\");", mimeno, escaped);
}
if(!ret && filename) {
+ char *escaped = c_escape(filename, ZERO_TERMINATED);
+ ret = easysrc_addf(&easysrc_code, "curl_mime_filename(part%d, \"%s\");",
+ mimeno, escaped);
free(escaped);
- escaped = c_escape(filename, ZERO_TERMINATED);
- NULL_CHECK(escaped);
- CODE2("curl_mime_filename(part%d, \"%s\");", mimeno, escaped);
}
if(!ret && part->name) {
+ char *escaped = c_escape(part->name, ZERO_TERMINATED);
+ ret = easysrc_addf(&easysrc_code, "curl_mime_name(part%d, \"%s\");",
+ mimeno, escaped);
free(escaped);
- escaped = c_escape(part->name, ZERO_TERMINATED);
- NULL_CHECK(escaped);
- CODE2("curl_mime_name(part%d, \"%s\");", mimeno, escaped);
}
if(!ret && part->type) {
+ char *escaped = c_escape(part->type, ZERO_TERMINATED);
+ ret = easysrc_addf(&easysrc_code, "curl_mime_type(part%d, \"%s\");",
+ mimeno, escaped);
free(escaped);
- escaped = c_escape(part->type, ZERO_TERMINATED);
- NULL_CHECK(escaped);
- CODE2("curl_mime_type(part%d, \"%s\");", mimeno, escaped);
}
if(!ret && part->headers) {
ret = libcurl_generate_slist(part->headers, &slistno);
if(!ret) {
- CODE2("curl_mime_headers(part%d, slist%d, 1);", mimeno, slistno);
- CODE1("slist%d = NULL;", slistno); /* Prevent CLEANing. */
+ ret = easysrc_addf(&easysrc_code,
+ "curl_mime_headers(part%d, slist%d, 1);",
+ mimeno, slistno);
+ if(!ret)
+ ret = easysrc_addf(&easysrc_code,
+ "slist%d = NULL;", slistno); /* Prevent CLEANing. */
}
}
-nomem:
- curlx_safefree(escaped);
return ret;
}
/* May need several mime variables, so invent name. */
*mimeno = ++easysrc_mime_count;
- DECL1("curl_mime *mime%d;", *mimeno);
- DATA1("mime%d = NULL;", *mimeno);
- CODE1("mime%d = curl_mime_init(hnd);", *mimeno);
- CLEAN1("curl_mime_free(mime%d);", *mimeno);
- CLEAN1("mime%d = NULL;", *mimeno);
-
- if(toolmime->subparts) {
- DECL1("curl_mimepart *part%d;", *mimeno);
- ret = libcurl_generate_mime_part(curl, config,
- toolmime->subparts, *mimeno);
+ ret = easysrc_addf(&easysrc_decl, "curl_mime *mime%d;", *mimeno);
+ if(!ret)
+ ret = easysrc_addf(&easysrc_data, "mime%d = NULL;", *mimeno);
+ if(!ret)
+ ret = easysrc_addf(&easysrc_code, "mime%d = curl_mime_init(hnd);",
+ *mimeno);
+ if(!ret)
+ ret = easysrc_addf(&easysrc_clean, "curl_mime_free(mime%d);", *mimeno);
+ if(!ret)
+ ret = easysrc_addf(&easysrc_clean, "mime%d = NULL;", *mimeno);
+
+ if(toolmime->subparts && !ret) {
+ ret = easysrc_addf(&easysrc_decl, "curl_mimepart *part%d;", *mimeno);
+ if(!ret)
+ ret = libcurl_generate_mime_part(curl, config,
+ toolmime->subparts, *mimeno);
}
-nomem:
return ret;
}
config->current->mimeroot, &mimeno);
if(!ret)
- CODE2("curl_easy_setopt(hnd, %s, mime%d);", name, mimeno);
+ ret = easysrc_addf(&easysrc_code, "curl_easy_setopt(hnd, %s, mime%d);",
+ name, mimeno);
}
-nomem:
return ret;
}
ret = libcurl_generate_slist(list, &i);
if(!ret)
- CODE2("curl_easy_setopt(hnd, %s, slist%d);", name, i);
+ ret = easysrc_addf(&easysrc_code, "curl_easy_setopt(hnd, %s, slist%d);",
+ name, i);
}
-nomem:
return ret;
}
ret = curl_easy_setopt(curl, tag, lval);
if((lval != defval) && global->libcurl && !ret) {
/* we only use this for real if --libcurl was used */
- CODE2("curl_easy_setopt(hnd, %s, %ldL);", name, lval);
+ ret = easysrc_addf(&easysrc_code, "curl_easy_setopt(hnd, %s, %ldL);",
+ name, lval);
}
-nomem:
return ret;
}
ret = curl_easy_setopt(curl, tag, lval);
if(global->libcurl && !ret && lval) {
/* we only use this for real if --libcurl was used */
- CODE2("curl_easy_setopt(hnd, %s, (curl_off_t)%"
+ ret = easysrc_addf(&easysrc_code, "curl_easy_setopt(hnd, %s, (curl_off_t)%"
CURL_FORMAT_CURL_OFF_T ");", name, lval);
}
-nomem:
+
return ret;
}
/* function pointers are never printable */
const char *remark = (tag >= CURLOPTTYPE_FUNCTIONPOINT) ?
"function" : "object";
- REM3("%s was set to a%s %s pointer", name,
- (*remark == 'o' ? "n" : ""), remark);
+ ret = easysrc_addf(&easysrc_toohard,
+ "%s was set to a%s %s pointer", name,
+ (*remark == 'o' ? "n" : ""), remark);
}
else {
curl_off_t len = ZERO_TERMINATED;
len = curlx_dyn_len(&config->postdata);
escaped = c_escape(pval, len);
if(escaped) {
- CODE2("curl_easy_setopt(hnd, %s, \"%s\");", name, escaped);
+ ret = easysrc_addf(&easysrc_code, "curl_easy_setopt(hnd, %s, \"%s\");",
+ name, escaped);
free(escaped);
}
}
}
-nomem:
return ret;
}