about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog5
-rw-r--r--Src/builtin.c7
-rw-r--r--Test/B04read.ztst5
3 files changed, 15 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog
index fddf16222..68aad4aba 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,8 @@
 2011-01-07  Peter Stephenson  <pws@csr.com>
 
+	* 28590 (added a comment): Src/builtin.c, Test/B04read.ztst:
+	read builtin should return non-zero status on error.
+
 	* Mikael: 28585: Completion/Unix/Command/_mkdir: don't set ret=0
 	when _wanted fails to find any matches.
 
@@ -14066,5 +14069,5 @@
 
 *****************************************************
 * This is used by the shell to define $ZSH_PATCHLEVEL
-* $Revision: 1.5174 $
+* $Revision: 1.5175 $
 *****************************************************
diff --git a/Src/builtin.c b/Src/builtin.c
index 411b834e7..a85a49a20 100644
--- a/Src/builtin.c
+++ b/Src/builtin.c
@@ -5710,7 +5710,12 @@ bin_read(char *name, char **args, Options ops, UNUSED(int func))
 	}
 	return 1;
     }
-    return 0;
+    /*
+     * The following is to ensure a failure to set the parameter
+     * causes a non-zero status return.  There are arguments for
+     * turning a non-zero status into errflag more widely.
+     */
+    return errflag;
 }
 
 /**/
diff --git a/Test/B04read.ztst b/Test/B04read.ztst
index 2c87aa67a..ad427dc0d 100644
--- a/Test/B04read.ztst
+++ b/Test/B04read.ztst
@@ -88,3 +88,8 @@
  print ${#line}
 0:read with trailing metafied characters
 >24
+
+ (typeset -r foo
+  read foo) <<<bar
+1:return status on failing to set parameter
+?(eval):2: read-only variable: foo