diff --git a/ChangeLog b/ChangeLog index 498ad56f..5f5dd935 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,8 @@ 2013-05-26 Paul Smith + * 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 a2371741..06a2ce5c 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 f56a8569..06e47bc9 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 7f1bd3cf..7bdc5a12 100644 --- a/tests/ChangeLog +++ b/tests/ChangeLog @@ -1,5 +1,7 @@ 2013-05-26 Paul Smith + * 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 41ac26dc..4b331c26 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;