summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog3
-rw-r--r--file.c2
-rw-r--r--remake.c6
-rw-r--r--tests/ChangeLog2
-rw-r--r--tests/scripts/features/archives20
5 files changed, 29 insertions, 4 deletions
diff --git a/ChangeLog b/ChangeLog
index 498ad56..5f5dd93 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,8 @@
2013-05-26 Paul Smith <psmith@gnu.org>
+ * remake.c (f_mtime): Ensure that archive file names are in the
+ string cache. Fixes Savannah bug #38442.
+
* read.c (readline): To be safe, move the entire buffer if we
detect a CR. Fixes Savannah bug #38945.
diff --git a/file.c b/file.c
index a237174..06a2ce5 100644
--- a/file.c
+++ b/file.c
@@ -1052,7 +1052,7 @@ print_file_data_base (void)
#define VERIFY_CACHED(_p,_n) \
do{\
if (_p->_n && _p->_n[0] && !strcache_iscached (_p->_n)) \
- error (NULL, "%s: Field '%s' not cached: %s\n", _p->name, # _n, _p->_n); \
+ error (NULL, _("%s: Field '%s' not cached: %s"), _p->name, # _n, _p->_n); \
}while(0)
static void
diff --git a/remake.c b/remake.c
index f56a856..06e47bc 100644
--- a/remake.c
+++ b/remake.c
@@ -1256,7 +1256,7 @@ f_mtime (struct file *file, int search)
arlen = strlen (arfile->hname);
memlen = strlen (memname);
- name = xmalloc (arlen + 1 + memlen + 2);
+ name = alloca (arlen + 1 + memlen + 2);
memcpy (name, arfile->hname, arlen);
name[arlen] = '(';
memcpy (name + arlen + 1, memname, memlen);
@@ -1266,9 +1266,9 @@ f_mtime (struct file *file, int search)
/* If the archive was found with GPATH, make the change permanent;
otherwise defer it until later. */
if (arfile->name == arfile->hname)
- rename_file (file, name);
+ rename_file (file, strcache_add (name));
else
- rehash_file (file, name);
+ rehash_file (file, strcache_add (name));
check_renamed (file);
}
diff --git a/tests/ChangeLog b/tests/ChangeLog
index 7f1bd3c..7bdc5a1 100644
--- a/tests/ChangeLog
+++ b/tests/ChangeLog
@@ -1,5 +1,7 @@
2013-05-26 Paul Smith <psmith@gnu.org>
+ * scripts/features/archives: Test for Savannah bug #38442.
+
* scripts/misc/bs-nl: Test for Savannah bug #39035.
Add a test for Savannah bug #38945.
diff --git a/tests/scripts/features/archives b/tests/scripts/features/archives
index 41ac26d..4b331c2 100644
--- a/tests/scripts/features/archives
+++ b/tests/scripts/features/archives
@@ -51,5 +51,25 @@ foo(bar).baz: ; @echo '$@'
!,
'', "foo(bar).baz\n");
+# Check renaming of archive targets.
+# See Savannah bug #38442
+
+mkdir('artest', 0777);
+touch('foo.vhd');
+
+run_make_test(q!
+DIR = artest
+vpath % $(DIR)
+default: lib(foo)
+(%): %.vhd ; @cd $(DIR) && touch $(*F) && $(AR) $(ARFLAGS) $@ $(*F) >/dev/null 2>&1 && rm $(*F)
+.PHONY: default
+!,
+ '', "");
+
+run_make_test(undef, '', "#MAKE#: Nothing to be done for 'default'.\n");
+
+unlink('foo.vhd');
+remove_directory_tree('artest');
+
# This tells the test driver that the perl test script executed properly.
1;