mirror of
https://sourceware.org/git/glibc.git
synced 2025-01-03 08:11:08 +00:00
Update.
1998-09-14 22:46 Tim Waugh <tim@cyberelk.demon.co.uk>
* posix/wordexp-test.c: Chet Ramey confirmed that bash's behaviour
for field-splitting 🔤 is correct, and that two fields should
result. Revert tests to reflect this.
* posix/wordexp.c (w_emptyword): Remove function.
(exec_comm): Don't use w_emptyword.
(parse_param): Likewise.
This commit is contained in:
parent
4ca020f54d
commit
1ffaaca2a3
10
ChangeLog
10
ChangeLog
@ -1,3 +1,13 @@
|
|||||||
|
1998-09-14 22:46 Tim Waugh <tim@cyberelk.demon.co.uk>
|
||||||
|
|
||||||
|
* posix/wordexp-test.c: Chet Ramey confirmed that bash's behaviour
|
||||||
|
for field-splitting :abc: is correct, and that two fields should
|
||||||
|
result. Revert tests to reflect this.
|
||||||
|
|
||||||
|
* posix/wordexp.c (w_emptyword): Remove function.
|
||||||
|
(exec_comm): Don't use w_emptyword.
|
||||||
|
(parse_param): Likewise.
|
||||||
|
|
||||||
1998-09-14 15:00 Ulrich Drepper <drepper@cygnus.com>
|
1998-09-14 15:00 Ulrich Drepper <drepper@cygnus.com>
|
||||||
|
|
||||||
* sysdeps/arm/fpu/Dist: Moved to...
|
* sysdeps/arm/fpu/Dist: Moved to...
|
||||||
|
@ -51,11 +51,15 @@ struct test_case_struct
|
|||||||
{ 0, "two three", "one $var", 0, 3, { "one", "two", "three", }, IFS },
|
{ 0, "two three", "one $var", 0, 3, { "one", "two", "three", }, IFS },
|
||||||
{ 0, "two three", "one \"$var\"", 0, 2, { "one", "two three", }, "" },
|
{ 0, "two three", "one \"$var\"", 0, 2, { "one", "two three", }, "" },
|
||||||
{ 0, "two three", "one $var", 0, 2, { "one", "two three", }, "" },
|
{ 0, "two three", "one $var", 0, 2, { "one", "two three", }, "" },
|
||||||
{ 0, ":abc:", "$var", 0, 3, { "", "abc", "", }, ":" },
|
|
||||||
{ 0, NULL, "$(echo :abc:)", 0, 3, { "", "abc", "", }, ":" },
|
/* The non-whitespace IFS char at the end delimits the second field
|
||||||
{ 0, NULL, "$(echo :abc:\\ )", 0, 3, { "", "abc", "", }, ": " },
|
* but does NOT start a new field. */
|
||||||
|
{ 0, ":abc:", "$var", 0, 2, { "", "abc", }, ":" },
|
||||||
|
|
||||||
|
{ 0, NULL, "$(echo :abc:)", 0, 2, { "", "abc", }, ":" },
|
||||||
|
{ 0, NULL, "$(echo :abc:\\ )", 0, 2, { "", "abc", }, ": " },
|
||||||
{ 0, NULL, "$(echo :abc\\ )", 0, 2, { "", "abc", }, ": " },
|
{ 0, NULL, "$(echo :abc\\ )", 0, 2, { "", "abc", }, ": " },
|
||||||
{ 0, ":abc:", "$(echo $var)", 0, 3, { "", "abc", "", }, ":" },
|
{ 0, ":abc:", "$(echo $var)", 0, 2, { "", "abc", }, ":" },
|
||||||
{ 0, NULL, ":abc:", 0, 1, { " abc ", }, ":" },
|
{ 0, NULL, ":abc:", 0, 1, { " abc ", }, ":" },
|
||||||
{ 0, NULL, "$(echo :abc:)def", 0, 3, { "", "abc", "def", }, ":" },
|
{ 0, NULL, "$(echo :abc:)def", 0, 3, { "", "abc", "def", }, ":" },
|
||||||
{ 0, NULL, "$(echo abc:de)f", 0, 2, { "abc", "def", }, ":" },
|
{ 0, NULL, "$(echo abc:de)f", 0, 2, { "abc", "def", }, ":" },
|
||||||
|
@ -136,21 +136,6 @@ w_addmem (char *buffer, size_t *actlen, size_t *maxlen, const char *str,
|
|||||||
return buffer;
|
return buffer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Result of w_emptyword will not be ignored even if it is the last. */
|
|
||||||
static inline char *
|
|
||||||
w_emptyword (size_t *actlen, size_t *maxlen)
|
|
||||||
{
|
|
||||||
char *word = malloc (1 + W_CHUNK);
|
|
||||||
*maxlen = W_CHUNK;
|
|
||||||
*actlen = 0;
|
|
||||||
|
|
||||||
if (word)
|
|
||||||
*word = '\0';
|
|
||||||
|
|
||||||
return word;
|
|
||||||
}
|
|
||||||
|
|
||||||
static char *
|
static char *
|
||||||
internal_function
|
internal_function
|
||||||
w_addstr (char *buffer, size_t *actlen, size_t *maxlen, const char *str)
|
w_addstr (char *buffer, size_t *actlen, size_t *maxlen, const char *str)
|
||||||
@ -835,7 +820,6 @@ exec_comm (char *comm, char **word, size_t *word_length, size_t *max_length,
|
|||||||
int i;
|
int i;
|
||||||
char *buffer;
|
char *buffer;
|
||||||
pid_t pid;
|
pid_t pid;
|
||||||
int keep_empty_word = 0;
|
|
||||||
|
|
||||||
/* Don't fork() unless necessary */
|
/* Don't fork() unless necessary */
|
||||||
if (!comm || !*comm)
|
if (!comm || !*comm)
|
||||||
@ -933,11 +917,6 @@ exec_comm (char *comm, char **word, size_t *word_length, size_t *max_length,
|
|||||||
if (strchr (ifs_white, buffer[i]) == NULL)
|
if (strchr (ifs_white, buffer[i]) == NULL)
|
||||||
{
|
{
|
||||||
/* Current character is IFS but not whitespace */
|
/* Current character is IFS but not whitespace */
|
||||||
|
|
||||||
/* After this delimiter, another field must result.
|
|
||||||
* Make a note. */
|
|
||||||
keep_empty_word = 1;
|
|
||||||
|
|
||||||
if (copying == 2)
|
if (copying == 2)
|
||||||
{
|
{
|
||||||
/* current character
|
/* current character
|
||||||
@ -971,14 +950,7 @@ exec_comm (char *comm, char **word, size_t *word_length, size_t *max_length,
|
|||||||
if (w_addword (pwordexp, *word) == WRDE_NOSPACE)
|
if (w_addword (pwordexp, *word) == WRDE_NOSPACE)
|
||||||
goto no_space;
|
goto no_space;
|
||||||
|
|
||||||
if (keep_empty_word)
|
*word = w_newword (word_length, max_length);
|
||||||
{
|
|
||||||
*word = w_emptyword (word_length, max_length);
|
|
||||||
if (*word == NULL)
|
|
||||||
goto no_space;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
*word = w_newword (word_length, max_length);
|
|
||||||
/* fall back round the loop.. */
|
/* fall back round the loop.. */
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -986,9 +958,6 @@ exec_comm (char *comm, char **word, size_t *word_length, size_t *max_length,
|
|||||||
/* Not IFS character */
|
/* Not IFS character */
|
||||||
copying = 1;
|
copying = 1;
|
||||||
|
|
||||||
if (buffer[i] != '\n')
|
|
||||||
keep_empty_word = 0;
|
|
||||||
|
|
||||||
*word = w_addchar (*word, word_length, max_length,
|
*word = w_addchar (*word, word_length, max_length,
|
||||||
buffer[i]);
|
buffer[i]);
|
||||||
if (*word == NULL)
|
if (*word == NULL)
|
||||||
@ -1003,13 +972,13 @@ exec_comm (char *comm, char **word, size_t *word_length, size_t *max_length,
|
|||||||
{
|
{
|
||||||
(*word)[--*word_length] = '\0';
|
(*word)[--*word_length] = '\0';
|
||||||
|
|
||||||
/* If the last word was entirely newlines, and the previous word
|
/* If the last word was entirely newlines, turn it into a new word
|
||||||
* wasn't delimited with IFS non-whitespace, turn it into a new word
|
|
||||||
* which can be ignored if there's nothing following it. */
|
* which can be ignored if there's nothing following it. */
|
||||||
if (!keep_empty_word && *word_length == 0)
|
if (*word_length == 0)
|
||||||
{
|
{
|
||||||
free (*word);
|
free (*word);
|
||||||
*word = w_newword (word_length, max_length);
|
*word = w_newword (word_length, max_length);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1768,7 +1737,7 @@ envsubst:
|
|||||||
goto no_space;
|
goto no_space;
|
||||||
}
|
}
|
||||||
|
|
||||||
*word = w_emptyword (word_length, max_length);
|
*word = w_newword (word_length, max_length);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Skip IFS whitespace before the field */
|
/* Skip IFS whitespace before the field */
|
||||||
|
Loading…
Reference in New Issue
Block a user