aboutsummaryrefslogtreecommitdiff
path: root/shell
diff options
context:
space:
mode:
authorRon Yorston <rmy@pobox.com>2023-04-09 10:48:58 +0100
committerRon Yorston <rmy@pobox.com>2023-04-09 10:48:58 +0100
commitfa04f2dc766c76f2caa44a4b8429185dde6a66b0 (patch)
tree5d860da97566c6492c0af7d7d5dfb29e232f93c4 /shell
parent99402ca92c77b13bee5181c129db18ecd9bf8938 (diff)
downloadbusybox-w32-fa04f2dc766c76f2caa44a4b8429185dde6a66b0.tar.gz
busybox-w32-fa04f2dc766c76f2caa44a4b8429185dde6a66b0.tar.bz2
busybox-w32-fa04f2dc766c76f2caa44a4b8429185dde6a66b0.zip
ash: remove ASH_IGNORE_CR config option
No further problems with CRLF handling have been reported. Remove the configuration option that allowed some recent changes to be turned off. Also, prevent some WIN32 code from being included in the POSIX build. The faulty code is from commit 64c8f5f3d (ash: add support for INT trap). These changes don't alter the default WIN32 build.
Diffstat (limited to 'shell')
-rw-r--r--shell/ash.c28
-rw-r--r--shell/shell_common.c11
2 files changed, 10 insertions, 29 deletions
diff --git a/shell/ash.c b/shell/ash.c
index 77670ebb4..51bf95377 100644
--- a/shell/ash.c
+++ b/shell/ash.c
@@ -192,16 +192,6 @@
192//config: Enable support for the 'nocaseglob' option, which allows 192//config: Enable support for the 'nocaseglob' option, which allows
193//config: case-insensitive filename globbing. 193//config: case-insensitive filename globbing.
194//config: 194//config:
195//config:config ASH_IGNORE_CR
196//config: bool "Ignore CR in CRLF line endings"
197//config: default y
198//config: depends on (ASH || SH_IS_ASH || BASH_IS_ASH) && PLATFORM_MINGW32
199//config: help
200//config: Allow CRs to be ignored when they appear in CRLF line endings
201//config: but not in other circumstances. This isn't a general-purpose
202//config: option: it only covers certain new cases which are under test.
203//config: Enabled by default. May be removed in future.
204//config:
205//config:endif # ash options 195//config:endif # ash options
206 196
207//applet:IF_ASH(APPLET(ash, BB_DIR_BIN, BB_SUID_DROP)) 197//applet:IF_ASH(APPLET(ash, BB_DIR_BIN, BB_SUID_DROP))
@@ -6807,7 +6797,7 @@ ifsbreakup(char *string, struct arglist *arglist)
6807 const char *ifs, *realifs; 6797 const char *ifs, *realifs;
6808 int ifsspc; 6798 int ifsspc;
6809 int nulonly; 6799 int nulonly;
6810#if ENABLE_ASH_IGNORE_CR 6800#if ENABLE_PLATFORM_MINGW32
6811 int lshift = 0; 6801 int lshift = 0;
6812#endif 6802#endif
6813 6803
@@ -6820,13 +6810,13 @@ ifsbreakup(char *string, struct arglist *arglist)
6820 do { 6810 do {
6821 int afternul; 6811 int afternul;
6822 6812
6823#if ENABLE_ASH_IGNORE_CR 6813#if ENABLE_PLATFORM_MINGW32
6824 /* Adjust region offsets for left-shifted string. */ 6814 /* Adjust region offsets for left-shifted string. */
6825 ifsp->begoff -= lshift; 6815 ifsp->begoff -= lshift;
6826 ifsp->endoff -= lshift; 6816 ifsp->endoff -= lshift;
6827#endif 6817#endif
6828 p = string + ifsp->begoff; 6818 p = string + ifsp->begoff;
6829#if ENABLE_ASH_IGNORE_CR 6819#if ENABLE_PLATFORM_MINGW32
6830 if (ifsp->endoff > ifsp->begoff + 1) { 6820 if (ifsp->endoff > ifsp->begoff + 1) {
6831 /* Transform CRLF to LF. Skip regions having zero or 6821 /* Transform CRLF to LF. Skip regions having zero or
6832 * one characters: they can't contain CRLF. If the 6822 * one characters: they can't contain CRLF. If the
@@ -11788,7 +11778,7 @@ static void popstring(void)
11788 INT_ON; 11778 INT_ON;
11789} 11779}
11790 11780
11791#if ENABLE_ASH_IGNORE_CR 11781#if ENABLE_PLATFORM_MINGW32
11792/* 11782/*
11793 * Wrapper around nonblock_immune_read() to remove CRs, but only from 11783 * Wrapper around nonblock_immune_read() to remove CRs, but only from
11794 * CRLF pairs. The tricky part is handling a CR at the end of the buffer. 11784 * CRLF pairs. The tricky part is handling a CR at the end of the buffer.
@@ -11846,7 +11836,7 @@ preadfd(void)
11846#if ENABLE_FEATURE_EDITING 11836#if ENABLE_FEATURE_EDITING
11847 /* retry: */ 11837 /* retry: */
11848 if (!iflag || g_parsefile->pf_fd != STDIN_FILENO) 11838 if (!iflag || g_parsefile->pf_fd != STDIN_FILENO)
11849#if ENABLE_ASH_IGNORE_CR 11839#if ENABLE_PLATFORM_MINGW32
11850 nr = nonblock_immune_wrapper(g_parsefile, buf, IBUFSIZ - 1); 11840 nr = nonblock_immune_wrapper(g_parsefile, buf, IBUFSIZ - 1);
11851#else 11841#else
11852 nr = nonblock_immune_read(g_parsefile->pf_fd, buf, IBUFSIZ - 1); 11842 nr = nonblock_immune_read(g_parsefile->pf_fd, buf, IBUFSIZ - 1);
@@ -11932,7 +11922,7 @@ preadfd(void)
11932 } 11922 }
11933 } 11923 }
11934#else 11924#else
11935# if ENABLE_ASH_IGNORE_CR 11925# if ENABLE_PLATFORM_MINGW32
11936 nr = nonblock_immune_wrapper(g_parsefile, buf, IBUFSIZ - 1); 11926 nr = nonblock_immune_wrapper(g_parsefile, buf, IBUFSIZ - 1);
11937# else 11927# else
11938 nr = nonblock_immune_read(g_parsefile->pf_fd, buf, IBUFSIZ - 1); 11928 nr = nonblock_immune_read(g_parsefile->pf_fd, buf, IBUFSIZ - 1);
@@ -12007,9 +11997,7 @@ preadbuffer(void)
12007 more--; 11997 more--;
12008 11998
12009 c = *q; 11999 c = *q;
12010 /* Remove CR from input buffer as an alternative to ASH_IGNORE_CR. */ 12000 if (c == '\0') {
12011 if (c == '\0' || (c == '\r' &&
12012 ENABLE_PLATFORM_MINGW32 && !ENABLE_ASH_IGNORE_CR)) {
12013 memmove(q, q + 1, more); 12001 memmove(q, q + 1, more);
12014 } else { 12002 } else {
12015 q++; 12003 q++;
@@ -15160,7 +15148,9 @@ trapcmd(int argc UNUSED_PARAM, char **argv UNUSED_PARAM)
15160 next: 15148 next:
15161 ap++; 15149 ap++;
15162 } 15150 }
15151#if ENABLE_PLATFORM_MINGW32
15163 may_have_traps = trap[SIGINT] && trap[SIGINT][0] != '\0'; 15152 may_have_traps = trap[SIGINT] && trap[SIGINT][0] != '\0';
15153#endif
15164 return exitcode; 15154 return exitcode;
15165} 15155}
15166 15156
diff --git a/shell/shell_common.c b/shell/shell_common.c
index efe8828e4..716d3aebb 100644
--- a/shell/shell_common.c
+++ b/shell/shell_common.c
@@ -19,11 +19,7 @@
19#include "libbb.h" 19#include "libbb.h"
20#include "shell_common.h" 20#include "shell_common.h"
21 21
22#if !ENABLE_PLATFORM_MINGW32 || ENABLE_ASH_IGNORE_CR
23const char defifsvar[] ALIGN1 = "IFS= \t\n"; 22const char defifsvar[] ALIGN1 = "IFS= \t\n";
24#else
25const char defifsvar[] ALIGN1 = "IFS= \t\n\r";
26#endif
27const char defoptindvar[] ALIGN1 = "OPTIND=1"; 23const char defoptindvar[] ALIGN1 = "OPTIND=1";
28 24
29/* read builtin */ 25/* read builtin */
@@ -261,10 +257,6 @@ shell_builtin_read(struct builtin_read_params *params)
261 257
262 c = buffer[bufpos]; 258 c = buffer[bufpos];
263#if ENABLE_PLATFORM_MINGW32 259#if ENABLE_PLATFORM_MINGW32
264# if !ENABLE_ASH_IGNORE_CR
265 if (c == '\r')
266 continue;
267# else
268 if (c == '\n') { 260 if (c == '\n') {
269 if (backslash == 2 || (bufpos > 0 && buffer[bufpos - 1] == '\r')) { 261 if (backslash == 2 || (bufpos > 0 && buffer[bufpos - 1] == '\r')) {
270 /* We saw either: 262 /* We saw either:
@@ -279,11 +271,10 @@ shell_builtin_read(struct builtin_read_params *params)
279 * process ?? */ 271 * process ?? */
280 backslash = 0; 272 backslash = 0;
281 } 273 }
282# endif
283#endif 274#endif
284 if (!(read_flags & BUILTIN_READ_RAW)) { 275 if (!(read_flags & BUILTIN_READ_RAW)) {
285 if (backslash) { 276 if (backslash) {
286#if ENABLE_ASH_IGNORE_CR 277#if ENABLE_PLATFORM_MINGW32
287 if (c == '\r') { 278 if (c == '\r') {
288 /* We have BS CR, keep CR for now, might see LF next */ 279 /* We have BS CR, keep CR for now, might see LF next */
289 backslash = 2; 280 backslash = 2;