summaryrefslogtreecommitdiffstats
path: root/text-utils/more.c
diff options
context:
space:
mode:
Diffstat (limited to 'text-utils/more.c')
-rw-r--r--text-utils/more.c14
1 files changed, 13 insertions, 1 deletions
diff --git a/text-utils/more.c b/text-utils/more.c
index b759859d1..acd58c8b0 100644
--- a/text-utils/more.c
+++ b/text-utils/more.c
@@ -177,6 +177,7 @@ int soglitch; /* terminal has standout mode glitch */
int ulglitch; /* terminal has underline mode glitch */
int pstate = 0; /* current UL state */
static int magic(FILE *, char *);
+char *previousre; /* previous search() buf[] item */
struct {
long chrctr, line;
} context, screen_start;
@@ -420,6 +421,7 @@ int main(int argc, char **argv) {
}
if (srchopt)
{
+ previousre = xstrdup(initbuf);
search (initbuf, stdin, 1);
if (noscroll)
left--;
@@ -441,6 +443,7 @@ int main(int argc, char **argv) {
if (firstf) {
firstf = 0;
if (srchopt) {
+ previousre = xstrdup(initbuf);
search (initbuf, f, 1);
if (noscroll)
left--;
@@ -492,6 +495,7 @@ int main(int argc, char **argv) {
fnum++;
firstf = 0;
}
+ free (previousre);
reset_tty ();
exit(EXIT_SUCCESS);
}
@@ -1332,6 +1336,10 @@ int command (char *filename, register FILE *f)
fflush (stdout);
break;
case 'n':
+ if (!previousre) {
+ more_error (_("No previous regular expression"));
+ break;
+ }
lastp++;
/* fallthrough */
case '/':
@@ -1342,11 +1350,13 @@ int command (char *filename, register FILE *f)
fflush (stdout);
if (lastp) {
putcerr('\r');
- search (NULL, f, nlines); /* Use previous r.e. */
+ search (previousre, f, nlines);
}
else {
ttyin (cmdbuf, sizeof(cmdbuf)-2, '/');
putcerr('\r');
+ free (previousre);
+ previousre = xstrdup(cmdbuf);
search (cmdbuf, f, nlines);
}
ret (dlines-1);
@@ -1647,6 +1657,8 @@ void search(char buf[], FILE *file, register int n)
end_it (0);
}
more_error (_("Pattern not found"));
+ free (previousre);
+ previousre = NULL;
}
}