char **ss_parse(int sci_idx, register char *line_ptr, int *argc_ptr)
{
- register char **argv, *cp;
+ register char **argv, **new_argv, *cp;
register int argc;
register enum parse_mode parse_mode;
/* go to quoted-string mode */
parse_mode = QUOTED_STRING;
cp = line_ptr++;
- argv = NEW_ARGV (argv, argc);
+ new_argv = NEW_ARGV (argv, argc);
+ if (new_argv == NULL) {
+ free(argv);
+ *argc_ptr = 0;
+ return NULL;
+ }
+ argv = new_argv;
argv[argc++] = cp;
argv[argc] = NULL;
}
/* random-token mode */
parse_mode = TOKEN;
cp = line_ptr;
- argv = NEW_ARGV (argv, argc);
+ new_argv = NEW_ARGV (argv, argc);
if (argv == NULL) {
- *argc_ptr = errno;
- return argv;
+ free(argv);
+ *argc_ptr = 0;
+ return NULL;
}
+ argv = new_argv;
argv[argc++] = line_ptr;
argv[argc] = NULL;
}