From: Sam Ravnborg <sam@ravnborg.org>

From: Daniel Mack <daniel@zonque.org>, me

modpost unconditionally searched for ".o" assuming this is always the
suffix of the module.  This fails in two cases:

a) when building external modules where any directory include ".o" in
   the name.  One example is a directory named: .../cvs.alsa.org/...

b) when someone names a kernel directory so it contains ".o".  One
   example is drivers/scsi/aic.ok/...

case b) was triggered by renaming the directory for aic7xxx, and modifying
Makefile and Kconfig.  This caused make modules to fail.


---

 scripts/modpost.c |   11 +++++++----
 1 files changed, 7 insertions(+), 4 deletions(-)

diff -puN scripts/modpost.c~handle-dot-o-paths scripts/modpost.c
--- 25/scripts/modpost.c~handle-dot-o-paths	2004-03-05 21:24:02.000000000 -0800
+++ 25-akpm/scripts/modpost.c	2004-03-05 21:24:02.000000000 -0800
@@ -64,17 +64,20 @@ new_module(char *modname)
 {
 	struct module *mod;
 	char *p;
+	size_t len;
 	
 	mod = NOFAIL(malloc(sizeof(*mod)));
 	memset(mod, 0, sizeof(*mod));
-	mod->name = NOFAIL(strdup(modname));
+	p = NOFAIL(strdup(modname));
+
+	len = strlen(p);
 
 	/* strip trailing .o */
-	p = strstr(mod->name, ".o");
-	if (p)
-		*p = 0;
+	if (len > 2 && p[len-2] == '.' && p[len-1] == 'o')
+		p[len -2] = '\0';
 
 	/* add to list */
+	mod->name = NOFAIL(strdup(p));
 	mod->next = modules;
 	modules = mod;
 

_