[systemd-commits] src/shared src/systemctl

Lukas Nykryn lnykryn at kemper.freedesktop.org
Wed Aug 20 01:50:19 PDT 2014


 src/shared/install.c      |    6 ++++++
 src/systemctl/systemctl.c |    4 ++++
 2 files changed, 10 insertions(+)

New commits:
commit fdbdf6ec29bda40763d7d3e7bb2a63e2f5d60c4c
Author: Lukas Nykryn <lnykryn at redhat.com>
Date:   Tue Aug 19 20:53:29 2014 +0200

    systemctl: fail in the case that no unit files were found
    
    Previously systemctl died with message
    
    -bash-4.2# systemctl --root /rawhi list-unit-files
    (src/systemctl/systemctl.c:868) Out of memory.
    
    in the case that no unit files were found in the --root
    or the directory did not exist.
    
    So lets return ENOENT in the case that --root does not exist
    and empty list in the case that there are no unit files.

diff --git a/src/shared/install.c b/src/shared/install.c
index 0fe1371..03c7a9d 100644
--- a/src/shared/install.c
+++ b/src/shared/install.c
@@ -2044,6 +2044,12 @@ int unit_file_get_list(
         if (root_dir && scope != UNIT_FILE_SYSTEM)
                 return -EINVAL;
 
+        if (root_dir) {
+                r = access(root_dir, F_OK);
+                if (r < 0)
+                        return -errno;
+        }
+
         r = lookup_paths_init_from_scope(&paths, scope, root_dir);
         if (r < 0)
                 return r;
diff --git a/src/systemctl/systemctl.c b/src/systemctl/systemctl.c
index 36db652..072f615 100644
--- a/src/systemctl/systemctl.c
+++ b/src/systemctl/systemctl.c
@@ -1350,6 +1350,10 @@ static int list_unit_files(sd_bus *bus, char **args) {
                 }
 
                 n_units = hashmap_size(h);
+
+                if (n_units == 0)
+                        return 0;
+
                 units = new(UnitFileList, n_units);
                 if (!units) {
                         unit_file_list_free(h);



More information about the systemd-commits mailing list