summaryrefslogtreecommitdiffstats
path: root/src/ac-power
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2018-03-21 12:52:18 +0100
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>2018-03-21 12:52:18 +0100
commited47df8967f68e28ad965f256919583874ecd6d4 (patch)
tree15d58d983af3acaeae3e4ea7fc14c962299d10f1 /src/ac-power
parentMerge pull request #8508 from poettering/more-cocci (diff)
downloadsystemd-ed47df8967f68e28ad965f256919583874ecd6d4.tar.xz
systemd-ed47df8967f68e28ad965f256919583874ecd6d4.zip
ac-power: add simple getopt() argument parsing to systemd-ac-power (#8516)
We should probably do that for all our tools, hence fill in this gap here.
Diffstat (limited to 'src/ac-power')
-rw-r--r--src/ac-power/ac-power.c76
1 files changed, 74 insertions, 2 deletions
diff --git a/src/ac-power/ac-power.c b/src/ac-power/ac-power.c
index 6d3172d5c1..039ebd1ed7 100644
--- a/src/ac-power/ac-power.c
+++ b/src/ac-power/ac-power.c
@@ -18,19 +18,91 @@
along with systemd; If not, see <http://www.gnu.org/licenses/>.
***/
+#include <getopt.h>
+
#include "util.h"
+static bool arg_verbose = false;
+
+static void help(void) {
+ printf("%s\n\n"
+ "Report whether we are connected to an external power source.\n\n"
+ " -h --help Show this help\n"
+ " --version Show package version\n"
+ " -v --verbose Show state as text\n"
+ , program_invocation_short_name);
+}
+
+static int parse_argv(int argc, char *argv[]) {
+
+ enum {
+ ARG_VERSION = 0x100,
+ };
+
+ static const struct option options[] = {
+ { "help", no_argument, NULL, 'h' },
+ { "version", no_argument, NULL, ARG_VERSION },
+ { "verbose", no_argument, NULL, 'v' },
+ {}
+ };
+
+ int c;
+
+ assert(argc >= 0);
+ assert(argv);
+
+ while ((c = getopt_long(argc, argv, "hv", options, NULL)) >= 0)
+
+ switch (c) {
+
+ case 'h':
+ help();
+ return 0;
+
+ case ARG_VERSION:
+ return version();
+
+ case 'v':
+ arg_verbose = true;
+ break;
+
+ case '?':
+ return -EINVAL;
+
+ default:
+ assert_not_reached("Unhandled option");
+ }
+
+ if (optind < argc) {
+ log_error("%s takes no arguments.", program_invocation_short_name);
+ return -EINVAL;
+ }
+
+ return 1;
+}
+
int main(int argc, char *argv[]) {
int r;
/* This is mostly intended to be used for scripts which want
* to detect whether AC power is plugged in or not. */
+ log_parse_environment();
+ log_open();
+
+ r = parse_argv(argc, argv);
+ if (r <= 0)
+ goto finish;
+
r = on_ac_power();
if (r < 0) {
log_error_errno(r, "Failed to read AC status: %m");
- return EXIT_FAILURE;
+ goto finish;
}
- return r != 0 ? EXIT_SUCCESS : EXIT_FAILURE;
+ if (arg_verbose)
+ puts(yes_no(r));
+
+finish:
+ return r < 0 ? EXIT_FAILURE : !r;
}