2 * udev_run_directory.c - directory multiplexer
4 * Copyright (C) 2005 Kay Sievers <kay@vrfy.org>
6 * This program is free software; you can redistribute it and/or modify it
7 * under the terms of the GNU General Public License as published by the
8 * Free Software Foundation version 2 of the License.
21 #include <sys/types.h>
25 #include "../../udev_utils.h"
26 #include "../../list.h"
27 #include "../../logging.h"
29 int run_directory(const char *dir, const char *suffix, const char *subsystem);
31 static int run_program(const char *filename, const char *subsystem)
35 dbg("running %s", filename);
40 execl(filename, filename, subsystem, NULL);
41 dbg("exec of child failed");
44 dbg("fork of child failed");
48 waitpid(pid, NULL, 0);
54 int run_directory(const char *dir, const char *suffix, const char *subsystem)
56 char dirname[NAME_SIZE];
57 struct name_entry *name_loop, *name_tmp;
61 snprintf(dirname, sizeof(dirname), "%s/%s", dir, subsystem);
62 dirname[sizeof(dirname)-1] = '\0';
63 dbg("looking at '%s'", dirname);
64 add_matching_files(&name_list, dirname, suffix);
67 snprintf(dirname, sizeof(dirname), "%s/default", dir);
68 dirname[sizeof(dirname)-1] = '\0';
69 dbg("looking at '%s'", dirname);
70 add_matching_files(&name_list, dirname, suffix);
72 list_for_each_entry_safe(name_loop, name_tmp, &name_list, node) {
73 run_program(name_loop->name, subsystem);
74 list_del(&name_loop->node);