From 2e83d38ae4c483813edc544265b39ee5e26f9b88 Mon Sep 17 00:00:00 2001 From: Andrew Morton <akpm@osdl.org> Date: Thu, 11 Mar 2004 16:16:28 -0800 Subject: [PATCH] [PATCH] kbuild: fix usage with directories containing '.o' 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 file changed, 7 insertions(+), 4 deletions(-) diff --git a/scripts/modpost.c b/scripts/modpost.c index 3ee9b4d507fa..8b22ce9aac35 100644 --- a/scripts/modpost.c +++ b/scripts/modpost.c @@ -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; -- 2.30.9