Hi all,
waow! there was change, it is well even if my patch was not chosen to
improve mdev !?

in mdev.c (svn):
>#define MAX_SYSFS_DEPTH 3 /* prevent infinite loops in /sys symlinks */
>...
>static int fileAction(const char *fileName, struct stat *statbuf, void 
>*userData, int depth)
>...
>static int dirAction(const char *fileName, struct stat *statbuf, void 
>*userData, int depth)
>...
>               root_minor = minor(st.st_dev);
>
>               recursive_action("/sys/block",
>                       ACTION_RECURSE | ACTION_FOLLOWLINKS,
>                       fileAction, dirAction, temp, 0);
>
>               recursive_action("/sys/class",
>                       ACTION_RECURSE | ACTION_FOLLOWLINKS,
>                       fileAction, dirAction, temp, 0);
>
>       /* Hotplug */

if I understands well, mdev must make 3 recursions in each first
sysmlink !!!
I had chosen this solution: NO ACTION_FOLLOWLINKS, NO SUBSYSTEM

>static int fileAction(const char *fileName, struct stat *statbuf, void 
>*userData, int depth)
>{
>       char *last;
>
>       last = bb_get_last_path_component((char *)fileName);
>
>       if (S_ISLNK(statbuf->st_mode) && strcmp(last, "subsystem")) {
>               RESERVE_CONFIG_BUFFER(device_path, PATH_MAX);
>
>               realpath(fileName, device_path);
>               make_device(device_path, 0);
>               free(device_path);
>               return TRUE;
>       }
>
>       if (!strcmp(last, "dev")) {
>               char *tmp_name;
>
>               tmp_name = strndupa(fileName, strlen(fileName) - 4);
>               make_device(tmp_name, 0);
>               return TRUE;
>       }
>
>       return FALSE;
>}
>...
>int mdev_main(int argc, char **argv)
>...
>               root_major = major(st.st_dev);
>               root_minor = minor(st.st_dev);
>               strcpy(temp, "/sys/block");
>               recursive_action(temp, ACTION_RECURSE, fileAction, 0, NULL, 0);
>               strcpy(temp, "/sys/class");
>               recursive_action(temp, ACTION_RECURSE, fileAction, 0, NULL, 0);

example (kernel >= 2.6.20 without CONFIG_SYSFS_DEPRECATED [= n]):
/sys/class/sound/timer : timer is a symlink towards 
../../devices/virtual/sound/timer
realpath(symlink, device_path);
device_path = /sys/devices/virtual/sound/timer
make_device(/sys/devices/virtual/sound/timer, 0);

I believe that this is quicker than to do 3 recursions.

mdev (svn) cannot create devices in directories, neither subdirs  nor symlinks



>void load_firmware(const char * const firmware, const char * const sysfs_path)

Really great work for load_firmware function.

Thanks

Malek (Souf)


_______________________________________________
busybox mailing list
[email protected]
http://busybox.net/cgi-bin/mailman/listinfo/busybox

Reply via email to