[SV 46581] Pre-define .LOADED to avoid warnings.
* main.c (main): Pre-define .LOADED as a default-level variable.
* load.c (load_file): Set the value rather than append it. Avoid
adding an extra initial whitespace.
* tests/scripts/features/load: Run with --warn-undefined-variables.
diff --git a/load.c b/load.c
index 191ebd8..2beab83 100644
--- a/load.c
+++ b/load.c
@@ -168,9 +168,8 @@
loaded = allocated_variable_expand ("$(.LOADED)");
fp = strstr (loaded, *ldname);
r = fp && (fp==loaded || fp[-1]==' ') && (fp[nmlen]=='\0' || fp[nmlen]==' ');
- free (loaded);
if (r)
- return 1;
+ goto exit;
/* If we didn't find a symbol name yet, construct it from the ldname. */
if (! symname)
@@ -214,8 +213,21 @@
/* If it succeeded, add the load file to the loaded variable. */
if (r > 0)
- do_variable_definition (flocp, ".LOADED", *ldname, o_default, f_append, 0);
+ {
+ size_t loadlen = strlen (loaded);
+ char *newval = alloca (loadlen + strlen (*ldname) + 2);
+ /* Don't add a space if it's empty. */
+ if (loadlen)
+ {
+ memcpy (newval, loaded, loadlen);
+ newval[loadlen++] = ' ';
+ }
+ strcpy (&newval[loadlen], *ldname);
+ do_variable_definition (flocp, ".LOADED", newval, o_default, f_simple, 0);
+ }
+ exit:
+ free (loaded);
return r;
}
@@ -237,7 +249,7 @@
#else
int
-load_file (const gmk_floc *flocp, const char **ldname, int noerror)
+load_file (const gmk_floc *flocp, const char **ldname UNUSED, int noerror)
{
if (! noerror)
O (fatal, flocp,
@@ -247,7 +259,7 @@
}
void
-unload_file (const char *name)
+unload_file (const char *name UNUSED)
{
O (fatal, NILF, "INTERNAL: Cannot unload when load is not supported!");
}
diff --git a/main.c b/main.c
index f16c6b4..62ed7a8 100644
--- a/main.c
+++ b/main.c
@@ -1316,6 +1316,7 @@
/* define_variable_cname (".TARGETS", "", o_default, 0)->special = 1; */
define_variable_cname (".RECIPEPREFIX", "", o_default, 0)->special = 1;
define_variable_cname (".SHELLFLAGS", "-c", o_default, 0);
+ define_variable_cname (".LOADED", "", o_default, 0);
/* Set up .FEATURES
Use a separate variable because define_variable_cname() is a macro and
diff --git a/tests/scripts/features/load b/tests/scripts/features/load
index 1f8cdc2..2e9318d 100644
--- a/tests/scripts/features/load
+++ b/tests/scripts/features/load
@@ -56,7 +56,7 @@
POST := $(.LOADED)
all: ; @echo pre=$(PRE) post=$(POST) $(TESTLOAD)
!,
- '', "pre= post=testload.so implicit\n");
+ '--warn-undefined-variables', "pre= post=testload.so implicit\n");
# TEST 2
# Load using an explicit function