X-Git-Url: http://git.tuebingen.mpg.de/?a=blobdiff_plain;f=interactive.c;h=8f94076c4a8bb08829b482fd830e1820251f8243;hb=f56aa749790691ac3a44cc9c67a0ee7055939f78;hp=3cfb3a2f5ee284c0f757d21e71f4058c21601daa;hpb=09b30a0e3aeba620db7daa3d81b30bbb5727dda3;p=adu.git diff --git a/interactive.c b/interactive.c index 3cfb3a2..8f94076 100644 --- a/interactive.c +++ b/interactive.c @@ -1,9 +1,18 @@ +/* + * Copyright (C) 2008 Andre Noll + * + * Licensed under the GPL v2. For licencing details see COPYING. + */ + +/** \file interactive.c \brief Commands for interactive mode. */ + #include /* isspace() */ #include "adu.h" #include "format.h" #include "user.h" #include "string.h" +#include "cmdline.h" #include "select.cmdline.h" #include "select.h" #include "error.h" @@ -26,6 +35,7 @@ struct interactive_command { static struct uid_range *admissible_uids; static struct format_info *fi; +/** The set of supported interactive commands. */ #define INTERACTIVE_COMMANDS \ INTERACTIVE_COMMAND(set, "change the current configuration") \ INTERACTIVE_COMMAND(reset, "reset configuration to defaults") \ @@ -34,6 +44,7 @@ static struct format_info *fi; INTERACTIVE_COMMAND(source, "read and execute interactive commands from a file") +/** \cond doxygen is not smart enough for this */ #define INTERACTIVE_COMMAND(name, desc) \ static int icom_ ## name (char *line); @@ -52,7 +63,9 @@ struct interactive_command icmds[] = { INTERACTIVE_COMMANDS {.name = NULL} }; +/** \endcond */ +/** Iterate over the list of all interactive commands. */ #define FOR_EACH_COMMAND(c) for (c = icmds; c->name; c++) static int read_input_line(char *line, size_t size) @@ -74,6 +87,9 @@ static int icom_help(__a_unused char *line) return 1; } +/** + * Print the list of commands with short descriptions. + */ void print_interactive_help(void) { struct interactive_command *c; @@ -94,7 +110,6 @@ static int icom_reset(__a_unused char *line) static int icom_set(char *line) { - int ret; struct select_cmdline_parser_params params = { .override = 1, .initialize = 0, @@ -111,10 +126,7 @@ static int icom_set(char *line) fi = NULL; free(admissible_uids); admissible_uids = NULL; - ret = parse_select_options(line, ¶ms, &admissible_uids, &fi); - if (ret >= 0) - return ret; - return icom_reset(NULL); + return parse_select_options(line, ¶ms, &admissible_uids, &fi); } static int exec_interactive_command(char *line) @@ -129,7 +141,7 @@ static int exec_interactive_command(char *line) return 1; len = strlen(line); - while (len && isspace(line[len - 1])) { + while (len && adu_isspace(line[len - 1])) { line[len - 1] = '\0'; len--; } @@ -184,6 +196,11 @@ out: return ret; } +/** + * The main function for interactive mode. + * + * \return Standard. + */ int com_interactive(void) { char line[255]; @@ -200,6 +217,7 @@ int com_interactive(void) ret = exec_interactive_command(line); if (ret < 0) printf("%s\n", adu_strerror(-ret)); + fflush(NULL); } return ret; }