#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) {
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);
continue;
k = module_load_and_warn(ctx, l, true);
- if (k < 0 && r == 0)
+ if (k < 0 && r >= 0)
r = k;
}
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);
ctx = kmod_new(NULL, NULL);
if (!ctx) {
log_error("Failed to allocate memory for kmod.");
- goto finish;
+ return -ENOMEM;
}
kmod_load_resources(ctx);
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) {
}
}
-finish:
- strv_free(arg_proc_cmdline_modules);
-
- return r < 0 ? EXIT_FAILURE : EXIT_SUCCESS;
+ return r;
}
+
+DEFINE_MAIN_FUNCTION(run);