]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
ac-power: define main through macro
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Fri, 16 Nov 2018 09:39:57 +0000 (10:39 +0100)
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Sat, 17 Nov 2018 08:13:35 +0000 (09:13 +0100)
I decided to use a separate definition for this because it's too easy to return
positive from functions which don't need this distinction and only return
negative on error and success otherwise.

src/ac-power/ac-power.c
src/basic/macro.h

index 7ca72ef5f59d0fd04d43e7aebd4c1cad21189cdd..2d8cbb985feefe163a136ccef4eb2743bce63bee 100644 (file)
@@ -63,7 +63,7 @@ static int parse_argv(int argc, char *argv[]) {
         return 1;
 }
 
-int main(int argc, char *argv[]) {
+static int run(int argc, char *argv[]) {
         int r;
 
         /* This is mostly intended to be used for scripts which want
@@ -74,17 +74,16 @@ int main(int argc, char *argv[]) {
 
         r = parse_argv(argc, argv);
         if (r <= 0)
-                goto finish;
+                return r;
 
         r = on_ac_power();
-        if (r < 0) {
-                log_error_errno(r, "Failed to read AC status: %m");
-                goto finish;
-        }
+        if (r < 0)
+                return log_error_errno(r, "Failed to read AC status: %m");
 
         if (arg_verbose)
                 puts(yes_no(r));
 
-finish:
-        return r < 0 ? EXIT_FAILURE : !r;
+        return r == 0;
 }
+
+DEFINE_MAIN_FUNCTION_WITH_POSITIVE_FAILURE(run);
index cf41a5ee8a1f8446f10f8d21c8b1ffdae55478c4..dedcba22e7e1cffd0c9763ea2d2f5d125c8b6571 100644 (file)
@@ -515,4 +515,14 @@ static inline int __coverity_check__(int condition) {
                 return r < 0 ? EXIT_FAILURE : EXIT_SUCCESS;             \
         }
 
+/* Zero is mapped to EXIT_SUCCESS, and both negative and positive values
+ * are mapped to EXIT_FAILURE.
+ * Note: this means "true" maps to EXIT_FAILURE. */
+#define DEFINE_MAIN_FUNCTION_WITH_POSITIVE_FAILURE(impl)                \
+        int main(int argc, char *argv[]) {                              \
+                int r;                                                  \
+                r = impl(argc, argv);                                   \
+                return r != 0 ? EXIT_FAILURE : EXIT_SUCCESS;            \
+        }
+
 #include "log.h"