- }
-
- /* Is this a new module dep description? */
- if (!continuation_line) {
- /* find the dep beginning */
- char *col = strchr(line_buffer, ':');
- char *dot = col;
-
- if (col) {
- /* This line is a dep description */
- const char *mods;
- char *modpath;
- char *mod;
-
- /* Find the beginning of the module file name */
- *col = '\0';
- mods = bb_basename(line_buffer);
-
- /* find the path of the module */
- modpath = strchr(line_buffer, '/'); /* ... and this is the path */
- if (!modpath)
- modpath = line_buffer; /* module with no path */
- /* find the end of the module name in the file name */
- if (ENABLE_FEATURE_2_6_MODULES &&
- (k_version > 4) && (col[-3] == '.') &&
- (col[-2] == 'k') && (col[-1] == 'o'))
- dot = col - 3;
- else if ((col[-2] == '.') && (col[-1] == 'o'))
- dot = col - 2;
-
- mod = xstrndup(mods, dot - mods);
-
- /* enqueue new module */
- if (!current) {
- first = current = xzalloc(sizeof(struct dep_t));
- } else {
- current->m_next = xzalloc(sizeof(struct dep_t));
- current = current->m_next;
- }
- current->m_name = mod;
- current->m_path = xstrdup(modpath);
- /*current->m_options = NULL; - xzalloc did it*/
- /*current->m_isalias = 0;*/
- /*current->m_depcnt = 0;*/
- /*current->m_deparr = 0;*/
- /*current->m_next = 0;*/
-
- p = col + 1;
- } else
- /* this line is not a dep description */
- p = NULL;
- } else
- /* It's a dep description continuation */
- p = line_buffer;
-
- /* p points to the first dependable module; if NULL, no dependable module */
- if (p && (p = skip_whitespace(p))[0] != '\0') {
- char *end = &line_buffer[l-1];
- const char *deps;
- char *dep;
- char *next;
- int ext = 0;
-
- while (isblank(*end) || (*end == '\\'))
- end--;
-
- do {
- /* search the end of the dependency */
- next = strchr(p, ' ');
- if (next) {
- *next = '\0';
- next--;
- } else
- next = end;
-
- /* find the beginning of the module file name */
- deps = bb_basename(p);
- if (deps == p)
- deps = skip_whitespace(deps);
-
- /* find the end of the module name in the file name */
- if (ENABLE_FEATURE_2_6_MODULES
- && (k_version > 4) && (next[-2] == '.')
- && (next[-1] == 'k') && (next[0] == 'o'))
- ext = 3;
- else if ((next[-1] == '.') && (next[0] == 'o'))
- ext = 2;
-
- /* Cope with blank lines */
- if ((next-deps-ext+1) <= 0)
- continue;
- dep = xstrndup(deps, next - deps - ext + 1);
-
- /* Add the new dependable module name */
- current->m_deparr = xrealloc_vector(current->m_deparr, 2, current->m_depcnt);
- current->m_deparr[current->m_depcnt++] = dep;
-
- p = next + 2;
- } while (next < end);
- }
-
- /* is there other dependable module(s) ? */
- continuation_line = (line_buffer[l-1] == '\\');
- } /* while (reads(...)) */
- close(fd);
-
- /*
- * First parse system-specific options and aliases
- * as they take precedence over the kernel ones.
- * >=2.6: we only care about modprobe.conf
- * <=2.4: we care about modules.conf and conf.modules
- */
- if (ENABLE_FEATURE_2_6_MODULES
- && (fd = open("/etc/modprobe.conf", O_RDONLY)) < 0)
- if (ENABLE_FEATURE_2_4_MODULES
- && (fd = open("/etc/modules.conf", O_RDONLY)) < 0)
- if (ENABLE_FEATURE_2_4_MODULES)
- fd = open("/etc/conf.modules", O_RDONLY);
-
- if (fd >= 0) {
- include_conf(&first, ¤t, line_buffer, sizeof(line_buffer), fd);
- close(fd);
- }
-
- /* Only 2.6 has a modules.alias file */
- if (ENABLE_FEATURE_2_6_MODULES) {
- /* Parse kernel-declared module aliases */
- filename = xasprintf(CONFIG_DEFAULT_MODULES_DIR"/%s/modules.alias", un.release);
- fd = open(filename, O_RDONLY);
- if (fd < 0) {
- /* Ok, that didn't work. Fall back to looking in /lib/modules */
- fd = open(CONFIG_DEFAULT_MODULES_DIR"/modules.alias", O_RDONLY);
- }
- if (ENABLE_FEATURE_CLEAN_UP)
- free(filename);
-
- if (fd >= 0) {
- include_conf(&first, ¤t, line_buffer, sizeof(line_buffer), fd);
- close(fd);
- }
-
- /* Parse kernel-declared symbol aliases */
- filename = xasprintf(CONFIG_DEFAULT_MODULES_DIR"/%s/modules.symbols", un.release);
- fd = open(filename, O_RDONLY);
- if (fd < 0) {
- /* Ok, that didn't work. Fall back to looking in /lib/modules */
- fd = open(CONFIG_DEFAULT_MODULES_DIR"/modules.symbols", O_RDONLY);
- }
- if (ENABLE_FEATURE_CLEAN_UP)
- free(filename);
-
- if (fd >= 0) {
- include_conf(&first, ¤t, line_buffer, sizeof(line_buffer), fd);
- close(fd);