diff options
author | Wayne Davison <wayned@users.sourceforge.net> | 2001-09-18 17:50:26 +0000 |
---|---|---|
committer | Wayne Davison <wayned@users.sourceforge.net> | 2001-09-18 17:50:26 +0000 |
commit | f38b2c5aa88ee731d99879cadfd325403305f308 (patch) | |
tree | aeea9bfb19ab5854a0793a37fd67b2b14d6960b9 | |
parent | c4ee773a03e56ba3eabf016a43db473eedaa891a (diff) | |
download | zsh-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.c | 15 |
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 */ |