X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=src%2Fgetty-generator%2Fgetty-generator.c;h=4b7a60a4ecef0da55a5302df22cedf2c9da82be9;hp=b2e4f52c3ca88ab55b0f051021c8d87d79632a60;hb=c79bb9e4e2e5b96b2ae2c432bf8b0ff9674fce60;hpb=a6903061530cac5fbaa99a080a93221c02c349f9 diff --git a/src/getty-generator/getty-generator.c b/src/getty-generator/getty-generator.c index b2e4f52c3..4b7a60a4e 100644 --- a/src/getty-generator/getty-generator.c +++ b/src/getty-generator/getty-generator.c @@ -28,6 +28,7 @@ #include "mkdir.h" #include "unit-name.h" #include "virt.h" +#include "fileio.h" static const char *arg_dest = "/tmp"; @@ -38,16 +39,15 @@ static int add_symlink(const char *fservice, const char *tservice) { assert(fservice); assert(tservice); - asprintf(&from, SYSTEM_DATA_UNIT_PATH "/%s", fservice); - asprintf(&to, "%s/getty.target.wants/%s", arg_dest, tservice); + from = strappend(SYSTEM_DATA_UNIT_PATH "/", fservice); + to = strjoin(arg_dest,"/getty.target.wants/", tservice, NULL); if (!from || !to) { - log_error("Out of memory"); - r = -ENOMEM; + r = log_oom(); goto finish; } - mkdir_parents(to, 0755); + mkdir_parents_label(to, 0755); r = symlink(from, to); if (r < 0) { @@ -55,7 +55,7 @@ static int add_symlink(const char *fservice, const char *tservice) { /* In case console=hvc0 is passed this will very likely result in EEXIST */ r = 0; else { - log_error("Failed to create symlink from %s to %s: %m", from, to); + log_error("Failed to create symlink %s: %m", to); r = -errno; } } @@ -77,10 +77,8 @@ static int add_serial_getty(const char *tty) { log_debug("Automatically adding serial getty for /dev/%s.", tty); n = unit_name_replace_instance("serial-getty@.service", tty); - if (!n) { - log_error("Out of memory"); - return -ENOMEM; - } + if (!n) + return log_oom(); r = add_symlink("serial-getty@.service", n); free(n); @@ -99,20 +97,20 @@ int main(int argc, char *argv[]) { char *active; const char *j; - 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]; + log_set_target(LOG_TARGET_SAFE); log_parse_environment(); log_open(); umask(0022); - if (argc > 1) - arg_dest = argv[1]; - if (detect_container(NULL) > 0) { log_debug("Automatically adding console shell."); @@ -134,7 +132,7 @@ int main(int argc, char *argv[]) { /* Automatically add in a serial getty on the kernel * console */ - if (tty_is_vc(tty)) + if (isempty(tty) || tty_is_vc(tty)) free(active); else { int k; @@ -160,7 +158,7 @@ int main(int argc, char *argv[]) { int k; if (asprintf(&p, "/sys/class/tty/%s", j) < 0) { - log_error("Out of memory"); + log_oom(); r = EXIT_FAILURE; goto finish; }