Recognize '-' as standard input in pcre2test.
This commit is contained in:
parent
8aa511a98b
commit
a15a4de10b
|
@ -181,10 +181,12 @@ Output the PCRE2 version number and then exit.
|
||||||
.rs
|
.rs
|
||||||
.sp
|
.sp
|
||||||
If \fBpcre2test\fP is given two filename arguments, it reads from the first and
|
If \fBpcre2test\fP is given two filename arguments, it reads from the first and
|
||||||
writes to the second. If it is given only one filename argument, it reads from
|
writes to the second. If the first name is "-", input is taken from the
|
||||||
|
standard input. If \fBpcre2test\fP is given only one argument, it reads from
|
||||||
that file and writes to stdout. Otherwise, it reads from stdin and writes to
|
that file and writes to stdout. Otherwise, it reads from stdin and writes to
|
||||||
stdout, and prompts for each line of input, using "re>" to prompt for regular
|
stdout. When the input is a terminal, it prompts for each line of input, using
|
||||||
expression patterns, and "data>" to prompt for subject lines.
|
"re>" to prompt for regular expression patterns, and "data>" to prompt for
|
||||||
|
subject lines.
|
||||||
.P
|
.P
|
||||||
When \fBpcre2test\fP is built, a configuration option can specify that it
|
When \fBpcre2test\fP is built, a configuration option can specify that it
|
||||||
should be linked with the \fBlibreadline\fP or \fBlibedit\fP library. When this
|
should be linked with the \fBlibreadline\fP or \fBlibedit\fP library. When this
|
||||||
|
|
|
@ -66,15 +66,16 @@ it references only the enabled library functions. */
|
||||||
#include <locale.h>
|
#include <locale.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
|
|
||||||
|
#ifdef HAVE_UNISTD_H
|
||||||
|
#include <unistd.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Both libreadline and libedit are optionally supported. The user-supplied
|
/* Both libreadline and libedit are optionally supported. The user-supplied
|
||||||
original patch uses readline/readline.h for libedit, but in at least one system
|
original patch uses readline/readline.h for libedit, but in at least one system
|
||||||
it is installed as editline/readline.h, so the configuration code now looks for
|
it is installed as editline/readline.h, so the configuration code now looks for
|
||||||
that first, falling back to readline/readline.h. */
|
that first, falling back to readline/readline.h. */
|
||||||
|
|
||||||
#if defined(SUPPORT_LIBREADLINE) || defined(SUPPORT_LIBEDIT)
|
#if defined(SUPPORT_LIBREADLINE) || defined(SUPPORT_LIBEDIT)
|
||||||
#ifdef HAVE_UNISTD_H
|
|
||||||
#include <unistd.h>
|
|
||||||
#endif
|
|
||||||
#if defined(SUPPORT_LIBREADLINE)
|
#if defined(SUPPORT_LIBREADLINE)
|
||||||
#include <readline/readline.h>
|
#include <readline/readline.h>
|
||||||
#include <readline/history.h>
|
#include <readline/history.h>
|
||||||
|
@ -87,6 +88,11 @@ that first, falling back to readline/readline.h. */
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* Put the test for interactive input into a macro so that it can be changed if
|
||||||
|
required for different environments. */
|
||||||
|
|
||||||
|
#define INTERACTIVE(f) isatty(fileno(f))
|
||||||
|
|
||||||
|
|
||||||
/* ---------------------- System-specific definitions ---------------------- */
|
/* ---------------------- System-specific definitions ---------------------- */
|
||||||
|
|
||||||
|
@ -2537,7 +2543,7 @@ for (;;)
|
||||||
newline, so we must put it back again, to be compatible with fgets(). */
|
newline, so we must put it back again, to be compatible with fgets(). */
|
||||||
|
|
||||||
#if defined(SUPPORT_LIBREADLINE) || defined(SUPPORT_LIBEDIT)
|
#if defined(SUPPORT_LIBREADLINE) || defined(SUPPORT_LIBEDIT)
|
||||||
if (isatty(fileno(f)))
|
if (INTERACTIVE(f))
|
||||||
{
|
{
|
||||||
size_t len;
|
size_t len;
|
||||||
char *s = readline(prompt);
|
char *s = readline(prompt);
|
||||||
|
@ -2553,10 +2559,10 @@ for (;;)
|
||||||
else
|
else
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Read the next line by normal means, prompting if the file is stdin. */
|
/* Read the next line by normal means, prompting if the file is a tty. */
|
||||||
|
|
||||||
{
|
{
|
||||||
if (f == stdin) printf("%s", prompt);
|
if (INTERACTIVE(f)) printf("%s", prompt);
|
||||||
if (fgets((char *)here, rlen, f) == NULL)
|
if (fgets((char *)here, rlen, f) == NULL)
|
||||||
return (here == start)? NULL : start;
|
return (here == start)? NULL : start;
|
||||||
}
|
}
|
||||||
|
@ -3624,7 +3630,7 @@ for(;;)
|
||||||
fprintf(outfile, "** Unexpected EOF\n");
|
fprintf(outfile, "** Unexpected EOF\n");
|
||||||
return PR_ABEND;
|
return PR_ABEND;
|
||||||
}
|
}
|
||||||
if (infile != stdin) fprintf(outfile, "%s", (char *)p);
|
if (!INTERACTIVE(infile)) fprintf(outfile, "%s", (char *)p);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* If the first character after the delimiter is backslash, make the pattern
|
/* If the first character after the delimiter is backslash, make the pattern
|
||||||
|
@ -5637,7 +5643,7 @@ def_datctl.cfail[0] = def_datctl.cfail[1] = CFAIL_UNSET;
|
||||||
|
|
||||||
/* Scan command line options. */
|
/* Scan command line options. */
|
||||||
|
|
||||||
while (argc > 1 && argv[op][0] == '-')
|
while (argc > 1 && argv[op][0] == '-' && argv[op][1] != 0)
|
||||||
{
|
{
|
||||||
const char *endptr;
|
const char *endptr;
|
||||||
char *arg = argv[op];
|
char *arg = argv[op];
|
||||||
|
@ -5883,7 +5889,7 @@ if ((arg_pattern != NULL &&
|
||||||
infile = stdin;
|
infile = stdin;
|
||||||
outfile = stdout;
|
outfile = stdout;
|
||||||
|
|
||||||
if (argc > 1)
|
if (argc > 1 && strcmp(argv[op], "-") != 0)
|
||||||
{
|
{
|
||||||
infile = fopen(argv[op], INPUT_MODE);
|
infile = fopen(argv[op], INPUT_MODE);
|
||||||
if (infile == NULL)
|
if (infile == NULL)
|
||||||
|
@ -5927,7 +5933,7 @@ while (notdone)
|
||||||
|
|
||||||
if (extend_inputline(infile, buffer, expectdata? "data> " : " re> ") == NULL)
|
if (extend_inputline(infile, buffer, expectdata? "data> " : " re> ") == NULL)
|
||||||
break;
|
break;
|
||||||
if (infile != stdin) fprintf(outfile, "%s", (char *)buffer);
|
if (!INTERACTIVE(infile)) fprintf(outfile, "%s", (char *)buffer);
|
||||||
fflush(outfile);
|
fflush(outfile);
|
||||||
p = buffer;
|
p = buffer;
|
||||||
|
|
||||||
|
@ -5987,7 +5993,7 @@ while (notdone)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (rc == PR_SKIP && infile != stdin) skipping = TRUE;
|
if (rc == PR_SKIP && !INTERACTIVE(infile)) skipping = TRUE;
|
||||||
else if (rc == PR_ABEND)
|
else if (rc == PR_ABEND)
|
||||||
{
|
{
|
||||||
fprintf(outfile, "** pcre2test run abandoned\n");
|
fprintf(outfile, "** pcre2test run abandoned\n");
|
||||||
|
@ -5998,7 +6004,7 @@ while (notdone)
|
||||||
|
|
||||||
/* Finish off a normal run. */
|
/* Finish off a normal run. */
|
||||||
|
|
||||||
if (infile == stdin) fprintf(outfile, "\n");
|
if (INTERACTIVE(infile)) fprintf(outfile, "\n");
|
||||||
|
|
||||||
if (showtotaltimes)
|
if (showtotaltimes)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue