diff options
author | Eric Andersen | 2004-01-06 00:07:17 +0000 |
---|---|---|
committer | Eric Andersen | 2004-01-06 00:07:17 +0000 |
commit | 9d65ab2beb0e418510a42f6802cf6daa1d7a2106 (patch) | |
tree | 583114d16b4d9a228fc624249eefd32b809868b0 /modutils/modprobe.c | |
parent | 66e21fd1616daefa903aeeb4d42e9ca50e4032ab (diff) | |
download | busybox-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/modprobe.c')
-rw-r--r-- | modutils/modprobe.c | 30 |
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] == '\\' ) |