From: ZENG Hao Date: Fri, 18 Apr 2025 22:41:28 +0000 (+0800) Subject: gdb: fix ui-style regex initializing order X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=dadaf42c653f4eba6ada9d09d087253e8c97ecd7;p=thirdparty%2Fbinutils-gdb.git gdb: fix ui-style regex initializing order This fixes a crash on Windows NT 4.0, where windows-nat failed dynamic loading some Win32 functions and print a warning message with styled string, which depends on ui-style regex. By using `compiled_regex` constructor, the regex is guaranteed to be initialized before `_initialize_xxx` functions. Approved-By: Tom Tromey --- diff --git a/gdb/ui-style.c b/gdb/ui-style.c index b8321c5e424..b8d73abdc87 100644 --- a/gdb/ui-style.c +++ b/gdb/ui-style.c @@ -45,7 +45,8 @@ static const char ansi_regex_text[] = /* The compiled form of ansi_regex_text. */ -static regex_t ansi_regex; +static compiled_regex ansi_regex (ansi_regex_text, REG_EXTENDED, + _("Error in ANSI terminal escape sequences regex")); /* This maps 8-color palette to RGB triples. The values come from plain linux terminal. */ @@ -364,7 +365,7 @@ ui_file_style::parse (const char *buf, size_t *n_read) { regmatch_t subexps[NUM_SUBEXPRESSIONS]; - int match = regexec (&ansi_regex, buf, ARRAY_SIZE (subexps), subexps, 0); + int match = ansi_regex.exec (buf, ARRAY_SIZE (subexps), subexps, 0); if (match == REG_NOMATCH) { *n_read = 0; @@ -531,7 +532,7 @@ skip_ansi_escape (const char *buf, int *n_read) { regmatch_t subexps[NUM_SUBEXPRESSIONS]; - int match = regexec (&ansi_regex, buf, ARRAY_SIZE (subexps), subexps, 0); + int match = ansi_regex.exec (buf, ARRAY_SIZE (subexps), subexps, 0); if (match == REG_NOMATCH || buf[subexps[FINAL_SUBEXP].rm_so] != 'm') return false; @@ -539,16 +540,6 @@ skip_ansi_escape (const char *buf, int *n_read) return true; } -void _initialize_ui_style (); -void -_initialize_ui_style () -{ - int code = regcomp (&ansi_regex, ansi_regex_text, REG_EXTENDED); - /* If the regular expression was incorrect, it was a programming - error. */ - gdb_assert (code == 0); -} - /* See ui-style.h. */ const std::vector &