X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=src%2Fsystem-update-generator%2Fsystem-update-generator.c;h=13b8a0c426393819e2031d110a8a5587559503fe;hp=0cfccfb494bc3a96a4d4544cc2ade813ab408b66;hb=c79bb9e4e2e5b96b2ae2c432bf8b0ff9674fce60;hpb=d360705f0f1262d49cccb6507abeafb7cfb5bbe0 diff --git a/src/system-update-generator/system-update-generator.c b/src/system-update-generator/system-update-generator.c index 0cfccfb49..13b8a0c42 100644 --- a/src/system-update-generator/system-update-generator.c +++ b/src/system-update-generator/system-update-generator.c @@ -27,11 +27,16 @@ #include "unit-name.h" #include "path-util.h" +/* + * Implements the logic described in + * http://freedesktop.org/wiki/Software/systemd/SystemUpdates + */ + static const char *arg_dest = "/tmp"; static int generate_symlink(void) { struct stat st; - char *p; + char _cleanup_free_ *p = NULL; if (lstat("/system-update", &st) < 0) { if (errno == ENOENT) @@ -42,34 +47,29 @@ static int generate_symlink(void) { } p = strappend(arg_dest, "/default.target"); - if (!p) { - log_error("Out of memory."); - return -ENOMEM; - } + if (!p) + return log_oom(); if (symlink(SYSTEM_DATA_UNIT_PATH "/system-update.target", p) < 0) { - free(p); - log_error("Failed to create symlink: %m"); + log_error("Failed to create symlink %s: %m", p); return -errno; } - free(p); - return 0; } int main(int argc, char *argv[]) { int r; - if (argc > 2) { - log_error("This program takes one or no arguments."); + if (argc > 1 && argc != 4) { + log_error("This program takes three or no arguments."); return EXIT_FAILURE; } if (argc > 1) - arg_dest = argv[1]; + arg_dest = argv[2]; - log_set_target(LOG_TARGET_AUTO); + log_set_target(LOG_TARGET_SAFE); log_parse_environment(); log_open();