- if (!select_conf.no_headers_given) {
- ret = output("%s (uid %u)\n",
- ui->pw_name? ui->pw_name : "?", (unsigned)ui->uid);
- if (ret < 0)
- return ret;
- }
- return adu_loop_reverse(ui->table, sort_column, &uli, user_list_loop_function,
- &uli.ret, &uli.osl_errno);
+ 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);
+ if (ret < 0)
+ return ret;
+ buf = format_items(ulfi->trailer_fi, header_trailer_values);
+ ret = output("%s", buf);
+ free(buf);
+ return ret;
+}
+
+static int print_user_lists(struct format_info *fi)
+{
+ struct user_list_format_info ulfi = {.fi = fi};
+ char *header_fmt = select_conf.header_given?
+ select_conf.header_arg : "uid %(uid)(%(pw_name)):\n";
+ char *trailer_fmt = select_conf.trailer_arg;
+ int ret = parse_format_string(header_fmt,
+ user_list_header_trailer_atoms, &ulfi.header_fi);
+ if (ret < 0)
+ return ret;
+ ret = parse_format_string(trailer_fmt,
+ user_list_header_trailer_atoms, &ulfi.trailer_fi);
+ if (ret < 0)
+ return ret;
+ ret = for_each_admissible_user(print_user_list, &ulfi);
+ free_format_info(ulfi.header_fi);
+ free_format_info(ulfi.trailer_fi);
+ return ret;