Control: tags -1 + patch
Please find a patch attached.
Description: Port to PCRE2.
Bug-Debian: https://bugs.debian.org/1000126
Author: Yavor Doganov
Forwarded: no
Last-Update: 2024-01-02
---
--- gpt.orig/configure.ac
+++ gpt/configure.ac
@@ -109,10 +109,10 @@
# AC_MSG_CHECKING(for pcre)
-AC_CHECK_PROG(has_pcre, pcre-config, yes)
+AC_CHECK_PROG(has_pcre, pcre2-config, yes)
if test "x$has_pcre" = "xyes"; then
- PCRE_CONFIG="pcre-config"
+ PCRE_CONFIG="pcre2-config"
else
AC_MSG_ERROR(
[
@@ -123,8 +123,8 @@
#pcrecpp
-PCRE_INC=`${PCRE_CONFIG} --cglags`
-PCRE_LIB="-L`${PCRE_CONFIG} --prefix`/lib -lpcrecpp"
+PCRE_INC=`${PCRE_CONFIG} --cflags`
+PCRE_LIB=`${PCRE_CONFIG} --libs8`
AC_SUBST(PCRE_INC)
AC_SUBST(PCRE_LIB)
--- gpt.orig/src/modules/interpreter/InterpreterDBG.cpp
+++ gpt/src/modules/interpreter/InterpreterDBG.cpp
@@ -33,7 +33,8 @@
#include
#endif
-#include
+#define PCRE2_CODE_UNIT_WIDTH 8
+#include
#include
#ifndef WIN32
@@ -403,15 +404,40 @@
void InterpreterDBG::processBreakpointCMD(string& bpcommand) {
//cerr << "process breakpoint " << bpcommand << endl;
- string cmd;
- string file;
- int line;
- pcrecpp::RE re("breakpoint
cmd=(add|remove).*file=\"([^\"]*)\".*line=(\\d+)");
- if(!re.FullMatch(bpcommand, , , )) {
+ pcre2_code *re;
+ pcre2_match_data *md;
+ PCRE2_UCHAR *str;
+ PCRE2_SPTR pat, subj;
+ PCRE2_SIZE offset;
+ int line, rc;
+
+ pat = reinterpret_cast("breakpoint
cmd=(add|remove).*file=\"([^\"]*)\".*line=(\\d+)");
+ subj = reinterpret_cast(bpcommand.c_str());
+ re = pcre2_compile(pat, PCRE2_ZERO_TERMINATED, 0, , , nullptr);
+ if(offset != 0) {
+return;
+ }
+
+ md = pcre2_match_data_create_from_pattern(re, nullptr);
+ rc = pcre2_match(re, subj, bpcommand.length(), 0, 0, md, nullptr);
+ pcre2_code_free(re);
+ if(rc != 4) {
//cerr << PACKAGE << ": comando invalido (2): \"" << cmd << "\"" << endl;
+pcre2_match_data_free(md);
return;
}
+ pcre2_substring_get_bynumber(md, 1, , );
+ string cmd(reinterpret_cast(str));
+ pcre2_substring_free(str);
+ pcre2_substring_get_bynumber(md, 2, , );
+ string file(reinterpret_cast(str));
+ pcre2_substring_free(str);
+ pcre2_substring_get_bynumber(md, 3, , );
+ line = atoi((const char *)str);
+ pcre2_substring_free(str);
+ pcre2_match_data_free(md);
+
//cerr << PACKAGE << ": capturado:" << cmd << ":" << file << ":" << line <<
endl;
if(cmd == "add") {