예제 #1
0
int
main(int argc, char **argv)
{
    int ret, i;

    for (i = 0; i < sizeof(lines)/sizeof(lines[0]); i++) {
	int j, rargc = 0;
	char **rargv = NULL;
	char *buf = strdup(lines[i].line);

	ret = sl_make_argv(buf, &rargc, &rargv);
	if (ret) {
	    if (!lines[i].ok)
		goto next;
	    errx(1, "sl_make_argv test %d failed", i);
	} else if (!lines[i].ok)
	    errx(1, "sl_make_argv passed test %d when it shouldn't", i);
	if (rargc != lines[i].argc)
	    errx(1, "result argc (%d) != should be argc (%d) for test %d", 
		 rargc, lines[i].argc, i);
	for (j = 0; j < rargc; j++)
	    if (strcmp(rargv[j], lines[i].argv[j]) != 0)
		errx(1, "result argv (%s) != should be argv (%s) for test %d",
		     rargv[j], lines[i].argv[j], i);
    next:
	free(buf);
	free(rargv);
    }

    return 0;
}
예제 #2
0
/* return values:
 * 0 on success,
 * -1 on fatal error,
 * -2 if EOF, or
 * return value of command */
int
sl_command_loop(SL_cmd *cmds, const char *prompt, void **data)
{
    int ret = 0;
    char *buf;
    int argc;
    char **argv;

    buf = sl_readline(prompt);
    if(buf == NULL)
        return -2;

    if(*buf)
        add_history(buf);
    ret = sl_make_argv(buf, &argc, &argv);
    if(ret) {
        fprintf(stderr, "sl_loop: out of memory\n");
        free(buf);
        return -1;
    }
    if (argc >= 1) {
        ret = sl_command(cmds, argc, argv);
        if(ret == -1) {
            printf ("Unrecognized command: %s\n", argv[0]);
            ret = 0;
        }
    }
    free(buf);
    free(argv);
    return ret;
}