diff options
| -rw-r--r-- | modutils/modprobe.c | 38 | 
1 files changed, 23 insertions, 15 deletions
| diff --git a/modutils/modprobe.c b/modutils/modprobe.c index 6211c7d81..a04377180 100644 --- a/modutils/modprobe.c +++ b/modutils/modprobe.c @@ -545,28 +545,36 @@ static struct dep_t *build_dep ( void )  	}  	close ( fd ); +	/* +	 * First parse system-specific options and aliases +	 * as they take precedence over the kernel ones. +	 */  	if (!ENABLE_FEATURE_2_6_MODULES  			|| ( fd = open ( "/etc/modprobe.conf", O_RDONLY )) < 0 )  		if (( fd = open ( "/etc/modules.conf", O_RDONLY )) < 0 ) -			if (( fd = open ( "/etc/conf.modules", O_RDONLY )) < 0 ) -				return first; +			fd = open ( "/etc/conf.modules", O_RDONLY ); -	include_conf (&first, ¤t, buffer, sizeof(buffer), fd); -	close(fd); +	if (fd >= 0) { +		include_conf (&first, ¤t, buffer, sizeof(buffer), fd); +		close(fd); +	} -	filename = bb_xasprintf("/lib/modules/%s/modules.alias", un.release); -	fd = open ( filename, O_RDONLY ); -	if (ENABLE_FEATURE_CLEAN_UP) -		free(filename); -	if (fd < 0) { -		/* Ok, that didn't work.  Fall back to looking in /lib/modules */ -		if (( fd = open ( "/lib/modules/modules.alias", O_RDONLY )) < 0 ) { -			return first; +	/* Only 2.6 has a modules.alias file */ +	if (ENABLE_FEATURE_2_6_MODULES) { +		/* Parse kernel-declared aliases */ +		filename = bb_xasprintf("/lib/modules/%s/modules.alias", un.release); +		if ((fd = open ( filename, O_RDONLY )) < 0) { +			/* Ok, that didn't work.  Fall back to looking in /lib/modules */ +			fd = open ( "/lib/modules/modules.alias", O_RDONLY );  		} -	} +		if (ENABLE_FEATURE_CLEAN_UP) +			free(filename); -	include_conf (&first, ¤t, buffer, sizeof(buffer), fd); -	close(fd); +		if (fd >= 0) { +			include_conf (&first, ¤t, buffer, sizeof(buffer), fd); +			close(fd); +		} +	}  	return first;  } | 
