From fc4ca28d25ec2a8bf1af967d8e3959a3921bd23c Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Mon, 10 Apr 2023 11:31:58 -0700 Subject: [PATCH] grep: improve PCRE2 version output * src/grep.c: No need to include pcre2.h. (main) [HAVE_LIBPCRE]: Call Pprint_version instead of doing it ourselves. * src/pcresearch.c (Pprint_version): New function. It also checks belatedly for buffer overflow, and says "grep -P uses PCRE2" instead of "Built with PCRE". * tests/version-pcre: Adjust test to match. --- NEWS | 4 ++-- src/grep.c | 10 +--------- src/pcresearch.c | 9 +++++++++ src/search.h | 1 + tests/version-pcre | 2 +- 5 files changed, 14 insertions(+), 12 deletions(-) diff --git a/NEWS b/NEWS index 029aaf1..3fdf4fe 100644 --- a/NEWS +++ b/NEWS @@ -18,9 +18,9 @@ GNU grep NEWS -*- outline -*- grep --version now prints a line describing the version of PCRE2 it uses. For example, it prints this when built with the very latest from git: - Built with PCRE 10.43-DEV 2023-01-15 + grep -P uses PCRE2 10.43-DEV 2023-01-15 or this with what's currently available in Fedora 37: - Built with PCRE 10.40 2022-04-14 + grep -P uses PCRE2 10.40 2022-04-14 * Noteworthy changes in release 3.10 (2023-03-22) [stable] diff --git a/src/grep.c b/src/grep.c index bd776e8..491dd02 100644 --- a/src/grep.c +++ b/src/grep.c @@ -29,11 +29,6 @@ #include #include "system.h" -#if HAVE_LIBPCRE -# define PCRE2_CODE_UNIT_WIDTH 8 -# include -#endif - #include "argmatch.h" #include "c-ctype.h" #include "c-stack.h" @@ -2836,10 +2831,7 @@ main (int argc, char **argv) puts (_("Written by Mike Haertel and others; see\n" ".")); #if HAVE_LIBPCRE - unsigned char buf[128]; - (void) pcre2_config (PCRE2_CONFIG_VERSION, buf); - fputs (_("\nBuilt with PCRE "), stdout); - puts ((char *) buf); + Pprint_version (); #endif return EXIT_SUCCESS; } diff --git a/src/pcresearch.c b/src/pcresearch.c index e77509c..9e2f393 100644 --- a/src/pcresearch.c +++ b/src/pcresearch.c @@ -74,6 +74,15 @@ private_free (void *ptr, _GL_UNUSED void *unused) free (ptr); } +void +Pprint_version (void) +{ + char buf[128]; + if (sizeof buf <= pcre2_config (PCRE2_CONFIG_VERSION, buf)) + abort (); + printf (_("\ngrep -P uses PCRE2 %s\n"), buf); +} + /* Match the already-compiled PCRE pattern against the data in SUBJECT, of size SEARCH_BYTES and starting with offset SEARCH_OFFSET, with options OPTIONS. diff --git a/src/search.h b/src/search.h index 61d6562..ebb9d07 100644 --- a/src/search.h +++ b/src/search.h @@ -65,6 +65,7 @@ extern ptrdiff_t Fexecute (void *, char const *, idx_t, idx_t *, char const *); /* pcresearch.c */ extern void *Pcompile (char *, idx_t, reg_syntax_t, bool); extern ptrdiff_t Pexecute (void *, char const *, idx_t, idx_t *, char const *); +extern void Pprint_version (void); /* grep.c */ extern struct localeinfo localeinfo; diff --git a/tests/version-pcre b/tests/version-pcre index d18daa6..c7bb182 100755 --- a/tests/version-pcre +++ b/tests/version-pcre @@ -12,4 +12,4 @@ grep -q '^#define HAVE_LIBPCRE 1' "$CONFIG_HEADER" \ || skip_ 'built without PCRE support' -grep --version | grep -qP '^Built with PCRE [\d.]+' +grep --version | grep -qP '^grep -P uses PCRE2 [\d.]+' -- 2.37.2