]> git.ipfire.org Git - thirdparty/systemd.git/blobdiff - src/modules-load/modules-load.c
Merge pull request #11827 from keszybz/pkgconfig-variables
[thirdparty/systemd.git] / src / modules-load / modules-load.c
index 01d909ff191dfc6504ddd1206de1b1677d59b8e7..36bda3433ff39ba8dd28f103b3779cbfacbddabb 100644 (file)
 #include "fd-util.h"
 #include "fileio.h"
 #include "log.h"
+#include "main-func.h"
 #include "module-util.h"
+#include "pretty-print.h"
 #include "proc-cmdline.h"
 #include "string-util.h"
 #include "strv.h"
-#include "terminal-util.h"
 #include "util.h"
 
 static char **arg_proc_cmdline_modules = NULL;
-
 static const char conf_file_dirs[] = CONF_PATHS_NULSTR("modules-load.d");
 
+STATIC_DESTRUCTOR_REGISTER(arg_proc_cmdline_modules, strv_freep);
+
 static void systemd_kmod_log(void *data, int priority, const char *file, int line,
                              const char *fn, const char *format, va_list args) {
 
@@ -81,10 +83,10 @@ static int apply_file(struct kmod_ctx *ctx, const char *path, bool ignore_enoent
                 char *l;
                 int k;
 
-                r = read_line(f, LONG_LINE_MAX, &line);
-                if (r < 0)
-                        return log_error_errno(errno, "Failed to read file '%s': %m", path);
-                if (r == 0)
+                k = read_line(f, LONG_LINE_MAX, &line);
+                if (k < 0)
+                        return log_error_errno(k, "Failed to read file '%s': %m", path);
+                if (k == 0)
                         break;
 
                 l = strstrip(line);
@@ -94,7 +96,7 @@ static int apply_file(struct kmod_ctx *ctx, const char *path, bool ignore_enoent
                         continue;
 
                 k = module_load_and_warn(ctx, l, true);
-                if (k < 0 && r == 0)
+                if (k < 0 && r >= 0)
                         r = k;
         }
 
@@ -158,17 +160,15 @@ static int parse_argv(int argc, char *argv[]) {
         return 1;
 }
 
-int main(int argc, char *argv[]) {
-        int r, k;
+static int run(int argc, char *argv[]) {
         _cleanup_(kmod_unrefp) struct kmod_ctx *ctx = NULL;
+        int r, k;
 
         r = parse_argv(argc, argv);
         if (r <= 0)
-                return r < 0 ? EXIT_FAILURE : EXIT_SUCCESS;
+                return r;
 
-        log_set_target(LOG_TARGET_AUTO);
-        log_parse_environment();
-        log_open();
+        log_setup_service();
 
         umask(0022);
 
@@ -179,7 +179,7 @@ int main(int argc, char *argv[]) {
         ctx = kmod_new(NULL, NULL);
         if (!ctx) {
                 log_error("Failed to allocate memory for kmod.");
-                goto finish;
+                return -ENOMEM;
         }
 
         kmod_load_resources(ctx);
@@ -211,7 +211,7 @@ int main(int argc, char *argv[]) {
                         log_error_errno(k, "Failed to enumerate modules-load.d files: %m");
                         if (r == 0)
                                 r = k;
-                        goto finish;
+                        return r;
                 }
 
                 STRV_FOREACH(fn, files) {
@@ -221,8 +221,7 @@ int main(int argc, char *argv[]) {
                 }
         }
 
-finish:
-        strv_free(arg_proc_cmdline_modules);
-
-        return r < 0 ? EXIT_FAILURE : EXIT_SUCCESS;
+        return r;
 }
+
+DEFINE_MAIN_FUNCTION(run);