hush: use ash's read builtin

function                                             old     new   delta
shell_builtin_read                                     -    1000   +1000
set_local_var_from_halves                              -      24     +24
setvar2                                                -       7      +7
...
popstring                                            140     134      -6
ash_main                                            1375    1368      -7
setvar                                               184     174     -10
arith_set_local_var                                   36       -     -36
builtin_read                                        1096     185    -911
------------------------------------------------------------------------------
(add/remove: 3/1 grow/shrink: 5/23 up/down: 1038/-1007)        Total: 31 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
diff --git a/shell/hush_test/hush-read/read_REPLY.right b/shell/hush_test/hush-read/read_REPLY.right
new file mode 100644
index 0000000..59f5d54
--- /dev/null
+++ b/shell/hush_test/hush-read/read_REPLY.right
@@ -0,0 +1,5 @@
+test 1: |  abc1  def  |
+test 2: |  \abc2  d\ef  |
+test 3: |abc3  def|
+test 4: |\abc4  d\ef|
+Done
diff --git a/shell/hush_test/hush-read/read_REPLY.tests b/shell/hush_test/hush-read/read_REPLY.tests
new file mode 100755
index 0000000..ba20cae
--- /dev/null
+++ b/shell/hush_test/hush-read/read_REPLY.tests
@@ -0,0 +1,5 @@
+echo '  \abc1  d\ef  ' | ( read         ; echo "test 1: |$REPLY|" )
+echo '  \abc2  d\ef  ' | ( read -r      ; echo "test 2: |$REPLY|" )
+echo '  \abc3  d\ef  ' | ( read    REPLY; echo "test 3: |$REPLY|" )
+echo '  \abc4  d\ef  ' | ( read -r REPLY; echo "test 4: |$REPLY|" )
+echo Done
diff --git a/shell/hush_test/hush-read/read_ifs.right b/shell/hush_test/hush-read/read_ifs.right
new file mode 100644
index 0000000..b523344
--- /dev/null
+++ b/shell/hush_test/hush-read/read_ifs.right
@@ -0,0 +1,10 @@
+test 1: .a. .b. .c.
+test 2: .a. .b. .c.
+test 3: .a. .. .b,c.
+test 4: .a. .. .b,c.
+test 5: .a. .. .c.
+test 6: .a. .. .c. .d.
+test 7: .a. .. .b,c,d  ,  ,.
+test 8: .. .a. .b. .c.
+test 9: .a. .b. .c. ..
+test A: .. .a. .. .b. .c.
diff --git a/shell/hush_test/hush-read/read_ifs.tests b/shell/hush_test/hush-read/read_ifs.tests
new file mode 100755
index 0000000..6e83112
--- /dev/null
+++ b/shell/hush_test/hush-read/read_ifs.tests
@@ -0,0 +1,10 @@
+printf 'a\t\tb\tc\n' | ( IFS=$(printf "\t") read a b c;  echo "test 1: .$a. .$b. .$c." )
+printf 'a\t\tb\tc\n' | ( IFS=$(printf " \t") read a b c; echo "test 2: .$a. .$b. .$c." )
+printf 'a,,b,c\n'    | ( IFS="," read a b c;  echo "test 3: .$a. .$b. .$c." )
+printf 'a,,b,c\n'    | ( IFS=" ," read a b c; echo "test 4: .$a. .$b. .$c." )
+printf 'a ,, c\n'    | ( IFS=" ," read a b c; echo "test 5: .$a. .$b. .$c." )
+printf 'a ,, c d\n'  | ( IFS=" ," read a b c d;     echo "test 6: .$a. .$b. .$c. .$d." )
+printf ' a,,b,c,d  ,  ,\n' | ( IFS=" ," read a b c; echo "test 7: .$a. .$b. .$c." )
+printf '\t,\ta\t,\tb\tc'   | ( IFS=$(printf " \t,") read a b c d;   echo "test 8: .$a. .$b. .$c. .$d." )
+printf '\t\ta\t,\tb\tc'    | ( IFS=$(printf " \t,") read a b c d;   echo "test 9: .$a. .$b. .$c. .$d." )
+printf '\t,\ta\t,,\tb\tc'  | ( IFS=$(printf " \t,") read a b c d e; echo "test A: .$a. .$b. .$c. .$d. .$e." )
diff --git a/shell/hush_test/hush-read/read_n.right b/shell/hush_test/hush-read/read_n.right
new file mode 100644
index 0000000..1f81af0
--- /dev/null
+++ b/shell/hush_test/hush-read/read_n.right
@@ -0,0 +1,3 @@
+test
+tes
+tes
diff --git a/shell/hush_test/hush-read/read_n.tests b/shell/hush_test/hush-read/read_n.tests
new file mode 100755
index 0000000..12423ba
--- /dev/null
+++ b/shell/hush_test/hush-read/read_n.tests
@@ -0,0 +1,3 @@
+echo 'test' | (read reply; echo "$reply")
+echo 'test' | (read -n 3 reply; echo "$reply")
+echo 'test' | (read -n3 reply; echo "$reply")
diff --git a/shell/hush_test/hush-read/read_r.right b/shell/hush_test/hush-read/read_r.right
new file mode 100644
index 0000000..3536bf7
--- /dev/null
+++ b/shell/hush_test/hush-read/read_r.right
@@ -0,0 +1,2 @@
+testbest
+test\
diff --git a/shell/hush_test/hush-read/read_r.tests b/shell/hush_test/hush-read/read_r.tests
new file mode 100755
index 0000000..2c4cc61
--- /dev/null
+++ b/shell/hush_test/hush-read/read_r.tests
@@ -0,0 +1,2 @@
+echo -e 'test\\\nbest' | (read reply; echo "$reply")
+echo -e 'test\\\nbest' | (read -r reply; echo "$reply")
diff --git a/shell/hush_test/hush-read/read_t.right b/shell/hush_test/hush-read/read_t.right
new file mode 100644
index 0000000..04126cb
--- /dev/null
+++ b/shell/hush_test/hush-read/read_t.right
@@ -0,0 +1,4 @@
+><
+><
+>test<
+>test<
diff --git a/shell/hush_test/hush-read/read_t.tests b/shell/hush_test/hush-read/read_t.tests
new file mode 100755
index 0000000..d65f1ae
--- /dev/null
+++ b/shell/hush_test/hush-read/read_t.tests
@@ -0,0 +1,10 @@
+# bash 3.2 outputs:
+
+# ><
+{ echo -n 'te'; sleep 2; echo 'st'; }   | (read -t 1 reply; echo ">$reply<")
+# ><
+{               sleep 2; echo 'test'; } | (read -t 1 reply; echo ">$reply<")
+# >test<
+{ echo -n 'te'; sleep 1; echo 'st'; }   | (read -t 2 reply; echo ">$reply<")
+# >test<
+{               sleep 1; echo 'test'; } | (read -t 2 reply; echo ">$reply<")