hush: fix \<newline> handling on NOMMU

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
Denys Vlasenko 2009-08-12 19:47:44 +02:00
parent 19679784c0
commit cbfe6ad4c6
4 changed files with 37 additions and 11 deletions

View File

@ -6038,6 +6038,8 @@ static struct pipe *parse_stream(char **pstring,
dest.o_assignment = NOT_ASSIGNMENT; dest.o_assignment = NOT_ASSIGNMENT;
} }
/* Note: nommu_addchr(&ctx.as_string, ch) is already done */
switch (ch) { switch (ch) {
case '#': case '#':
if (dest.length == 0) { if (dest.length == 0) {
@ -6061,12 +6063,17 @@ static struct pipe *parse_stream(char **pstring,
ch = i_getch(input); ch = i_getch(input);
if (ch != '\n') { if (ch != '\n') {
o_addchr(&dest, '\\'); o_addchr(&dest, '\\');
nommu_addchr(&ctx.as_string, '\\'); /*nommu_addchr(&ctx.as_string, '\\'); - already done */
o_addchr(&dest, ch); o_addchr(&dest, ch);
nommu_addchr(&ctx.as_string, ch); nommu_addchr(&ctx.as_string, ch);
/* Example: echo Hello \2>file /* Example: echo Hello \2>file
* we need to know that word 2 is quoted */ * we need to know that word 2 is quoted */
dest.o_quoted = 1; dest.o_quoted = 1;
} else {
#if !BB_MMU
/* It's "\<newline>". Remove trailing '\' from ctx.as_string */
ctx.as_string.data[--ctx.as_string.length] = '\0';
#endif
} }
break; break;
case '$': case '$':

View File

@ -0,0 +1,7 @@
Ok
Ok
Ok
Ok
Ok
Ok
Done

View File

@ -0,0 +1,12 @@
(echo \
Ok)
( (echo \
Ok) )
( ( (echo \
Ok) ) )
(echo \Ok)
( (echo \Ok) )
( ( (echo \Ok) ) )
echo Done

View File

@ -38,16 +38,16 @@ do_test()
tret=0 tret=0
cd "$1" || { echo "cannot cd $1!"; exit 1; } cd "$1" || { echo "cannot cd $1!"; exit 1; }
for x in run-*; do for x in run-*; do
test -f "$x" || continue test -f "$x" || continue
case "$x" in case "$x" in
"$0"|run-minimal|run-gprof) ;; "$0"|run-minimal|run-gprof) ;;
*.orig|*~) ;; *.orig|*~) ;;
#*) echo $x ; sh $x ;; #*) echo $x ; sh $x ;;
*) *)
sh "$x" >"../$1-$x.fail" 2>&1 && \ sh "$x" >"../$1-$x.fail" 2>&1 && \
{ echo "$1/$x: ok"; rm "../$1-$x.fail"; } || echo "$1/$x: fail"; { echo "$1/$x: ok"; rm "../$1-$x.fail"; } || echo "$1/$x: fail";
;; ;;
esac esac
done done
# Many bash run-XXX scripts just do this, # Many bash run-XXX scripts just do this,
# no point in duplication it all over the place # no point in duplication it all over the place