chiark / gitweb /
write_cd_rules: identity-based persistence
[elogind.git] / extras / run_directory / run_directory.c
index e6c6173ecab6a3a5fdc0678ba8d807d4be9b4e0e..c715ca6bd337dcd7fe6032e794bcc1e5d7ac8131 100644 (file)
 #include <sys/wait.h>
 #include <sys/stat.h>
 
-#include "../../udev_utils.h"
-#include "../../list.h"
-#include "../../logging.h"
+#include "../../udev.h"
+#include "run_directory.h"
 
-int run_directory(const char *dir, const char *suffix, const char *subsystem);
-
-static int run_program(const char *filename, const char *subsystem)
+static int exec_program(const char *filename, const char *subsystem)
 {
        pid_t pid;
 
@@ -53,24 +50,21 @@ static int run_program(const char *filename, const char *subsystem)
 
 int run_directory(const char *dir, const char *suffix, const char *subsystem)
 {
-       char dirname[NAME_SIZE];
        struct name_entry *name_loop, *name_tmp;
+       struct stat buf;
        LIST_HEAD(name_list);
 
-       if (subsystem) {
-               snprintf(dirname, sizeof(dirname), "%s/%s", dir, subsystem);
-               dirname[sizeof(dirname)-1] = '\0';
-               dbg("looking at '%s'", dirname);
-               add_matching_files(&name_list, dirname, suffix);
+       dbg("looking at '%s'", dir);
+
+       if (stat(dir, &buf) != 0) {
+               dbg("directory '%s' not found", dir);
+               return 0;
        }
 
-       snprintf(dirname, sizeof(dirname), "%s/default", dir);
-       dirname[sizeof(dirname)-1] = '\0';
-       dbg("looking at '%s'", dirname);
-       add_matching_files(&name_list, dirname, suffix);
+       add_matching_files(&name_list, dir, suffix);
 
        list_for_each_entry_safe(name_loop, name_tmp, &name_list, node) {
-               run_program(name_loop->name, subsystem);
+               exec_program(name_loop->name, subsystem);
                list_del(&name_loop->node);
        }