- struct user_stats_info usi;
- enum enum_user_list ula = select_conf.user_list_arg;
- int print_size_list = (ula == user_list_arg_size
- || ula == user_list_arg_both);
-
- if (print_size_list) {
- usi.count = select_conf.limit_arg;
- usi.ui = ui;
- usi.flags = USF_PRINT_DIRNAME | USF_PRINT_BYTES | USF_COMPUTE_SUMMARY;
- if (!select_conf.no_headers_given) {
- ret = output("%s (uid %u), by size%s:\n",
- ui->pw_name? ui->pw_name : "?", (unsigned)ui->uid,
- size_unit_buf);
- if (ret < 0)
- return ret;
- }
- ret = adu_loop_reverse(ui->table, UT_BYTES, &usi, user_stats_loop_function,
- &usi.ret, &usi.osl_errno);
- if (ret < 0)
- return ret;
- ret = output("\n");
- if (ret < 0)
- return ret;
- }
- if (ula == user_list_arg_file_count || ula == user_list_arg_both) {
- if (!select_conf.no_headers_given) {
- ret = output("%s (uid %u), by file count%s:\n",
- ui->pw_name? ui->pw_name : "?", (unsigned)ui->uid,
- count_unit_buf);
- if (ret < 0)
- return ret;
- }
- usi.count = select_conf.limit_arg,
- usi.ui = ui;
- usi.flags = USF_PRINT_DIRNAME | USF_PRINT_FILES;
- ret = adu_loop_reverse(ui->table, UT_FILES, &usi, user_stats_loop_function,
- &usi.ret, &usi.osl_errno);
- if (ret < 0)
- return ret;
- 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;
+ enum user_table_columns sort_column;
+ struct user_list_info uli = {
+ .ui = ui,
+ .fi = ulfi->fi,
+ .count = select_conf.limit_arg
+ };
+ union atom_value header_values[] = {
+ [ulha_uid] = {.num_value = (long long unsigned)ui->uid},
+ [ulha_pw_name] = {.string_value = ui->pw_name?
+ ui->pw_name : "?"}
+ };
+ char *buf = format_items(ulfi->header_fi, header_values);
+
+ ret = output("%s", buf);
+ free(buf);
+ if (ret < 0)
+ return ret;
+ if (select_conf.list_sort_arg == list_sort_arg_file_count)
+ sort_column = UT_FILES;
+ else
+ sort_column = UT_BYTES;
+
+ ret = compile_regex(&uli.preg, &uli.inverse_matching);
+ if (ret < 0)
+ return ret;
+ ret = adu_loop_reverse(ui->table, sort_column, &uli,
+ user_list_loop_function, &uli.ret, &uli.osl_errno);
+ free_regex(uli.preg);
+ return ret;