From be6a8bc869ece930f3bd5f725efd9fab7a2c2940 Mon Sep 17 00:00:00 2001 From: Paul Smith Date: Mon, 29 Nov 2004 01:35:13 +0000 Subject: [PATCH] Fix bug #10252: Remove any trailing slashes from -C arguments (WINDOWS32). Add a regression test for "@" before a define/enddef vs. one inside. --- ChangeLog | 3 +++ main.c | 17 +++++++++--- tests/ChangeLog | 3 +++ tests/scripts/options/dash-C | 60 ++++++++++++++++++++++++++++------------- tests/scripts/variables/flavors | 25 +++++++++++++++++ 5 files changed, 87 insertions(+), 21 deletions(-) diff --git a/ChangeLog b/ChangeLog index b1dcefd..e6e7334 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,8 @@ 2004-11-28 Paul D. Smith + * main.c (main) [WINDOWS32]: Remove any trailing slashes from -C + arguments. Fixes bug #10252. + Fix for bug #1276: Handle SHELL according to POSIX requirements. * main.c (main): Set SHELL to v_noexport by default. Remember the diff --git a/main.c b/main.c index f0229ee..700e4ba 100644 --- a/main.c +++ b/main.c @@ -1273,16 +1273,27 @@ main (int argc, char **argv, char **envp) for (i = 0; directories->list[i] != 0; ++i) { char *dir = directories->list[i]; + char *expanded = 0; if (dir[0] == '~') { - char *expanded = tilde_expand (dir); + expanded = tilde_expand (dir); if (expanded != 0) dir = expanded; } +#ifdef WINDOWS32 + /* WINDOWS32 chdir() doesn't work if the directory has a trailing '/' + But allow -C/ just in case someone wants that. */ + { + char *p = dir + strlen (dir) - 1; + while (p > dir && (p[0] == '/' || p[0] == '\\')) + --p; + p[1] = '\0'; + } +#endif if (chdir (dir) < 0) pfatal_with_name (dir); - if (dir != directories->list[i]) - free (dir); + if (expanded) + free (expanded); } #ifdef WINDOWS32 diff --git a/tests/ChangeLog b/tests/ChangeLog index a6423b0..cef8a33 100644 --- a/tests/ChangeLog +++ b/tests/ChangeLog @@ -1,5 +1,8 @@ 2004-11-28 Paul D. Smith + * scripts/options/dash-C [WINDOWS32]: Add a test for bug #10252; + this doesn't really test anything useful in UNIX but... + * scripts/variables/SHELL: New file: test proper handling of SHELL according to POSIX rules. Fixes bug #1276. diff --git a/tests/scripts/options/dash-C b/tests/scripts/options/dash-C index f31238f..5864ffd 100644 --- a/tests/scripts/options/dash-C +++ b/tests/scripts/options/dash-C @@ -1,32 +1,56 @@ -$description = "The following test creates a makefile to test the -C dir \n" - ."option in make. This option tells make to change to \n" - ."directory dir before reading the makefile."; +# -*-perl-*- -$details = "This test is similar to the clean test except that this test\n" - ."creates the file to delete in the work directory instead of\n" - ."the current directory. Make is called from another directory\n" - ."using the -C workdir option so that it can both find the \n" - ."makefile and the file to delete in the work directory. "; +$description = "Test the -C option to GNU make."; -$example = $workdir . $pathsep . "EXAMPLE_FILE"; +$details = "\ +This test is similar to the clean test except that this test creates the file +to delete in the work directory instead of the current directory. Make is +called from another directory using the -C workdir option so that it can both +find the makefile and the file to delete in the work directory."; + +$example = $workdir . $pathsep . "EXAMPLE"; open(MAKEFILE,"> $makefile"); +print MAKEFILE <