(sl_loop): Fix general broken-ness.

git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@4511 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
Johan Danielsson
1998-03-01 04:55:19 +00:00
parent 9930930049
commit ce3a350343

View File

@@ -181,49 +181,34 @@ sl_make_argv(char *line, int *ret_argc, char ***ret_argv)
int int
sl_loop (SL_cmd *cmds, char *prompt) sl_loop (SL_cmd *cmds, char *prompt)
{ {
unsigned max_count; char *buf;
char **ptr; int argc;
int ret; char **argv;
int ret = 0;
max_count = 17;
ptr = malloc(max_count * sizeof(*ptr));
if (ptr == NULL) {
printf ("sl_loop: failed to allocate %u bytes of memory\n",
(int) max_count * sizeof(*ptr));
return -1;
}
for (;;) {
char *buf;
int count;
SL_cmd *c;
while(ret == 0) {
ret = 0; ret = 0;
/* XXX should make sure this doesn't do funny things if stdin
is not a tty */
buf = readline(prompt); buf = readline(prompt);
if(buf == NULL) if(buf == NULL)
break; break;
if(*buf) if(*buf)
add_history(buf); add_history(buf);
count = 0; argc = 0;
ret = sl_make_argv(buf, &count, &ptr); ret = sl_make_argv(buf, &argc, &argv);
if(ret) { if(ret) {
fprintf(stderr, "sl_loop: out of memory\n"); fprintf(stderr, "sl_loop: out of memory\n");
return -1; return -1;
} }
if (count > 0) { ret = sl_command(cmds, argc, argv);
c = sl_match (cmds, ptr[0], 0); if(ret == -1) {
if (c) { printf ("Unrecognized command: %s\n", argv[0]);
ret = (*c->func)(count, ptr); ret = 0;
if (ret != 0) {
free (buf);
break;
}
} else
printf ("Unrecognized command: %s\n", ptr[0]);
} }
free(argv);
free(buf); free(buf);
} }
free (ptr);
return 0; return 0;
} }