return 0;
struct arg_type_info *ninfo = malloc(sizeof(*ninfo));
- if (ninfo == NULL) {
+ if (ninfo == NULL || type_clone(ninfo, *infop) < 0) {
report_error(loc->filename, loc->line_no,
"malloc: %s", strerror(errno));
+ free(ninfo);
return -1;
}
- *ninfo = **infop;
*infop = ninfo;
*ownp = 1;
return 0;
{
size_t len = strlen(kwd);
if (strncmp(*str, kwd, len) == 0
- && !isalnum(CTYPE_CONV((*str)[len]))) {
+ && !isalnum(CTYPE_CONV((*str)[len]))
+ && (*str)[len] != '_') {
(*str) += len;
return 0;
}
return -1;
}
-/* XXX extra_param and param_num are a kludge to get in
+/* XXX EXTRA_PARAM and PARAM_NUM are a kludge to get in
* backward-compatible support for "format" parameter type. The
* latter is only valid if the former is non-NULL, which is only in
* top-level context. */