]> git.tuebingen.mpg.de Git - adu.git/blobdiff - select.c
Make the summary comparators non-static.
[adu.git] / select.c
index 152e4b98667c69fe68d5a0a53fb53b2f90b677ab..a3519fe40e586c6ad17e6e252a5a37f50726ba81 100644 (file)
--- a/select.c
+++ b/select.c
@@ -410,7 +410,7 @@ static int print_user_summary(struct format_info *fi)
         * This is an array of pointers to functions taking two constant void *
         * pointers and returning an int.
         */
-       static int (*summary_comparators[])(const void *, const void *) = {
+       int (*summary_comparators[])(const void *, const void *) = {
                [user_summary_sort_arg_name] = name_comp,
                [user_summary_sort_arg_uid] = uid_comp,
                [user_summary_sort_arg_dir_count] = dir_count_comp,
@@ -583,7 +583,7 @@ static int print_statistics(struct format_info *fi)
                        return print_user_summary(fi);
        };
        ERROR_LOG("bad select mode\n");
-       return -ERRNO_TO_ERROR(-EINVAL);
+       return -ERRNO_TO_ERROR(EINVAL);
 }
 
 static int open_pipe(char *path)
@@ -686,13 +686,12 @@ int run_select_query(struct uid_range *admissible_uids, struct format_info *fi)
        if (ret < 0)
                goto out;
        check_signals();
-       ret = read_uid_file(admissible_uids);
+       ret = open_admissible_user_tables(admissible_uids);
        if (ret < 0)
                goto out;
        check_signals();
        ret = print_statistics(fi);
 out:
-       close_all_tables();
        if (output_file && output_file != stdout) {
                fclose(output_file);
                output_file = NULL;
@@ -734,7 +733,7 @@ static int setup_format_string(char *fmt, struct format_info **fi)
                break;
        default:
                ERROR_LOG("bad select mode\n");
-               return -ERRNO_TO_ERROR(-EINVAL);
+               return -ERRNO_TO_ERROR(EINVAL);
        };
        INFO_LOG("format string: %s\n", fmt);
        return parse_format_string(fmt, atoms, fi);
@@ -799,12 +798,16 @@ int com_select(void)
                .print_errors = 1
        };
 
-       select_cmdline_parser_init(&select_conf);
        ret = parse_select_options(conf.select_options_arg, &params,
                &admissible_uids, &fi);
-       if (ret <= 0) /* do not run query if help was given */
-               return ret;
-       ret = run_select_query(admissible_uids, fi);
-       free_format_info(fi);
+       if (ret > 0) {
+               ret = read_uid_file();
+               if (ret < 0)
+                       goto out;
+               ret = run_select_query(admissible_uids, fi);
+               free_format_info(fi);
+       }
+out:
+       select_cmdline_parser_free(&select_conf);
        return ret;
 }