Blame SPECS/ksh-20120801-lexfix.patch

Packit 992a25
diff -up ksh-20120801/src/cmd/ksh93/edit/edit.c.trajfiks ksh-20120801/src/cmd/ksh93/edit/edit.c
Packit 992a25
--- ksh-20120801/src/cmd/ksh93/edit/edit.c.trajfiks	2012-08-02 00:18:19.000000000 +0200
Packit 992a25
+++ ksh-20120801/src/cmd/ksh93/edit/edit.c	2014-02-06 12:12:11.570942651 +0100
Packit 992a25
@@ -53,6 +53,7 @@
Packit 992a25
 
Packit 992a25
 static char CURSOR_UP[20] = { ESC, '[', 'A', 0 };
Packit 992a25
 static char KILL_LINE[20] = { ESC, '[', 'J', 0 };
Packit 992a25
+static char *savelex;
Packit 992a25
 
Packit 992a25
 
Packit 992a25
 
Packit 992a25
@@ -232,6 +233,8 @@ int tty_set(int fd, int action, struct t
Packit 992a25
 void tty_cooked(register int fd)
Packit 992a25
 {
Packit 992a25
 	register Edit_t *ep = (Edit_t*)(shgd->ed_context);
Packit 992a25
+	if(ep->sh->st.trap[SH_KEYTRAP] && savelex)
Packit 992a25
+		memcpy(ep->sh->lex_context,savelex,ep->sh->lexsize);
Packit 992a25
 	ep->e_keytrap = 0;
Packit 992a25
 	if(ep->e_raw==0)
Packit 992a25
 		return;
Packit 992a25
@@ -783,6 +786,13 @@ void	ed_setup(register Edit_t *ep, int f
Packit 992a25
 			ep->e_lbuf[n] = *pp++;
Packit 992a25
 		ep->e_default = 0;
Packit 992a25
 	}
Packit 992a25
+	if(ep->sh->st.trap[SH_KEYTRAP])
Packit 992a25
+	{
Packit 992a25
+		if(!savelex)
Packit 992a25
+			savelex = (char*)malloc(shp->lexsize);
Packit 992a25
+		if(savelex)
Packit 992a25
+			memcpy(savelex, ep->sh->lex_context, ep->sh->lexsize);
Packit 992a25
+	}
Packit 992a25
 }
Packit 992a25
 
Packit 992a25
 static void ed_putstring(register Edit_t *ep, const char *str)
Packit 992a25
diff -up ksh-20120801/src/cmd/ksh93/include/defs.h.trajfiks ksh-20120801/src/cmd/ksh93/include/defs.h
Packit 992a25
--- ksh-20120801/src/cmd/ksh93/include/defs.h.trajfiks	2014-02-06 12:18:13.149091836 +0100
Packit 992a25
+++ ksh-20120801/src/cmd/ksh93/include/defs.h	2014-02-06 12:18:13.175091784 +0100
Packit 992a25
@@ -224,6 +224,7 @@ struct shared
Packit 992a25
 	int		xargexit; \
Packit 992a25
 	int		nenv; \
Packit 992a25
 	mode_t		mask; \
Packit 992a25
+	int             lexsize; \
Packit 992a25
 	Env_t		*env; \
Packit 992a25
 	void		*init_context; \
Packit 992a25
 	void		*mac_context; \
Packit 992a25
diff -up ksh-20120801/src/cmd/ksh93/sh/lex.c.trajfiks ksh-20120801/src/cmd/ksh93/sh/lex.c
Packit 992a25
--- ksh-20120801/src/cmd/ksh93/sh/lex.c.trajfiks	2014-02-06 12:19:13.587950320 +0100
Packit 992a25
+++ ksh-20120801/src/cmd/ksh93/sh/lex.c	2014-02-06 12:19:13.623950219 +0100
Packit 992a25
@@ -268,6 +268,7 @@ Lex_t *sh_lexopen(Lex_t *lp, Shell_t *sp
Packit 992a25
 	{
Packit 992a25
 		lp = (Lex_t*)newof(0,Lex_t,1,0);
Packit 992a25
 		lp->sh = sp;
Packit 992a25
+		sp->lexsize = sizeof(Lex_t);
Packit 992a25
 	}
Packit 992a25
 	fcnotify(lex_advance,lp);
Packit 992a25
 	lp->lex.intest = lp->lex.incase = lp->lex.skipword = lp->lexd.warn = 0;