summaryrefslogtreecommitdiff
path: root/libiberty
diff options
context:
space:
mode:
Diffstat (limited to 'libiberty')
-rw-r--r--libiberty/ChangeLog10
-rw-r--r--libiberty/cp-demangle.c10
-rw-r--r--libiberty/pex-win32.c4
-rw-r--r--libiberty/testsuite/test-pexecute.c14
4 files changed, 33 insertions, 5 deletions
diff --git a/libiberty/ChangeLog b/libiberty/ChangeLog
index 0b97a904c6f..5934bc1fa8a 100644
--- a/libiberty/ChangeLog
+++ b/libiberty/ChangeLog
@@ -1,3 +1,13 @@
+2016-09-19 Andrew Stubbs <ams@codesourcery.com>
+
+ * pex-win32.c (argv_to_cmdline): Quote zero-length parameters.
+ * testsuite/test-pexecute.c (main): Insert check for zero-length parameters.
+
+2016-09-10 Mark Wielaard <mjw@redhat.com>
+
+ * cp-demangle.c (d_substitution): Change struct demangle_component
+ variable name from c to dc.
+
2016-08-12 Marek Polacek <polacek@redhat.com>
PR c/7652
diff --git a/libiberty/cp-demangle.c b/libiberty/cp-demangle.c
index 1c2bce29179..a843dc38f98 100644
--- a/libiberty/cp-demangle.c
+++ b/libiberty/cp-demangle.c
@@ -3769,7 +3769,7 @@ d_substitution (struct d_info *di, int prefix)
{
const char *s;
int len;
- struct demangle_component *c;
+ struct demangle_component *dc;
if (p->set_last_name != NULL)
di->last_name = d_make_sub (di, p->set_last_name,
@@ -3785,15 +3785,15 @@ d_substitution (struct d_info *di, int prefix)
len = p->simple_len;
}
di->expansion += len;
- c = d_make_sub (di, s, len);
+ dc = d_make_sub (di, s, len);
if (d_peek_char (di) == 'B')
{
/* If there are ABI tags on the abbreviation, it becomes
a substitution candidate. */
- c = d_abi_tags (di, c);
- d_add_substitution (di, c);
+ dc = d_abi_tags (di, dc);
+ d_add_substitution (di, dc);
}
- return c;
+ return dc;
}
}
diff --git a/libiberty/pex-win32.c b/libiberty/pex-win32.c
index 66d2f1157c7..4c15b0d11a0 100644
--- a/libiberty/pex-win32.c
+++ b/libiberty/pex-win32.c
@@ -370,6 +370,8 @@ argv_to_cmdline (char *const *argv)
cmdline_len++;
}
}
+ if (j == 0)
+ needs_quotes = 1;
/* Trailing backslashes also need to be escaped because they will be
followed by the terminating quote. */
if (needs_quotes)
@@ -394,6 +396,8 @@ argv_to_cmdline (char *const *argv)
break;
}
}
+ if (j == 0)
+ needs_quotes = 1;
if (needs_quotes)
{
diff --git a/libiberty/testsuite/test-pexecute.c b/libiberty/testsuite/test-pexecute.c
index 8e01fda479a..f62239d49b8 100644
--- a/libiberty/testsuite/test-pexecute.c
+++ b/libiberty/testsuite/test-pexecute.c
@@ -285,6 +285,20 @@ main (int argc, char **argv)
ERROR ("echo exit status failed");
pex_free (pex1);
+ /* Check empty parameters don't get lost. */
+ pex1 = TEST_PEX_INIT (PEX_USE_PIPES, "temp");
+ subargv[1] = "echo";
+ subargv[2] = "foo";
+ subargv[3] = "";
+ subargv[4] = "bar";
+ subargv[5] = NULL;
+ TEST_PEX_RUN (pex1, 0, "./test-pexecute", subargv, NULL, NULL);
+ e = TEST_PEX_READ_OUTPUT (pex1);
+ CHECK_LINE (e, "foo bar"); /* Two spaces! */
+ if (TEST_PEX_GET_STATUS_1 (pex1) != 0)
+ ERROR ("echo exit status failed");
+ pex_free (pex1);
+
pex1 = TEST_PEX_INIT (PEX_USE_PIPES, "temp");
subargv[1] = "echo";
subargv[2] = "bar";