diff options
| author | Denis Vlasenko <vda.linux@googlemail.com> | 2009-04-14 21:23:33 +0000 |
|---|---|---|
| committer | Denis Vlasenko <vda.linux@googlemail.com> | 2009-04-14 21:23:33 +0000 |
| commit | 32a3d084d32dfc827ffa736959f4fe9834ef528c (patch) | |
| tree | d47f675f7ac137fd8f54b68f3a0bb59b75adba7e | |
| parent | 7223424815b2ce563553ff35342e84b4a14d8d8b (diff) | |
| download | busybox-w32-32a3d084d32dfc827ffa736959f4fe9834ef528c.tar.gz busybox-w32-32a3d084d32dfc827ffa736959f4fe9834ef528c.tar.bz2 busybox-w32-32a3d084d32dfc827ffa736959f4fe9834ef528c.zip | |
mdev: safer handling of $SUBSYSTEM in mdev -s
| -rw-r--r-- | util-linux/mdev.c | 14 |
1 files changed, 7 insertions, 7 deletions
diff --git a/util-linux/mdev.c b/util-linux/mdev.c index 0f7e082ba..2451cca05 100644 --- a/util-linux/mdev.c +++ b/util-linux/mdev.c | |||
| @@ -1,6 +1,5 @@ | |||
| 1 | /* vi: set sw=4 ts=4: */ | 1 | /* vi: set sw=4 ts=4: */ |
| 2 | /* | 2 | /* |
| 3 | * | ||
| 4 | * mdev - Mini udev for busybox | 3 | * mdev - Mini udev for busybox |
| 5 | * | 4 | * |
| 6 | * Copyright 2005 Rob Landley <rob@landley.net> | 5 | * Copyright 2005 Rob Landley <rob@landley.net> |
| @@ -8,7 +7,6 @@ | |||
| 8 | * | 7 | * |
| 9 | * Licensed under GPL version 2, see file LICENSE in this tarball for details. | 8 | * Licensed under GPL version 2, see file LICENSE in this tarball for details. |
| 10 | */ | 9 | */ |
| 11 | |||
| 12 | #include "libbb.h" | 10 | #include "libbb.h" |
| 13 | #include "xregex.h" | 11 | #include "xregex.h" |
| 14 | 12 | ||
| @@ -353,11 +351,13 @@ static int FAST_FUNC dirAction(const char *fileName UNUSED_PARAM, | |||
| 353 | void *userData UNUSED_PARAM, | 351 | void *userData UNUSED_PARAM, |
| 354 | int depth) | 352 | int depth) |
| 355 | { | 353 | { |
| 356 | /* Extract device subsystem -- the name of the directory under /sys/class/ */ | 354 | /* Extract device subsystem -- the name of the directory |
| 355 | * under /sys/class/ */ | ||
| 357 | if (1 == depth) { | 356 | if (1 == depth) { |
| 357 | free(subsystem); | ||
| 358 | subsystem = strrchr(fileName, '/'); | 358 | subsystem = strrchr(fileName, '/'); |
| 359 | if (subsystem) | 359 | if (subsystem) |
| 360 | subsystem++; | 360 | subsystem = xstrdup(subsystem + 1); |
| 361 | } | 361 | } |
| 362 | 362 | ||
| 363 | return (depth >= MAX_SYSFS_DEPTH ? SKIP : TRUE); | 363 | return (depth >= MAX_SYSFS_DEPTH ? SKIP : TRUE); |
| @@ -397,17 +397,17 @@ static void load_firmware(const char *const firmware, const char *const sysfs_pa | |||
| 397 | goto out; | 397 | goto out; |
| 398 | 398 | ||
| 399 | loading: | 399 | loading: |
| 400 | /* tell kernel we're loading by `echo 1 > /sys/$DEVPATH/loading` */ | 400 | /* tell kernel we're loading by "echo 1 > /sys/$DEVPATH/loading" */ |
| 401 | if (full_write(loading_fd, "1", 1) != 1) | 401 | if (full_write(loading_fd, "1", 1) != 1) |
| 402 | goto out; | 402 | goto out; |
| 403 | 403 | ||
| 404 | /* load firmware by `cat /lib/firmware/$FIRMWARE > /sys/$DEVPATH/data */ | 404 | /* load firmware into /sys/$DEVPATH/data */ |
| 405 | data_fd = open("data", O_WRONLY); | 405 | data_fd = open("data", O_WRONLY); |
| 406 | if (data_fd == -1) | 406 | if (data_fd == -1) |
| 407 | goto out; | 407 | goto out; |
| 408 | cnt = bb_copyfd_eof(firmware_fd, data_fd); | 408 | cnt = bb_copyfd_eof(firmware_fd, data_fd); |
| 409 | 409 | ||
| 410 | /* tell kernel result by `echo [0|-1] > /sys/$DEVPATH/loading` */ | 410 | /* tell kernel result by "echo [0|-1] > /sys/$DEVPATH/loading" */ |
| 411 | if (cnt > 0) | 411 | if (cnt > 0) |
| 412 | full_write(loading_fd, "0", 1); | 412 | full_write(loading_fd, "0", 1); |
| 413 | else | 413 | else |
