chiark / gitweb /
utils: show help blurb when run without any arguments
[elogind.git] / src / install.c
index c3dbe8b..f56c072 100644 (file)
@@ -59,12 +59,13 @@ Hashmap *will_install = NULL, *have_installed = NULL;
 
 static int help(void) {
 
-        printf("%s [options]\n\n"
+        printf("%s [OPTIONS...] {COMMAND} ...\n\n"
+               "Install init system units.\n\n"
                "  -h --help        Show this help\n"
                "     --force       Override existing links\n"
                "     --system      Install into system\n"
                "     --session     Install into session\n"
-               "     --global      Install into all sessions\n"
+               "     --global      Install into all sessions\n\n"
                "Commands:\n"
                "  enable [NAME...]    Enable one or more units\n"
                "  disable [NAME...]   Disable one or more units\n"
@@ -131,7 +132,7 @@ static int parse_argv(int argc, char *argv[]) {
         }
 
         if (optind >= argc) {
-                log_error("Missing verb.");
+                help();
                 return -EINVAL;
         }
 
@@ -142,7 +143,7 @@ static int parse_argv(int argc, char *argv[]) {
         else if (streq(argv[optind], "test"))
                 arg_action = ACTION_TEST;
         else {
-                log_error("Unknown verb %s", argv[optind]);
+                log_error("Unknown verb %s.", argv[optind]);
                 return -EINVAL;
         }
 
@@ -180,9 +181,6 @@ static bool unit_name_valid(const char *name) {
         /* This is a minimal version of unit_name_valid() from
          * unit-name.c */
 
-        if (strchr(name, '/'))
-                return false;
-
         if (!*name)
                 return false;
 
@@ -385,6 +383,9 @@ static int install_info_symlink_alias(InstallInfo *i, const char *config_path) {
 
                 if ((r = create_symlink(i->path, alias_path)) != 0)
                         goto finish;
+
+                if (arg_action == ACTION_DISABLE)
+                        rmdir_parents(alias_path, config_path);
         }
 
         r = 0;
@@ -421,15 +422,8 @@ static int install_info_symlink_wants(InstallInfo *i, const char *config_path) {
                 if ((r = create_symlink(i->path, alias_path)) != 0)
                         goto finish;
 
-                if (arg_action == ACTION_DISABLE) {
-                        char *t;
-
-                        /* Try to remove .wants dir if we don't need it anymore */
-                        if (asprintf(&t, "%s/%s.wants", config_path, *s) >= 0) {
-                                rmdir(t);
-                                free(t);
-                        }
-                }
+                if (arg_action == ACTION_DISABLE)
+                        rmdir_parents(alias_path, config_path);
         }
 
         r = 0;
@@ -532,8 +526,6 @@ int main(int argc, char *argv[]) {
 
         zero(paths);
 
-        log_set_target(LOG_TARGET_CONSOLE);
-        log_set_max_level(LOG_INFO);
         log_parse_environment();
 
         if ((r = parse_argv(argc, argv)) < 0)
@@ -543,7 +535,7 @@ int main(int argc, char *argv[]) {
                 goto finish;
         }
 
-        if ((r = lookup_paths_init(&paths, arg_where == WHERE_SYSTEM ? MANAGER_INIT : MANAGER_SESSION)) < 0) {
+        if ((r = lookup_paths_init(&paths, arg_where == WHERE_SYSTEM ? MANAGER_SYSTEM : MANAGER_SESSION)) < 0) {
                 log_error("Failed to determine lookup paths: %s", strerror(-r));
                 goto finish;
         }