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 was genuinely broken at the time (not related to our build system): scripts/config/mkconfigs.c (2005-08-01 - 2006-10-05 arasi) uretilen bbconfigopts.h icine .config satirlarini kacissiz, ham newline'larla gömüyordu - gecerli C degildi, busybox'un kendi bb_mkdep araci bile parse edemiyordu (7d219aab7 ile duzeltildi, mkconfigs shell scripte cevrildi)
No binary (build failed)
—
(log yok)
| @@ -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; | |
| } | |