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...)
This commit is contained in:
Rob Landley 2006-01-12 06:13:50 +00:00
parent 1c19deed17
commit 29e08ffcdf

View File

@ -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;
}