1 /*
2 * Copyright (c) 2013-2026 Devin Teske <dteske@FreeBSD.org>
3 * Copyright (c) 2021-2026 Faraz Vahedi <kfv@FreeBSD.org>
4 *
5 * SPDX-License-Identifier: BSD-2-Clause
6 */
7
8 /*
9 * Report effective directive values (named reads and -a).
10 */
11
12 #include "sysconf_priv.h"
13
14 /*
15 * Report read requests (and `-a') from the results of a completed
16 * scan_pass(). Returns EXIT_SUCCESS or EXIT_FAILURE.
17 */
18 int
do_reads(void)19 do_reads(void)
20 {
21 int rv = EXIT_SUCCESS;
22 size_t d;
23 unsigned int n;
24
25 if (dump_all) {
26 for (d = 0; d < ndumps; d++) {
27 /*
28 * Without -A, a plain -a dumps only what the conf
29 * files themselves configure; a directive whose
30 * value still comes from the (always-scanned)
31 * defaults file is out of scope.
32 */
33 if (!with_defaults && defaults_idx >= 0 &&
34 dumps[d].srcidx == defaults_idx)
35 continue;
36 if (!quiet)
37 warn_with_equals_no(dumps[d].name,
38 dumps[d].value,
39 conf_files[dumps[d].srcidx],
40 dumps[d].line);
41 if (show_desc)
42 print_desc(dumps[d].name);
43 else if (verbose_trail)
44 print_trail(dumps[d].name, dumps[d].trail,
45 dumps[d].ntrail);
46 else
47 print_pair(conf_files[dumps[d].srcidx],
48 dumps[d].name, dumps[d].value);
49 }
50 return (EXIT_SUCCESS);
51 }
52
53 /* Report the results in the order requested */
54 for (n = 0; n < nreqs; n++) {
55 if (reqs[n].newvalue != NULL || reqs[n].remove ||
56 reqs[n].name[0] == '\0') /* neutralized by validation */
57 continue;
58 if (!reqs[n].found) {
59 if (ignore_unknown)
60 continue;
61 if (!quiet)
62 warnx("unknown directive '%s'",
63 reqs[n].name);
64 rv = EXIT_FAILURE;
65 continue;
66 }
67 if (!quiet)
68 warn_with_equals_no(reqs[n].name, reqs[n].value,
69 conf_files[reqs[n].srcidx], reqs[n].line);
70 if (verbose_trail)
71 print_trail(reqs[n].name, reqs[n].trail,
72 reqs[n].ntrail);
73 else
74 print_pair(conf_files[reqs[n].srcidx], reqs[n].name,
75 reqs[n].value);
76 }
77
78 return (rv);
79 }
80