97c6af7
From 598b93bd179a98d0cf09bac7645e8f8e11af6b44 Mon Sep 17 00:00:00 2001
Jaromír Končický 03d5bc4
From: Roman Kollar <rkollar@redhat.com>
Jaromír Končický 03d5bc4
Date: Fri, 12 Oct 2012 13:40:12 +0200
97c6af7
Subject: [PATCH 14/14] Reverse patch for history handling in loops
Jaromír Končický 03d5bc4
Jaromír Končický 03d5bc4
Originally reported at Red Hat Bugzilla:
Jaromír Končický 03d5bc4
https://bugzilla.redhat.com/show_bug.cgi?id=814069
Jaromír Končický 03d5bc4
Jaromír Končický 03d5bc4
Reverse patch for commit 23a51b0a709628af57729a07cbbfae3c95e98e6f in the upstream repo
Jaromír Končický 03d5bc4
Jaromír Končický 03d5bc4
Adjusted by Jaromir Koncicky (jkoncick) to fit with version 6.18.01
97c6af7
Jaromír Končický 03d5bc4
---
97c6af7
 sh.func.c | 134 +-------------------------------------------------------------
97c6af7
 1 file changed, 1 insertion(+), 133 deletions(-)
Jaromír Končický 03d5bc4
Jaromír Končický 03d5bc4
diff --git a/sh.func.c b/sh.func.c
97c6af7
index 869de12..61ef84c 100644
Jaromír Končický 03d5bc4
--- a/sh.func.c
Jaromír Končický 03d5bc4
+++ b/sh.func.c
Jaromír Končický 03d5bc4
@@ -61,7 +61,6 @@ static	void	doagain		(void);
Jaromír Končický 03d5bc4
 static  const char *isrchx	(int);
Jaromír Končický 03d5bc4
 static	void	search		(int, int, Char *);
Jaromír Končický 03d5bc4
 static	int	getword		(struct Strbuf *);
Jaromír Končický 03d5bc4
-static	struct wordent	*histgetword	(struct wordent *);
Jaromír Končický 03d5bc4
 static	void	toend		(void);
Jaromír Končický 03d5bc4
 static	void	xecho		(int, Char **);
Jaromír Končický 03d5bc4
 static	int	islocale_var	(Char *);
Jaromír Končický 03d5bc4
@@ -754,7 +753,6 @@ search(int type, int level, Char *goal)
Jaromír Končický 03d5bc4
 {
Jaromír Končický 03d5bc4
     struct Strbuf word = Strbuf_INIT;
Jaromír Končický 03d5bc4
     Char *cp;
Jaromír Končický 03d5bc4
-    struct wordent *histent = NULL, *ohistent = NULL;
Jaromír Končický 03d5bc4
 
Jaromír Končický 03d5bc4
     Stype = type;
Jaromír Končický 03d5bc4
     Sgoal = goal;
Jaromír Končický 03d5bc4
@@ -767,28 +765,12 @@ search(int type, int level, Char *goal)
Jaromír Končický 03d5bc4
     }
Jaromír Končický 03d5bc4
     cleanup_push(&word, Strbuf_cleanup);
Jaromír Končický 03d5bc4
     do {
Jaromír Končický 03d5bc4
-	    
Jaromír Končický 03d5bc4
-	if (intty) {
Jaromír Končický 03d5bc4
-	    histent = xmalloc(sizeof(*histent));
Jaromír Končický 03d5bc4
-	    ohistent = xmalloc(sizeof(*histent));
Jaromír Končický 03d5bc4
-	    ohistent->word = STRNULL;
Jaromír Končický 03d5bc4
-	    ohistent->next = histent;
Jaromír Končický 03d5bc4
-	    histent->prev = ohistent;
Jaromír Končický 03d5bc4
-	}
Jaromír Končický 03d5bc4
-
Jaromír Končický 03d5bc4
 	if (intty && fseekp == feobp && aret == TCSH_F_SEEK)
Jaromír Končický 03d5bc4
 	    printprompt(1, isrchx(type == TC_BREAK ? zlast : type));
Jaromír Končický 03d5bc4
 	/* xprintf("? "), flush(); */
Jaromír Končický 03d5bc4
 	(void) getword(&word);
Jaromír Končický 03d5bc4
 	Strbuf_terminate(&word);
Jaromír Končický 03d5bc4
 
Jaromír Končický 03d5bc4
-	if (intty && Strlen(word.s) > 0) {
Jaromír Končický 03d5bc4
-	    histent->word = Strsave(word.s);
Jaromír Končický 03d5bc4
-	    histent->next = xmalloc(sizeof(*histent));
Jaromír Končický 03d5bc4
-	    histent->next->prev = histent;
Jaromír Končický 03d5bc4
-	    histent = histent->next;
Jaromír Končický 03d5bc4
-	}
Jaromír Končický 03d5bc4
-
Jaromír Končický 03d5bc4
 	switch (srchx(word.s)) {
Jaromír Končický 03d5bc4
 
Jaromír Končický 03d5bc4
 	case TC_ELSE:
Jaromír Končický 03d5bc4
@@ -864,126 +846,12 @@ search(int type, int level, Char *goal)
Jaromír Končický 03d5bc4
 		level = -1;
Jaromír Končický 03d5bc4
 	    break;
Jaromír Končický 03d5bc4
 	}
Jaromír Končický 03d5bc4
-	if (intty) {
Jaromír Končický 03d5bc4
-	    ohistent->prev = histgetword(histent);
Jaromír Končický 03d5bc4
-	    ohistent->prev->next = ohistent;
Jaromír Končický 03d5bc4
-	    savehist(ohistent, 0);
Jaromír Končický 03d5bc4
-	    freelex(ohistent);
Jaromír Končický 03d5bc4
-	    xfree(ohistent);
Jaromír Končický 03d5bc4
-	} else 
Jaromír Končický 03d5bc4
-	    (void) getword(NULL);
Jaromír Končický 03d5bc4
+    (void) getword(NULL);
Jaromír Končický 03d5bc4
     } while (level >= 0);
