summaryrefslogtreecommitdiff
path: root/modutils
diff options
context:
space:
mode:
authorEric Andersen2004-01-06 00:07:17 +0000
committerEric Andersen2004-01-06 00:07:17 +0000
commit9d65ab2beb0e418510a42f6802cf6daa1d7a2106 (patch)
tree583114d16b4d9a228fc624249eefd32b809868b0 /modutils
parent66e21fd1616daefa903aeeb4d42e9ca50e4032ab (diff)
downloadbusybox-9d65ab2beb0e418510a42f6802cf6daa1d7a2106.zip
busybox-9d65ab2beb0e418510a42f6802cf6daa1d7a2106.tar.gz
Woody Suwalski writes:
accept more then 1 dependency per modules.dep line. Also white space cleanup... I think that parsing still breaks sometimes, but is mostly functional now.
Diffstat (limited to 'modutils')
-rw-r--r--modutils/modprobe.c30
1 files changed, 22 insertions, 8 deletions
diff --git a/modutils/modprobe.c b/modutils/modprobe.c
index e300c0d..1e4d24e 100644
--- a/modutils/modprobe.c
+++ b/modutils/modprobe.c
@@ -197,7 +197,6 @@ static struct dep_t *build_dep ( void )
current-> m_next = 0;
//printf ( "%s:\n", mod );
-
p = col + 1;
}
else
@@ -206,15 +205,30 @@ static struct dep_t *build_dep ( void )
else
p = buffer;
+ while ( p && *p && isblank(*p))
+ p++;
+
if ( p && *p ) {
char *end = &buffer [l-1];
- char *deps = strrchr ( end, '/' );
+ char *deps;
char *dep;
+ char *next;
int ext = 0;
while ( isblank ( *end ) || ( *end == '\\' ))
end--;
+ do
+ {
+ next = strchr (p, ' ' );
+ if (next)
+ {
+ *next = 0;
+ next--;
+ }
+ else
+ next = end;
+
deps = strrchr ( p, '/' );
if ( !deps || ( deps < p )) {
@@ -227,25 +241,25 @@ static struct dep_t *build_dep ( void )
deps++;
#if defined(CONFIG_FEATURE_2_6_MODULES)
- if ((k_version > 4) && ( *(end-2) == '.' ) && *(end-1) == 'k' &&
- ( *end == 'o' ))
+ if ((k_version > 4) && ( *(next-2) == '.' ) && *(next-1) == 'k' &&
+ ( *next == 'o' ))
ext = 3;
else
#endif
- if (( *(end-1) == '.' ) && ( *end == 'o' ))
+ if (( *(next-1) == '.' ) && ( *next == 'o' ))
ext = 2;
/* Cope with blank lines */
- if ((end-deps-ext+1) <= 0)
+ if ((next-deps-ext+1) <= 0)
continue;
-
- dep = bb_xstrndup ( deps, end - deps - ext + 1 );
+ dep = bb_xstrndup ( deps, next - deps - ext + 1 );
current-> m_depcnt++;
current-> m_deparr = (char **) xrealloc ( current-> m_deparr, sizeof ( char *) * current-> m_depcnt );
current-> m_deparr [current-> m_depcnt - 1] = dep;
//printf ( " %d) %s\n", current-> m_depcnt, current-> m_deparr [current-> m_depcnt -1] );
+ } while (next < end);
}
if ( buffer [l-1] == '\\' )