aboutsummaryrefslogtreecommitdiff
path: root/util-linux/mdev.c
diff options
context:
space:
mode:
authorRob Landley <rob@landley.net>2006-01-12 06:13:50 +0000
committerRob Landley <rob@landley.net>2006-01-12 06:13:50 +0000
commit29e08ffcdf8de6eb57b280d587796642259fc66e (patch)
treeffdf21a624a71e92c1db8e3a917f5fcf18c2f79b /util-linux/mdev.c
parent1c19deed17f21792fcc485038b6173b9b4c186f1 (diff)
downloadbusybox-w32-29e08ffcdf8de6eb57b280d587796642259fc66e.tar.gz
busybox-w32-29e08ffcdf8de6eb57b280d587796642259fc66e.tar.bz2
busybox-w32-29e08ffcdf8de6eb57b280d587796642259fc66e.zip
Frank Sorenson added hotplug support to mdev. (I tweaked it a bit. Need
to come up with a test suite for all the stuff that requires root access. Something involving User Mode Linux or QEMU, probably...)
Diffstat (limited to 'util-linux/mdev.c')
-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 @@
18#include <sys/stat.h> 18#include <sys/stat.h>
19#include <sys/types.h> 19#include <sys/types.h>
20#include <unistd.h> 20#include <unistd.h>
21#include <stdlib.h>
21#include "busybox.h" 22#include "busybox.h"
22#include "xregex.h" 23#include "xregex.h"
23 24
@@ -209,20 +210,34 @@ static void find_dev(char *path)
209 210
210int mdev_main(int argc, char *argv[]) 211int mdev_main(int argc, char *argv[])
211{ 212{
212 if (argc > 1) { 213 char *action;
213 if (argc == 2 && !strcmp(argv[1],"-s")) { 214 char *env_path;
214 RESERVE_CONFIG_BUFFER(temp,PATH_MAX); 215 RESERVE_CONFIG_BUFFER(temp,PATH_MAX);
215 strcpy(temp,"/sys/block"); 216
216 find_dev(temp); 217 /* Scan */
217 strcpy(temp,"/sys/class");
218 find_dev(temp);
219 if(ENABLE_FEATURE_CLEAN_UP)
220 RELEASE_CONFIG_BUFFER(temp);
221 return 0;
222 } else bb_show_usage();
223 }
224
225/* hotplug support goes here */
226 218
219 if (argc == 2 && !strcmp(argv[1],"-s")) {
220 strcpy(temp,"/sys/block");
221 find_dev(temp);
222 strcpy(temp,"/sys/class");
223 find_dev(temp);
224
225 /* Hotplug */
226
227 } else {
228 action = getenv("ACTION");
229 env_path = getenv("DEVPATH");
230 if (!action || !env_path) bb_show_usage();
231
232 if (!strcmp(action, "add")) {
233 sprintf(temp, "/sys%s", env_path);
234 make_device(temp);
235 } else if (!strcmp(action, "remove")) {
236 sprintf(temp, "%s/%s", DEV_PATH, strrchr(env_path, '/') + 1);
237 unlink(temp);
238 }
239 }
240
241 if(ENABLE_FEATURE_CLEAN_UP) RELEASE_CONFIG_BUFFER(temp);
227 return 0; 242 return 0;
228} 243}