about summary refs log tree commit diff
path: root/Src/Modules
diff options
context:
space:
mode:
authorPeter Stephenson <p.w.stephenson@ntlworld.com>2014-12-07 16:24:19 +0000
committerPeter Stephenson <p.w.stephenson@ntlworld.com>2014-12-07 16:24:19 +0000
commitab09c24a49951bfafb0ebd075fdd3e99e064f5aa (patch)
tree861f2bd493fd5bd50a08756a34585d6b7c151e8f /Src/Modules
parent908abba89147f8a4e4991c4464a95ee90d1078f6 (diff)
downloadzsh-ab09c24a49951bfafb0ebd075fdd3e99e064f5aa.tar.gz
zsh-ab09c24a49951bfafb0ebd075fdd3e99e064f5aa.tar.xz
zsh-ab09c24a49951bfafb0ebd075fdd3e99e064f5aa.zip
First go at separating errors and keyboard interrupts
This is the first posting exactly as was, with known errors and
omissions.

Basic strategy is to introduce bits to errflag and to set and
reset them separately.
Diffstat (limited to 'Src/Modules')
-rw-r--r--Src/Modules/zpty.c2
-rw-r--r--Src/Modules/zutil.c8
2 files changed, 6 insertions, 4 deletions
diff --git a/Src/Modules/zpty.c b/Src/Modules/zpty.c
index 63c79a731..7b6130c6f 100644
--- a/Src/Modules/zpty.c
+++ b/Src/Modules/zpty.c
@@ -308,7 +308,7 @@ newptycmd(char *nam, char *pname, char **args, int echo, int nblock)
 
     prog = parse_string(zjoin(args, ' ', 1), 0);
     if (!prog) {
-	errflag = 0;
+	errflag &= ~ERRFLAG_ERROR;
 	scriptname = oscriptname;
 	ineval = oineval;
 	return 1;
diff --git a/Src/Modules/zutil.c b/Src/Modules/zutil.c
index 1cca0c4b8..c89495070 100644
--- a/Src/Modules/zutil.c
+++ b/Src/Modules/zutil.c
@@ -301,7 +301,8 @@ setstypat(Style s, char *pat, Patprog prog, char **vals, int eval)
 	int ef = errflag;
 
 	eprog = parse_string(zjoin(vals, ' ', 1), 0);
-	errflag = ef;
+	/* Keep any user interrupt error status */
+	errflag = ef | (errflag & ERRFLAG_INT);
 
 	if (!eprog)
 	{
@@ -394,10 +395,11 @@ evalstyle(Stypat p)
     unsetparam("reply");
     execode(p->eval, 1, 0, "style");
     if (errflag) {
-	errflag = ef;
+	/* Keep any user interrupt error status */
+	errflag = ef | (errflag & ERRFLAG_INT);
 	return NULL;
     }
-    errflag = ef;
+    errflag = ef | (errflag & ERRFLAG_INT);
 
     queue_signals();
     if ((ret = getaparam("reply")))