]> git.proxmox.com Git - systemd.git/blame - src/ac-power/ac-power.c
New upstream version 240
[systemd.git] / src / ac-power / ac-power.c
CommitLineData
52ad194e 1/* SPDX-License-Identifier: LGPL-2.1+ */
663996b3 2
b012e921 3#include <getopt.h>
663996b3 4
6e866b33 5#include "main-func.h"
b012e921 6#include "util.h"
663996b3 7
b012e921 8static bool arg_verbose = false;
663996b3 9
b012e921
MB
10static void help(void) {
11 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}
663996b3 18
b012e921
MB
19static 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 assert(argc >= 0);
35 assert(argv);
36
37 while ((c = getopt_long(argc, argv, "hv", options, NULL)) >= 0)
38
39 switch (c) {
40
41 case 'h':
42 help();
43 return 0;
44
45 case ARG_VERSION:
46 return version();
47
48 case 'v':
49 arg_verbose = true;
50 break;
51
52 case '?':
53 return -EINVAL;
54
55 default:
56 assert_not_reached("Unhandled option");
57 }
58
6e866b33
MB
59 if (optind < argc)
60 return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
61 "%s takes no arguments.",
62 program_invocation_short_name);
b012e921
MB
63
64 return 1;
65}
663996b3 66
6e866b33 67static int run(int argc, char *argv[]) {
663996b3
MS
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
b012e921
MB
73 log_parse_environment();
74 log_open();
75
76 r = parse_argv(argc, argv);
77 if (r <= 0)
6e866b33 78 return r;
b012e921 79
663996b3 80 r = on_ac_power();
6e866b33
MB
81 if (r < 0)
82 return log_error_errno(r, "Failed to read AC status: %m");
663996b3 83
b012e921
MB
84 if (arg_verbose)
85 puts(yes_no(r));
86
6e866b33 87 return r == 0;
663996b3 88}
6e866b33
MB
89
90DEFINE_MAIN_FUNCTION_WITH_POSITIVE_FAILURE(run);