diff options
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | job.c | 4 | ||||
-rw-r--r-- | tests/ChangeLog | 4 | ||||
-rw-r--r-- | tests/scripts/misc/bs-nl | 22 |
4 files changed, 34 insertions, 1 deletions
@@ -1,3 +1,8 @@ +2013-05-26 Paul Smith <psmith@gnu.org> + + * job.c (new_job): Compare OUT to the beginning of the OUT + var/function, not IN. Fixes Savannah bug #39035. + 2013-05-22 Paul Smith <psmith@gnu.org> * main.c (switches[]): Order switches so simple flags all come first. @@ -2036,10 +2036,12 @@ new_job (struct file *file) { char openparen = *ref; char closeparen = openparen == '(' ? ')' : '}'; + char *outref; int count; char *p; *out++ = *in++; /* Copy OPENPAREN. */ + outref = out; /* IN now points past the opening paren or brace. Count parens or braces until it is matched. */ count = 0; @@ -2072,7 +2074,7 @@ new_job (struct file *file) /* Discard any preceding whitespace that has already been written to the output. */ - while (out > ref + while (out > outref && isblank ((unsigned char)out[-1])) --out; diff --git a/tests/ChangeLog b/tests/ChangeLog index 20c770e..1f93930 100644 --- a/tests/ChangeLog +++ b/tests/ChangeLog @@ -1,3 +1,7 @@ +2013-05-26 Paul Smith <psmith@gnu.org> + + * scripts/misc/bs-nl: Test for Savannah bug #39035. + 2013-05-22 Paul Smith <psmith@gnu.org> * scripts/options/dash-n: Fix results after MAKEFLAGS fixes. diff --git a/tests/scripts/misc/bs-nl b/tests/scripts/misc/bs-nl index e27a3f7..aa7661e 100644 --- a/tests/scripts/misc/bs-nl +++ b/tests/scripts/misc/bs-nl @@ -99,4 +99,26 @@ var = he\ var:;@echo '|$(var)|'!, '', "|he llo|"); +# Savannah #39035: handle whitespace in call +run_make_test(q! +f = echo $(1) +t:; @$(call f,"a \ + b"); \ + $(call f,"a \ + b") +!, + '', "a b\na b\n"); + +# Savannah #38945: handle backslash CRLF +# We need our own makefile so we can set binmode +my $m1 = get_tmpfile(); +open(MAKEFILE, "> $m1"); +binmode(MAKEFILE); +print MAKEFILE "FOO = foo \\\r\nbar\nall: ; \@echo \$(FOO)\n"; +close(MAKEFILE); + +run_make_with_options($m1, '', get_logfile()); +compare_output("foo bar\n", get_logfile(1)); + + 1; |