summary refs log tree commit diff
diff options
context:
space:
mode:
authorWayne Davison <wayned@users.sourceforge.net>2001-09-18 17:50:26 +0000
committerWayne Davison <wayned@users.sourceforge.net>2001-09-18 17:50:26 +0000
commitf38b2c5aa88ee731d99879cadfd325403305f308 (patch)
treeaeea9bfb19ab5854a0793a37fd67b2b14d6960b9
parentc4ee773a03e56ba3eabf016a43db473eedaa891a (diff)
downloadzsh-f38b2c5aa88ee731d99879cadfd325403305f308.tar.gz
zsh-f38b2c5aa88ee731d99879cadfd325403305f308.tar.xz
zsh-f38b2c5aa88ee731d99879cadfd325403305f308.zip
Further modify the "fc -l" code to tolerate out-of range values.
-rw-r--r--Src/builtin.c15
1 files changed, 6 insertions, 9 deletions
diff --git a/Src/builtin.c b/Src/builtin.c
index 083e50f95..815ec0aca 100644
--- a/Src/builtin.c
+++ b/Src/builtin.c
@@ -1208,7 +1208,7 @@ printif(char *str, int c)
 int
 bin_fc(char *nam, char **argv, char *ops, int func)
 {
-    int first = -1, last = -1, retval, minflag = 0;
+    int first = -1, last = -1, retval;
     char *s;
     struct asgment *asgf = NULL, *asgl = NULL;
     Patprog pprog = NULL;
@@ -1267,7 +1267,6 @@ bin_fc(char *nam, char **argv, char *ops, int func)
     }
     /* interpret and check first history line specifier */
     if (*argv) {
-	minflag = **argv == '-';
 	first = fcgetcomm(*argv);
 	if (first == -1) {
 	    unqueue_signals();
@@ -1299,9 +1298,9 @@ bin_fc(char *nam, char **argv, char *ops, int func)
     if (last == -1)
 	last = ops['l']? addhistnum(curline.histnum,-1,0) : first;
     if (first < firsthist())
-	first = firsthist() - (first == last);
+	first = firsthist() - (last < firsthist());
     if (last > curhist)
-	last = (minflag) ? curhist : first;
+	last = curhist;
     else if (last < first)
 	last = first;
     if (ops['l']) {
@@ -1365,13 +1364,11 @@ fcgetcomm(char *s)
 
     /* First try to match a history number.  Negative *
      * numbers indicate reversed numbering.           */
-    if ((cmd = atoi(s))) {
+    if ((cmd = atoi(s)) != 0 || *s == '0') {
 	if (cmd < 0)
 	    cmd = addhistnum(curline.histnum,cmd,HIST_FOREIGN);
-	if (cmd < firsthist()) {
-	    zwarnnam("fc", "bad history number: %d", 0, cmd);
-	    return -1;
-	}
+	if (cmd < 0)
+	    cmd = 0;
 	return cmd;
     }
     /* not a number, so search by string */