Woody Suwalski writes:
authorEric Andersen <andersen@codepoet.org>
Tue, 6 Jan 2004 00:07:17 +0000 (00:07 -0000)
committerEric Andersen <andersen@codepoet.org>
Tue, 6 Jan 2004 00:07:17 +0000 (00:07 -0000)
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.

modutils/modprobe.c

index e300c0d2b37fbca2158ba9dcbadc1a35f195f5ed..1e4d24e0df850c45684fb7fd596fdf5384b64ae5 100644 (file)
@@ -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] == '\\' )