summaryrefslogtreecommitdiff
path: root/src/system-update-generator/system-update-generator.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/system-update-generator/system-update-generator.c')
-rw-r--r--src/system-update-generator/system-update-generator.c36
1 files changed, 13 insertions, 23 deletions
diff --git a/src/system-update-generator/system-update-generator.c b/src/system-update-generator/system-update-generator.c
index 0f77042f48..77e265d710 100644
--- a/src/system-update-generator/system-update-generator.c
+++ b/src/system-update-generator/system-update-generator.c
@@ -4,6 +4,7 @@
#include <unistd.h>
#include "fs-util.h"
+#include "generator.h"
#include "log.h"
#include "proc-cmdline.h"
#include "special.h"
@@ -14,7 +15,7 @@
* Implements the logic described in systemd.offline-updates(7).
*/
-static const char *arg_dest = "/tmp";
+static const char *arg_dest = NULL;
static int generate_symlink(void) {
const char *p = NULL;
@@ -50,31 +51,20 @@ static int parse_proc_cmdline_item(const char *key, const char *value, void *dat
return 0;
}
-int main(int argc, char *argv[]) {
- int r, k;
+static int run(const char *dest, const char *dest_early, const char *dest_late) {
+ int r;
- if (argc > 1 && argc != 4) {
- log_error("This program takes three or no arguments.");
- return EXIT_FAILURE;
- }
-
- if (argc > 1)
- arg_dest = argv[2];
-
- log_set_prohibit_ipc(true);
- log_set_target(LOG_TARGET_AUTO);
- log_parse_environment();
- log_open();
-
- umask(0022);
+ assert_se(arg_dest = dest_early);
r = generate_symlink();
+ if (r < 0)
+ return r;
- if (r > 0) {
- k = proc_cmdline_parse(parse_proc_cmdline_item, NULL, 0);
- if (k < 0)
- log_warning_errno(k, "Failed to parse kernel command line, ignoring: %m");
- }
+ r = proc_cmdline_parse(parse_proc_cmdline_item, NULL, 0);
+ if (r < 0)
+ log_warning_errno(r, "Failed to parse kernel command line, ignoring: %m");
- return r < 0 ? EXIT_FAILURE : EXIT_SUCCESS;
+ return 0;
}
+
+DEFINE_MAIN_GENERATOR_FUNCTION(run);