Control: tags -1 + patch
Please find attached a patch -- build-tested after adding -Wno-error
to CFLAGS due to #941101.
Description: Port to PCRE2.
Bug-Debian: https://bugs.debian.org/999975
Author: Yavor Doganov <[email protected]>
Forwarded: no
Last-Update: 2023-12-22
---
--- rdup-1.1.15.orig/configure.ac
+++ rdup-1.1.15/configure.ac
@@ -62,26 +62,28 @@
if test "$with_libpcre_includes" != "no"; then
CFLAGS="${CFLAGS} -I${with_libpcre_includes}"
else
- CFLAGS="${CFLAGS} `pcre-config --cflags`"
+ CFLAGS="${CFLAGS} `pcre2-config --cflags`"
fi
if test "$with_libpcre_libraries" != "no"; then
LIBS="${LIBS} -L${with_libpcre_libraries}"
else
- LIBS="${LIBS} `pcre-config --libs`"
+ LIBS="${LIBS} `pcre2-config --libs8`"
fi
# PCRE configuration (required)
# Verify that we have the headers
PCRE_H=""
-AC_CHECK_HEADERS(pcre.h,, PCRE_H="no")
+AC_CHECK_HEADERS([pcre2.h], [], [PCRE_H="no"], [[
+#define PCRE2_CODE_UNIT_WIDTH 8
+]])
if test "$PCRE_H" = "no"; then
AC_MSG_ERROR([** No pcre library found.])
fi
# Verify that we have the library
PCRE_L=""
-AC_CHECK_LIB(pcre, pcre_compile, ,PCRE_L="no")
+AC_CHECK_LIB([pcre2-8], [pcre2_compile_8], [], [PCRE_L="no"])
if test "$PCRE_L" = "no"; then
AC_MSG_ERROR([** No pcre library found.])
fi
--- rdup-1.1.15.orig/gfunc.c
+++ rdup-1.1.15/gfunc.c
@@ -7,7 +7,8 @@
#include "rdup.h"
#include "protocol.h"
-#include <pcre.h>
+#define PCRE2_CODE_UNIT_WIDTH 8
+#include <pcre2.h>
#ifdef HAVE_LIBNETTLE
#include <nettle/sha.h>
#else
@@ -622,20 +623,26 @@
gboolean gfunc_regexp(GSList * l, char *n, size_t len)
{
GSList *k;
- pcre *P;
- int ovector[REG_VECTOR];
+ pcre2_code *P;
+ pcre2_match_data *md;
+ md = pcre2_match_data_create(REG_VECTOR, NULL);
for (k = g_slist_nth(l, 0); k; k = k->next) {
- if (sig != 0)
+ if (sig != 0) {
+ pcre2_match_data_free(md);
signal_abort(sig);
+ }
- P = (pcre *) k->data;
+ P = (pcre2_code *) k->data;
/* pcre_exec errors are all < 0, so >= 0 is some kind
* of success
*/
- if (pcre_exec(P, NULL, n, len, 0, 0, ovector, REG_VECTOR) >= 0)
+ if (pcre2_match(P, (PCRE2_SPTR)n, len, 0, 0, md, NULL) >= 0) {
+ pcre2_match_data_free(md);
return TRUE;
+ }
}
+ pcre2_match_data_free(md);
return FALSE;
}
--- rdup-1.1.15.orig/regexp.c
+++ rdup-1.1.15/regexp.c
@@ -6,7 +6,8 @@
*/
#include "rdup.h"
-#include <pcre.h>
+#define PCRE2_CODE_UNIT_WIDTH 8
+#include <pcre2.h>
GSList *pregex_list = NULL;
@@ -18,15 +19,16 @@
{
FILE *fp;
char *buf;
- const char *errbuf;
- int erroff;
+ PCRE2_UCHAR errbuf[120];
+ PCRE2_SIZE erroff;
+ int err;
char delim;
gpointer d;
size_t l;
size_t s;
size_t re_length;
ssize_t j;
- pcre *P;
+ pcre2_code *P;
if ((fp = fopen(file, "r")) == NULL) {
msg(_("Could not open '%s\': %s"), file, strerror(errno));
@@ -45,18 +47,20 @@
/* buf[j - 1] holds the delimeter */
buf[j - 1] = '\0';
- if ((P = pcre_compile(buf, 0, &errbuf, &erroff, NULL)) == NULL)
{
+ if ((P = pcre2_compile((PCRE2_SPTR)buf, strlen(buf), 0, &err,
&erroff, NULL)) == NULL) {
/* error */
fclose(fp);
+ pcre2_get_error_message(err, errbuf, sizeof(errbuf));
msg(_
- ("Corrupt regular expression line: %zd, column %d:
%s"),
+ ("Corrupt regular expression line: %zd, column %zu:
%s"),
l, erroff, errbuf);
g_free(buf);
return FALSE;
} else {
- pcre_fullinfo(P, NULL, PCRE_INFO_SIZE, &re_length);
+ pcre2_pattern_info(P, PCRE2_INFO_SIZE, &re_length);
d = g_malloc(re_length);
d = memcpy(d, P, re_length);
+ pcre2_code_free(P);
pregex_list = g_slist_append(pregex_list, d);
}
l++;