From 43df0a21c0dfa9536b0c8ce816685a6002451f54 Mon Sep 17 00:00:00 2001 From: Peter Stephenson Date: Thu, 11 Mar 2010 22:38:58 +0000 Subject: 27785: IFS doesn't have a null in it in POSIX unposted: note & needs quoting in :s in glob qualifier --- Src/init.c | 3 ++- Src/utils.c | 6 ++++-- Src/zsh.h | 4 ++++ 3 files changed, 10 insertions(+), 3 deletions(-) (limited to 'Src') diff --git a/Src/init.c b/Src/init.c index aa0dffd6f..c65c4aaad 100644 --- a/Src/init.c +++ b/Src/init.c @@ -815,7 +815,8 @@ setupvals(void) ? ztrdup("+ ") : ztrdup("+%N:%i> "); sprompt = ztrdup("zsh: correct '%R' to '%r' [nyae]? "); - ifs = ztrdup(DEFAULT_IFS); + ifs = EMULATION(EMULATE_KSH|EMULATE_SH) ? + ztrdup(DEFAULT_IFS_SH) : ztrdup(DEFAULT_IFS); wordchars = ztrdup(DEFAULT_WORDCHARS); postedit = ztrdup(""); zunderscore = (char *) zalloc(underscorelen = 32); diff --git a/Src/utils.c b/Src/utils.c index b5cdc4613..38c820f29 100644 --- a/Src/utils.c +++ b/Src/utils.c @@ -3271,7 +3271,8 @@ inittyptab(void) typtab[t0] |= ITOK | IMETA; for (t0 = (int)STOUC(Snull); t0 <= (int)STOUC(Nularg); t0++) typtab[t0] |= ITOK | IMETA | INULL; - for (s = ifs ? ifs : DEFAULT_IFS; *s; s++) { + for (s = ifs ? ifs : EMULATION(EMULATE_KSH|EMULATE_SH) ? + ztrdup(DEFAULT_IFS_SH) : ztrdup(DEFAULT_IFS); *s; s++) { int c = STOUC(*s == Meta ? *++s ^ 32 : *s); #ifdef MULTIBYTE_SUPPORT if (!isascii(c)) { @@ -3305,7 +3306,8 @@ inittyptab(void) } #ifdef MULTIBYTE_SUPPORT set_widearray(wordchars, &wordchars_wide); - set_widearray(ifs ? ifs : DEFAULT_IFS, &ifs_wide); + set_widearray(ifs ? ifs : EMULATION(EMULATE_KSH|EMULATE_SH) ? + ztrdup(DEFAULT_IFS_SH) : ztrdup(DEFAULT_IFS), &ifs_wide); #endif for (s = SPECCHARS; *s; s++) typtab[STOUC(*s)] |= ISPECIAL; diff --git a/Src/zsh.h b/Src/zsh.h index c918f7863..df7e251b9 100644 --- a/Src/zsh.h +++ b/Src/zsh.h @@ -127,6 +127,10 @@ struct mathfunc { #define DEFAULT_IFS " \t\n\203 " +/* As specified in the standard (POSIX 2008) */ + +#define DEFAULT_IFS_SH " \t\n" + /* * Character tokens. * These should match the characters in ztokens, defined in lex.c -- cgit 1.4.1