+ ret = output("\n");
+ if (ret < 0)
+ return ret;
+ }
+ if (ula == user_list_arg_none && !select_conf.no_user_summary_given) {
+ usi.count = select_conf.limit_arg;
+ usi.ui = ui;
+ usi.flags = USF_COMPUTE_SUMMARY;
+ ret = adu_loop_reverse(ui->table, UT_FILES, &usi, user_stats_loop_function,
+ &usi.ret, &usi.osl_errno);
+ if (ret < 0)
+ return ret;
+ }
+ return 1;
+}
+
+static int print_user_lists(void)
+{
+ return for_each_admissible_user(print_user_list, NULL);
+}
+
+static int print_global_lists(void)
+{
+ struct global_stats_info gsi;
+ int ret;
+ enum enum_global_list gla = select_conf.global_list_arg;
+ int print_size_list = (gla == global_list_arg_size
+ || gla == global_list_arg_both);
+
+ if (print_size_list) {
+ gsi.count = select_conf.limit_arg;
+ gsi.flags = GSF_PRINT_DIRNAME | GSF_PRINT_BYTES | GSF_COMPUTE_SUMMARY;
+ if (!select_conf.no_headers_given) {
+ ret = output("By size%s:\n", size_unit_buf);
+ if (ret < 0)
+ return ret;
+ }
+ ret = adu_loop_reverse(dir_table, DT_BYTES, &gsi,
+ global_stats_loop_function, &gsi.ret, &gsi.osl_errno);
+ if (ret < 0)
+ return ret;
+ ret = output("\n");
+ if (ret < 0)
+ return ret;
+ }
+ if (gla == global_list_arg_file_count || gla == global_list_arg_both) {
+ gsi.count = select_conf.limit_arg;
+ gsi.flags = GSF_PRINT_DIRNAME | GSF_PRINT_FILES;
+ if (!print_size_list)
+ gsi.flags |= GSF_COMPUTE_SUMMARY;
+ if (!select_conf.no_headers_given) {
+ ret = output("By file count%s:\n", count_unit_buf);
+ if (ret < 0)
+ return ret;
+ }
+ ret = adu_loop_reverse(dir_table, DT_FILES, &gsi,
+ global_stats_loop_function, &gsi.ret, &gsi.osl_errno);
+ if (ret < 0)
+ return ret;
+ ret = output("\n");
+ if (ret < 0)
+ return ret;
+ }
+ if (gla == global_list_arg_none && !select_conf.no_global_summary_given) {
+ /* must compute summary */
+ gsi.count = select_conf.limit_arg;
+ gsi.flags = GSF_COMPUTE_SUMMARY;
+ ret = adu_loop_reverse(dir_table, DT_FILES, &gsi,
+ global_stats_loop_function, &gsi.ret, &gsi.osl_errno);
+ if (ret < 0)
+ return ret;