X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fsystem-update-generator%2Fsystem-update-generator.c;h=455a84109bdb3c4099a7ac61f1889709d0da2bb6;hb=79b1f37d95f08fe7620b071eec51d2810ed077c9;hp=f4e8dafebd9bdb3986e76c7f4dccfb3ebff82ead;hpb=a6903061530cac5fbaa99a080a93221c02c349f9;p=elogind.git diff --git a/src/system-update-generator/system-update-generator.c b/src/system-update-generator/system-update-generator.c index f4e8dafeb..455a84109 100644 --- a/src/system-update-generator/system-update-generator.c +++ b/src/system-update-generator/system-update-generator.c @@ -35,30 +35,19 @@ static const char *arg_dest = "/tmp"; static int generate_symlink(void) { - struct stat st; - char *p; + const char *p = NULL; - if (lstat("/system-update", &st) < 0) { + if (laccess("/system-update", F_OK) < 0) { if (errno == ENOENT) return 0; - log_error("Failed to check for system update: %m"); + log_error_errno(errno, "Failed to check for system update: %m"); return -EINVAL; } - p = strappend(arg_dest, "/default.target"); - if (!p) { - log_error("Out of memory."); - return -ENOMEM; - } - - if (symlink(SYSTEM_DATA_UNIT_PATH "/system-update.target", p) < 0) { - free(p); - log_error("Failed to create symlink: %m"); - return -errno; - } - - free(p); + p = strappenda(arg_dest, "/default.target"); + if (symlink(SYSTEM_DATA_UNIT_PATH "/system-update.target", p) < 0) + return log_error_errno(errno, "Failed to create symlink %s: %m", p); return 0; } @@ -66,13 +55,13 @@ static int generate_symlink(void) { 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_SAFE); log_parse_environment();