forked from Imagelibrary/binutils-gdb
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 <tom@tromey.com>
This commit is contained in:
@@ -45,7 +45,8 @@ static const char ansi_regex_text[] =
|
|||||||
|
|
||||||
/* The compiled form of 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
|
/* This maps 8-color palette to RGB triples. The values come from
|
||||||
plain linux terminal. */
|
plain linux terminal. */
|
||||||
@@ -364,7 +365,7 @@ ui_file_style::parse (const char *buf, size_t *n_read)
|
|||||||
{
|
{
|
||||||
regmatch_t subexps[NUM_SUBEXPRESSIONS];
|
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)
|
if (match == REG_NOMATCH)
|
||||||
{
|
{
|
||||||
*n_read = 0;
|
*n_read = 0;
|
||||||
@@ -531,7 +532,7 @@ skip_ansi_escape (const char *buf, int *n_read)
|
|||||||
{
|
{
|
||||||
regmatch_t subexps[NUM_SUBEXPRESSIONS];
|
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')
|
if (match == REG_NOMATCH || buf[subexps[FINAL_SUBEXP].rm_so] != 'm')
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
@@ -539,16 +540,6 @@ skip_ansi_escape (const char *buf, int *n_read)
|
|||||||
return true;
|
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. */
|
/* See ui-style.h. */
|
||||||
|
|
||||||
const std::vector<color_space> &
|
const std::vector<color_space> &
|
||||||
|
|||||||
Reference in New Issue
Block a user