Attempt at fixing bug 836, vaguely based on patch from somebody named

clausmuus, forwarded to me by Yann E. Morin.
This commit is contained in:
Rob Landley 2006-06-14 01:51:16 +00:00
parent a34b48abe5
commit d760560c52

View File

@ -574,7 +574,7 @@ static struct dep_t *build_dep ( void )
/* return 1 = loaded, 0 = not loaded, -1 = can't tell */
static int already_loaded (const char *name)
{
int fd;
int fd, ret = 0;
char buffer[4096];
fd = open ("/proc/modules", O_RDONLY);
@ -586,17 +586,28 @@ static int already_loaded (const char *name)
p = strchr (buffer, ' ');
if (p) {
*p = 0;
for( p = buffer; ENABLE_FEATURE_2_6_MODULES && *p; p++ ) {
*p = ((*p)=='-')?'_':*p;
}
if (strcmp (name, buffer) == 0) {
close (fd);
return 1;
}
}
}
const char *n;
// Truncate buffer at first space and check for matches, with
// the idiosyncrasy that _ and - are interchangeable because the
// 2.6 kernel does weird things.
*p = 0;
for (p = buffer, n = name; ; p++, n++) {
if (*p != *n) {
if ((*p == '_' || *p == '-') && (*n == '_' || *n == '-'))
continue;
break;
}
// If we made it to the end, that's a match.
if (!*p) {
ret = 1;
goto done;
}
}
}
}
done:
close (fd);
return 0;
}
@ -628,6 +639,7 @@ static int mod_process ( struct mod_list_t *list, int do_insert )
if ( do_insert ) {
if (already_loaded (list->m_name) != 1) {
argv[argc++] = "insmod";
if (ENABLE_FEATURE_2_4_MODULES) {
if (do_syslog)
argv[argc++] = "-s";
if (autoclean)
@ -636,6 +648,7 @@ static int mod_process ( struct mod_list_t *list, int do_insert )
argv[argc++] = "-q";
else if(verbose) /* verbose and quiet are mutually exclusive */
argv[argc++] = "-v";
}
argv[argc++] = list-> m_path;
if( ENABLE_FEATURE_CLEAN_UP )
argc_malloc = argc;