#include <unistd.h>
#include <sys/param.h>
#include <assert.h>
-
-#include <config.h>
-#ifdef HAVE_LIBREADLINE
-#define READLINE_LIBRARY
-#include <readline/readline.h>
-#endif
-
-/* completion_matches() is #if 0-ed out in modern glibc */
-#ifndef completion_matches
-#define completion_matches rl_completion_matches
-#endif
-extern void using_history(void);
-extern void stifle_history(int);
-extern void add_history(char *);
+#include <lnet/api-support.h>
#include "parser.h"
char * pos;
match_tbl = top_level;
+
for (table = find_cmd(rl_line_buffer, match_tbl, &pos);
- table;
- table = find_cmd(pos, match_tbl, &pos)) {
+ table; table = find_cmd(pos, match_tbl, &pos))
+ {
if (*(pos - 1) == ' ') match_tbl = table->pc_sub_cmd;
}
- return(completion_matches(text, command_generator));
+ return completion_matches(text, command_generator);
}
#endif
if (*s) {
add_history(s);
rc = execute_line(s);
+
+ /* reset optind to 0 to tell getopt
+ * to reinitialize itself */
+ optind = 0;
}
free(line);
return 1;
}
-/* Convert human readable size string to and int; "1k" -> 1000 */
-int Parser_size (int *sizep, char *str) {
- int size;
- char mod[32];
-
- switch (sscanf (str, "%d%1[gGmMkK]", &size, mod)) {
- default:
- return (-1);
-
- case 1:
- *sizep = size;
- return (0);
-
- case 2:
- switch (*mod) {
- case 'g':
- case 'G':
- *sizep = size << 30;
- return (0);
-
- case 'm':
- case 'M':
- *sizep = size << 20;
- return (0);
-
- case 'k':
- case 'K':
- *sizep = size << 10;
- return (0);
-
- default:
- *sizep = size;
- return (0);
- }
- }
-}
-
-/* Convert a string boolean to an int; "enable" -> 1 */
-int Parser_bool (int *b, char *str) {
- if (!strcasecmp (str, "no") ||
- !strcasecmp (str, "n") ||
- !strcasecmp (str, "off") ||
- !strcasecmp (str, "down") ||
- !strcasecmp (str, "disable"))
- {
- *b = 0;
- return (0);
- }
-
- if (!strcasecmp (str, "yes") ||
- !strcasecmp (str, "y") ||
- !strcasecmp (str, "on") ||
- !strcasecmp (str, "up") ||
- !strcasecmp (str, "enable"))
- {
- *b = 1;
- return (0);
- }
-
- return (-1);
-}
-
int Parser_quit(int argc, char **argv)
{
argc = argc;