aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--util-linux/mdev.c43
1 files changed, 29 insertions, 14 deletions
diff --git a/util-linux/mdev.c b/util-linux/mdev.c
index 10369ded3..135843581 100644
--- a/util-linux/mdev.c
+++ b/util-linux/mdev.c
@@ -18,6 +18,7 @@
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>
+#include <stdlib.h>
#include "busybox.h"
#include "xregex.h"
@@ -209,20 +210,34 @@ static void find_dev(char *path)
int mdev_main(int argc, char *argv[])
{
- if (argc > 1) {
- if (argc == 2 && !strcmp(argv[1],"-s")) {
- RESERVE_CONFIG_BUFFER(temp,PATH_MAX);
- strcpy(temp,"/sys/block");
- find_dev(temp);
- strcpy(temp,"/sys/class");
- find_dev(temp);
- if(ENABLE_FEATURE_CLEAN_UP)
- RELEASE_CONFIG_BUFFER(temp);
- return 0;
- } else bb_show_usage();
- }
-
-/* hotplug support goes here */
+ char *action;
+ char *env_path;
+ RESERVE_CONFIG_BUFFER(temp,PATH_MAX);
+
+ /* Scan */
+ if (argc == 2 && !strcmp(argv[1],"-s")) {
+ strcpy(temp,"/sys/block");
+ find_dev(temp);
+ strcpy(temp,"/sys/class");
+ find_dev(temp);
+
+ /* Hotplug */
+
+ } else {
+ action = getenv("ACTION");
+ env_path = getenv("DEVPATH");
+ if (!action || !env_path) bb_show_usage();
+
+ if (!strcmp(action, "add")) {
+ sprintf(temp, "/sys%s", env_path);
+ make_device(temp);
+ } else if (!strcmp(action, "remove")) {
+ sprintf(temp, "%s/%s", DEV_PATH, strrchr(env_path, '/') + 1);
+ unlink(temp);
+ }
+ }
+
+ if(ENABLE_FEATURE_CLEAN_UP) RELEASE_CONFIG_BUFFER(temp);
return 0;
}