From ce3a350343e56d3175bec4b27aaed594eb02b852 Mon Sep 17 00:00:00 2001 From: Johan Danielsson Date: Sun, 1 Mar 1998 04:55:19 +0000 Subject: [PATCH] (sl_loop): Fix general broken-ness. git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@4511 ec53bebd-3082-4978-b11e-865c3cabbd6b --- lib/sl/sl.c | 43 ++++++++++++++----------------------------- 1 file changed, 14 insertions(+), 29 deletions(-) diff --git a/lib/sl/sl.c b/lib/sl/sl.c index ef5aa320f..3ccb46f02 100644 --- a/lib/sl/sl.c +++ b/lib/sl/sl.c @@ -181,49 +181,34 @@ sl_make_argv(char *line, int *ret_argc, char ***ret_argv) int sl_loop (SL_cmd *cmds, char *prompt) { - unsigned max_count; - char **ptr; - int ret; - - 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; + char *buf; + int argc; + char **argv; + int ret = 0; + while(ret == 0) { ret = 0; + /* XXX should make sure this doesn't do funny things if stdin + is not a tty */ buf = readline(prompt); if(buf == NULL) break; if(*buf) add_history(buf); - count = 0; - ret = sl_make_argv(buf, &count, &ptr); + argc = 0; + ret = sl_make_argv(buf, &argc, &argv); if(ret) { fprintf(stderr, "sl_loop: out of memory\n"); return -1; } - if (count > 0) { - c = sl_match (cmds, ptr[0], 0); - if (c) { - ret = (*c->func)(count, ptr); - if (ret != 0) { - free (buf); - break; - } - } else - printf ("Unrecognized command: %s\n", ptr[0]); + ret = sl_command(cmds, argc, argv); + if(ret == -1) { + printf ("Unrecognized command: %s\n", argv[0]); + ret = 0; } + free(argv); free(buf); } - free (ptr); return 0; }