Branch data Line data Source code
1 : : /* SPDX-License-Identifier: LGPL-2.1+ */
2 : :
3 : : #include <getopt.h>
4 : :
5 : : #include "main-func.h"
6 : : #include "util.h"
7 : :
8 : : static bool arg_verbose = false;
9 : :
10 : 0 : static void help(void) {
11 : 0 : printf("%s\n\n"
12 : : "Report whether we are connected to an external power source.\n\n"
13 : : " -h --help Show this help\n"
14 : : " --version Show package version\n"
15 : : " -v --verbose Show state as text\n"
16 : : , program_invocation_short_name);
17 : 0 : }
18 : :
19 : 0 : static int parse_argv(int argc, char *argv[]) {
20 : :
21 : : enum {
22 : : ARG_VERSION = 0x100,
23 : : };
24 : :
25 : : static const struct option options[] = {
26 : : { "help", no_argument, NULL, 'h' },
27 : : { "version", no_argument, NULL, ARG_VERSION },
28 : : { "verbose", no_argument, NULL, 'v' },
29 : : {}
30 : : };
31 : :
32 : : int c;
33 : :
34 [ # # ]: 0 : assert(argc >= 0);
35 [ # # ]: 0 : assert(argv);
36 : :
37 [ # # ]: 0 : while ((c = getopt_long(argc, argv, "hv", options, NULL)) >= 0)
38 : :
39 [ # # # # : 0 : switch (c) {
# ]
40 : :
41 : 0 : case 'h':
42 : 0 : help();
43 : 0 : return 0;
44 : :
45 : 0 : case ARG_VERSION:
46 : 0 : return version();
47 : :
48 : 0 : case 'v':
49 : 0 : arg_verbose = true;
50 : 0 : break;
51 : :
52 : 0 : case '?':
53 : 0 : return -EINVAL;
54 : :
55 : 0 : default:
56 : 0 : assert_not_reached("Unhandled option");
57 : : }
58 : :
59 [ # # ]: 0 : if (optind < argc)
60 [ # # ]: 0 : return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
61 : : "%s takes no arguments.",
62 : : program_invocation_short_name);
63 : :
64 : 0 : return 1;
65 : : }
66 : :
67 : 0 : static int run(int argc, char *argv[]) {
68 : : int r;
69 : :
70 : : /* This is mostly intended to be used for scripts which want
71 : : * to detect whether AC power is plugged in or not. */
72 : :
73 : 0 : log_parse_environment();
74 : 0 : log_open();
75 : :
76 : 0 : r = parse_argv(argc, argv);
77 [ # # ]: 0 : if (r <= 0)
78 : 0 : return r;
79 : :
80 : 0 : r = on_ac_power();
81 [ # # ]: 0 : if (r < 0)
82 [ # # ]: 0 : return log_error_errno(r, "Failed to read AC status: %m");
83 : :
84 [ # # ]: 0 : if (arg_verbose)
85 : 0 : puts(yes_no(r));
86 : :
87 : 0 : return r == 0;
88 : : }
89 : :
90 [ # # ]: 0 : DEFINE_MAIN_FUNCTION_WITH_POSITIVE_FAILURE(run);
|