merge strcpy_truncate branch

git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@5027 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
Johan Danielsson
1998-06-09 19:25:40 +00:00
parent e255dfc950
commit a5f54865d4
87 changed files with 689 additions and 499 deletions

View File

@@ -51,6 +51,10 @@ Sun Feb 15 05:12:11 1998 Johan Danielsson <joda@emma.pdc.kth.se>
* sl.c: Move command line split to function `sl_make_argv'.
Tue Feb 3 16:45:44 1998 Johan Danielsson <joda@emma.pdc.kth.se>
* sl.c: Add sl_command_loop, that is the loop body of sl_loop.
Mon Oct 20 01:13:21 1997 Assar Westerlund <assar@sics.se>
* sl.c (sl_help): actually use the `help' field of `SL_cmd'

View File

@@ -143,6 +143,11 @@ sl_command(SL_cmd *cmds, int argc, char **argv)
return (*c->func)(argc, argv);
}
struct sl_data {
int max_count;
char **ptr;
};
int
sl_make_argv(char *line, int *ret_argc, char ***ret_argv)
{
@@ -178,39 +183,47 @@ sl_make_argv(char *line, int *ret_argc, char ***ret_argv)
return 0;
}
/* return values: 0 on success, -1 on fatal error, or return value of command */
int
sl_loop (SL_cmd *cmds, char *prompt)
sl_command_loop(SL_cmd *cmds, char *prompt, void **data)
{
int ret = 0;
char *buf;
SL_cmd *c;
int argc;
char **argv;
int ret = 0;
ret = 0;
buf = readline(prompt);
if(buf == NULL)
return 1;
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);
argc = 0;
ret = sl_make_argv(buf, &argc, &argv);
if(ret) {
fprintf(stderr, "sl_loop: out of memory\n");
return -1;
}
if(argc >= 1) {
ret = sl_command(cmds, argc, argv);
if(ret == -1) {
printf ("Unrecognized command: %s\n", argv[0]);
ret = 0;
}
}
free(argv);
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;
}
return 0;
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;
}
int
sl_loop(SL_cmd *cmds, char *prompt)
{
void *data = NULL;
int ret;
while((ret = sl_command_loop(cmds, prompt, &data)) == 0)
;
return ret;
}

View File

@@ -54,6 +54,7 @@ typedef struct sl_cmd SL_cmd;
void sl_help (SL_cmd *, int argc, char **argv);
int sl_loop (SL_cmd *, char *prompt);
int sl_command_loop (SL_cmd *cmds, char *prompt, void **data);
int sl_command (SL_cmd *cmds, int argc, char **argv);
int sl_make_argv(char*, int*, char***);