Jaromír Končický 03d5bc4
  end:
Jaromír Končický 03d5bc4
     cleanup_until(&word);
Jaromír Končický 03d5bc4
 }
Jaromír Končický 03d5bc4
 
Jaromír Končický 03d5bc4
-static struct wordent *
Jaromír Končický 03d5bc4
-histgetword(struct wordent *histent) 
Jaromír Končický 03d5bc4
-{
Jaromír Končický 03d5bc4
-    int found = 0, first;
Jaromír Končický 03d5bc4
-    eChar c, d;
Jaromír Končický 03d5bc4
-    int e;
Jaromír Končický 03d5bc4
-    struct Strbuf *tmp;
Jaromír Končický 03d5bc4
-    tmp = xmalloc(sizeof(*tmp));
Jaromír Končický 03d5bc4
-    tmp->size = 0;
Jaromír Končický 03d5bc4
-    tmp->s = NULL;
Jaromír Končický 03d5bc4
-    c = readc(1);
Jaromír Končický 03d5bc4
-    d = 0;
Jaromír Končický 03d5bc4
-    e = 0;
Jaromír Končický 03d5bc4
-    for (;;) {
Jaromír Končický 03d5bc4
-	tmp->len = 0;
Jaromír Končický 03d5bc4
-	Strbuf_terminate (tmp);
Jaromír Končický 03d5bc4
-	while (c == ' ' || c == '\t')
Jaromír Končický 03d5bc4
-	    c = readc(1);
Jaromír Končický 03d5bc4
-	if (c == '#')
Jaromír Končický 03d5bc4
-	    do
Jaromír Končický 03d5bc4
-		c = readc(1);
Jaromír Končický 03d5bc4
-	    while (c != CHAR_ERR && c != '\n');
Jaromír Končický 03d5bc4
-	if (c == CHAR_ERR)
Jaromír Končický 03d5bc4
-	    goto past;
Jaromír Končický 03d5bc4
-	if (c == '\n') 
Jaromír Končický 03d5bc4
-	    goto nl;
Jaromír Končický 03d5bc4
-	unreadc(c);
Jaromír Končický 03d5bc4
-	found = 1;
Jaromír Končický 03d5bc4
-	first = 1;
Jaromír Končický 03d5bc4
-	do {
Jaromír Končický 03d5bc4
-	    e = (c == '\\');
Jaromír Končický 03d5bc4
-	    c = readc(1);
Jaromír Končický 03d5bc4
-	    if (c == '\\' && !e) {
Jaromír Končický 03d5bc4
-		if ((c = readc(1)) == '\n') {
Jaromír Končický 03d5bc4
-		    e = 1;
Jaromír Končický 03d5bc4
-		    c = ' ';
Jaromír Končický 03d5bc4
-		} else {
Jaromír Končický 03d5bc4
-		    unreadc(c);
Jaromír Končický 03d5bc4
-		    c = '\\';
Jaromír Končický 03d5bc4
-		}
Jaromír Končický 03d5bc4
-	    }
Jaromír Končický 03d5bc4
-	    if ((c == '\'' || c == '"') && !e) {
Jaromír Končický 03d5bc4
-		if (d == 0)
Jaromír Končický 03d5bc4
-		    d = c;
Jaromír Končický 03d5bc4
-		else if (d == c)
Jaromír Končický 03d5bc4
-		    d = 0;
Jaromír Končický 03d5bc4
-	    }
Jaromír Končický 03d5bc4
-	    if (c == CHAR_ERR)
Jaromír Končický 03d5bc4
-		goto past;
Jaromír Končický 03d5bc4
-	    
Jaromír Končický 03d5bc4
-	    Strbuf_append1(tmp, (Char) c);
Jaromír Končický 03d5bc4
-	    
Jaromír Končický 03d5bc4
-	    if (!first && !d && c == '(' && !e) {
Jaromír Končický 03d5bc4
-		break;
Jaromír Končický 03d5bc4
-	    }
Jaromír Končický 03d5bc4
-	    first = 0;
Jaromír Končický 03d5bc4
-	} while (d || e || (c != ' ' && c != '\t' && c != '\n'));
Jaromír Končický 03d5bc4
-	tmp->len--;
Jaromír Končický 03d5bc4
-	if (tmp->len) {
Jaromír Končický 03d5bc4
-	    Strbuf_terminate(tmp);
Jaromír Končický 03d5bc4
-	    histent->word = Strsave(tmp->s);
Jaromír Končický 03d5bc4
-	    histent->next = xmalloc(sizeof (*histent));
Jaromír Končický 03d5bc4
-	    histent->next->prev = histent;
Jaromír Končický 03d5bc4
-	    histent = histent->next;
Jaromír Končický 03d5bc4
-	}
Jaromír Končický 03d5bc4
-	if (c == '\n') {
Jaromír Končický 03d5bc4
-	nl:
Jaromír Končický 03d5bc4
-	    tmp->len = 0;
Jaromír Končický 03d5bc4
-	    Strbuf_append1(tmp, (Char) c);
Jaromír Končický 03d5bc4
-	    Strbuf_terminate(tmp);
Jaromír Končický 03d5bc4
-	    histent->word = Strsave(tmp->s);
Jaromír Končický 03d5bc4
-	    return histent;
Jaromír Končický 03d5bc4
-	}
Jaromír Končický 03d5bc4
-    }
Jaromír Končický 03d5bc4
-    
Jaromír Končický 03d5bc4
-past:
Jaromír Končický 03d5bc4
-    switch (Stype) {
Jaromír Končický 03d5bc4
-
Jaromír Končický 03d5bc4
-    case TC_IF:
Jaromír Končický 03d5bc4
-	stderror(ERR_NAME | ERR_NOTFOUND, "then/endif");
Jaromír Končický 03d5bc4
-	break;
Jaromír Končický 03d5bc4
-
Jaromír Končický 03d5bc4
-    case TC_ELSE:
Jaromír Končický 03d5bc4
-	stderror(ERR_NAME | ERR_NOTFOUND, "endif");
Jaromír Končický 03d5bc4
-	break;
Jaromír Končický 03d5bc4
-
Jaromír Končický 03d5bc4
-    case TC_BRKSW:
Jaromír Končický 03d5bc4
-    case TC_SWITCH:
Jaromír Končický 03d5bc4
-	stderror(ERR_NAME | ERR_NOTFOUND, "endsw");
Jaromír Končický 03d5bc4
-	break;
Jaromír Končický 03d5bc4
-
Jaromír Končický 03d5bc4
-    case TC_BREAK:
Jaromír Končický 03d5bc4
-	stderror(ERR_NAME | ERR_NOTFOUND, "end");
Jaromír Končický 03d5bc4
-	break;
Jaromír Končický 03d5bc4
-
Jaromír Končický 03d5bc4
-    case TC_GOTO:
Jaromír Končický 03d5bc4
-	setname(short2str(Sgoal));
Jaromír Končický 03d5bc4
-	stderror(ERR_NAME | ERR_NOTFOUND, "label");
Jaromír Končický 03d5bc4
-	break;
Jaromír Končický 03d5bc4
-
Jaromír Končický 03d5bc4
-    default:
Jaromír Končický 03d5bc4
-	break;
Jaromír Končický 03d5bc4
-    }
Jaromír Končický 03d5bc4
-    /* NOTREACHED */
Jaromír Končický 03d5bc4
-    return NULL;
Jaromír Končický 03d5bc4
-}
Jaromír Končický 03d5bc4
-
Jaromír Končický 03d5bc4
 static int
Jaromír Končický 03d5bc4
 getword(struct Strbuf *wp)
Jaromír Končický 03d5bc4
 {
Jaromír Končický 03d5bc4
-- 
97c6af7
1.9.3
Jaromír Končický 03d5bc4