]> git.tuebingen.mpg.de Git - adu.git/blobdiff - select.c
Implement the interactive "run" command to run the select query.
[adu.git] / select.c
index 9353c5f8edd18373eafd074f6db989b91b212368..4795de453adc095bdd0bf80134c5d4478dc40343 100644 (file)
--- a/select.c
+++ b/select.c
@@ -77,8 +77,6 @@ static const uint64_t count_unit_divisors[] = {
 
 static const char size_unit_abbrevs[] = " BKMGT";
 static const char count_unit_abbrevs[] = "  kmgt";
-static struct uid_range *admissible_uids;
-
 static enum enum_size_unit format_size_value(enum enum_size_unit unit,
                uint64_t value, int print_unit, char *result)
 {
@@ -551,7 +549,7 @@ static int print_statistics(void)
        return 1;
 }
 
-static int read_uid_file(void)
+static int read_uid_file(struct uid_range *admissible_uids)
 {
        size_t size;
        uint32_t n;
@@ -586,25 +584,9 @@ out:
        return ret;
 }
 
-int com_select(void)
+int run_select_query(struct uid_range *admissible_uids)
 {
        int ret;
-       if (conf.select_options_given) {
-               struct select_cmdline_parser_params params = {
-                       .override = 1,
-                       .initialize = 1,
-                       .check_required = 1,
-                       .check_ambiguity = 1,
-                       .print_errors = 1
-               };
-
-               if (select_cmdline_parser_string_ext(conf.select_options_arg,
-                       &select_conf, "select", &params))
-                       return -E_SYNTAX;
-               ret = parse_uid_arg(select_conf.uid_arg, &admissible_uids);
-               if (ret < 0)
-                       return ret;
-       }
 
        if (select_conf.count_unit_arg != count_unit_arg_h)
                count_unit_buf[1] = count_unit_abbrevs[select_conf.count_unit_arg];
@@ -619,7 +601,7 @@ int com_select(void)
        if (ret < 0)
                return ret;
        check_signals();
-       ret = read_uid_file();
+       ret = read_uid_file(admissible_uids);
        if (ret < 0)
                return ret;
        check_signals();
@@ -627,3 +609,27 @@ int com_select(void)
        close_all_tables();
        return ret;
 }
+
+int com_select(void)
+{
+       int ret;
+       struct uid_range *admissible_uids = NULL;
+
+       if (conf.select_options_given) {
+               struct select_cmdline_parser_params params = {
+                       .override = 1,
+                       .initialize = 1,
+                       .check_required = 1,
+                       .check_ambiguity = 1,
+                       .print_errors = 1
+               };
+
+               if (select_cmdline_parser_string_ext(conf.select_options_arg,
+                       &select_conf, "select", &params))
+                       return -E_SYNTAX;
+               ret = parse_uid_arg(select_conf.uid_arg, &admissible_uids);
+               if (ret < 0)
+                       return ret;
+       }
+       return run_select_query(admissible_uids);
+}