mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-11-23 18:14:13 +08:00
Move gdb_regex* to common/
Later patches need regex support also in gdbserver. gdb/ChangeLog 2015-07-15 Jan Kratochvil <jan.kratochvil@redhat.com> * Makefile.in (HFILES_NO_SRCDIR): Change gdb_regex.h to common/gdb_regex.h. (COMMON_OBS): Add gdb_regex.o. (gdb_regex.o): New. * common/common.m4 (GDB_AC_COMMON): Add gdb_use_included_regex, --without-included-regex and USE_INCLUDED_REGEX. * common/gdb_regex.c: New file from utils.c functions. * common/gdb_regex.h: Move it here from gdb_regex.h, update include file wrapping define name. * configure: Rebuilt. * configure.ac (gdb_use_included_regex, --without-included-regex) (USE_INCLUDED_REGEX): Move them to common/common.m4. * gdb_regex.h: Move it to common/gdb_regex.h. * utils.c: Remove include gdb_regex.h. (do_regfree_cleanup, make_regfree_cleanup, get_regcomp_error) (compile_rx_or_error): Move them to common/gdb_regex.c. gdb/gdbserver/ChangeLog 2015-07-15 Jan Kratochvil <jan.kratochvil@redhat.com> * Makefile.in (OBS): Add gdb_regex.o. (gdb_regex.o): New. * config.in: Rebuilt. * configure: Rebuilt.
This commit is contained in:
parent
ddc98fbf2f
commit
6e5b4429db
@ -1,3 +1,22 @@
|
||||
2015-07-15 Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||
|
||||
* Makefile.in (HFILES_NO_SRCDIR): Change gdb_regex.h to
|
||||
common/gdb_regex.h.
|
||||
(COMMON_OBS): Add gdb_regex.o.
|
||||
(gdb_regex.o): New.
|
||||
* common/common.m4 (GDB_AC_COMMON): Add gdb_use_included_regex,
|
||||
--without-included-regex and USE_INCLUDED_REGEX.
|
||||
* common/gdb_regex.c: New file from utils.c functions.
|
||||
* common/gdb_regex.h: Move it here from gdb_regex.h, update include
|
||||
file wrapping define name.
|
||||
* configure: Rebuilt.
|
||||
* configure.ac (gdb_use_included_regex, --without-included-regex)
|
||||
(USE_INCLUDED_REGEX): Move them to common/common.m4.
|
||||
* gdb_regex.h: Move it to common/gdb_regex.h.
|
||||
* utils.c: Remove include gdb_regex.h.
|
||||
(do_regfree_cleanup, make_regfree_cleanup, get_regcomp_error)
|
||||
(compile_rx_or_error): Move them to common/gdb_regex.c.
|
||||
|
||||
2015-07-15 Aleksandar Ristovski <aristovski@qnx.com
|
||||
Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||
|
||||
|
@ -937,7 +937,7 @@ extension.h extension-priv.h \
|
||||
build-id.h buildsym.h valprint.h \
|
||||
typeprint.h mi/mi-getopt.h mi/mi-parse.h mi/mi-console.h \
|
||||
mi/mi-out.h mi/mi-main.h mi/mi-common.h mi/mi-cmds.h linux-nat.h \
|
||||
complaints.h gdb_proc_service.h gdb_regex.h xtensa-tdep.h inf-loop.h \
|
||||
complaints.h gdb_proc_service.h common/gdb_regex.h xtensa-tdep.h inf-loop.h \
|
||||
common/gdb_wait.h common/gdb_assert.h solib.h ppc-tdep.h cp-support.h glibc-tdep.h \
|
||||
interps.h auxv.h gdbcmd.h tramp-frame.h mipsnbsd-tdep.h \
|
||||
amd64-linux-tdep.h linespec.h i387-tdep.h mn10300-tdep.h \
|
||||
@ -1084,6 +1084,7 @@ COMMON_OBS = $(DEPFILES) $(CONFIG_OBS) $(YYOBJ) \
|
||||
format.o registry.o btrace.o record-btrace.o waitstatus.o \
|
||||
print-utils.o rsp-low.o errors.o common-debug.o debug.o \
|
||||
common-exceptions.o btrace-common.o fileio.o target-utils.o \
|
||||
gdb_regex.o \
|
||||
$(SUBDIR_GCC_COMPILE_OBS)
|
||||
|
||||
TSOBS = inflow.o
|
||||
@ -2272,6 +2273,10 @@ btrace-common.o: ${srcdir}/common/btrace-common.c
|
||||
fileio.o: ${srcdir}/common/fileio.c
|
||||
$(COMPILE) $(srcdir)/common/fileio.c
|
||||
$(POSTCOMPILE)
|
||||
|
||||
gdb_regex.o: ${srcdir}/common/gdb_regex.c
|
||||
$(COMPILE) $(srcdir)/common/gdb_regex.c
|
||||
$(POSTCOMPILE)
|
||||
#
|
||||
# gdb/target/ dependencies
|
||||
#
|
||||
|
@ -44,4 +44,33 @@ gdb_cv_func_sigsetjmp=yes, gdb_cv_func_sigsetjmp=no)])
|
||||
if test $gdb_cv_func_sigsetjmp = yes; then
|
||||
AC_DEFINE(HAVE_SIGSETJMP, 1, [Define if sigsetjmp is available. ])
|
||||
fi
|
||||
|
||||
# Assume we'll default to using the included libiberty regex.
|
||||
gdb_use_included_regex=yes
|
||||
|
||||
# However, if the system regex is GNU regex, then default to *not*
|
||||
# using the included regex.
|
||||
AC_CACHE_CHECK(
|
||||
[for GNU regex],
|
||||
[gdb_cv_have_gnu_regex],
|
||||
[AC_TRY_COMPILE(
|
||||
[#include <gnu-versions.h>],
|
||||
[#define REGEX_INTERFACE_VERSION 1
|
||||
#if _GNU_REGEX_INTERFACE_VERSION != REGEX_INTERFACE_VERSION
|
||||
# error "Version mismatch"
|
||||
#endif],
|
||||
gdb_cv_have_gnu_regex=yes,
|
||||
gdb_cv_have_gnu_regex=no)])
|
||||
if test $gdb_cv_have_gnu_regex = yes; then
|
||||
gdb_use_included_regex=no
|
||||
fi
|
||||
|
||||
AC_ARG_WITH(included-regex,
|
||||
AS_HELP_STRING([--without-included-regex], [don't use included regex; this is the default on systems with version 2 of the GNU C library (use with caution on other system)]),
|
||||
gdb_with_regex=$withval,
|
||||
gdb_with_regex=$gdb_use_included_regex)
|
||||
if test "$gdb_with_regex" = yes; then
|
||||
AC_DEFINE(USE_INCLUDED_REGEX, 1,
|
||||
[Define to 1 if the regex included in libiberty should be used.])
|
||||
fi
|
||||
])
|
||||
|
73
gdb/common/gdb_regex.c
Normal file
73
gdb/common/gdb_regex.c
Normal file
@ -0,0 +1,73 @@
|
||||
/* Shared utility routines for GDB to interact with agent.
|
||||
|
||||
Copyright (C) 2009-2015 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GDB.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
||||
|
||||
#include "common-defs.h"
|
||||
#include "gdb_regex.h"
|
||||
|
||||
/* A cleanup function that calls regfree. */
|
||||
|
||||
static void
|
||||
do_regfree_cleanup (void *r)
|
||||
{
|
||||
regfree (r);
|
||||
}
|
||||
|
||||
/* Create a new cleanup that frees the compiled regular expression R. */
|
||||
|
||||
struct cleanup *
|
||||
make_regfree_cleanup (regex_t *r)
|
||||
{
|
||||
return make_cleanup (do_regfree_cleanup, r);
|
||||
}
|
||||
|
||||
/* Return an xmalloc'd error message resulting from a regular
|
||||
expression compilation failure. */
|
||||
|
||||
char *
|
||||
get_regcomp_error (int code, regex_t *rx)
|
||||
{
|
||||
size_t length = regerror (code, rx, NULL, 0);
|
||||
char *result = xmalloc (length);
|
||||
|
||||
regerror (code, rx, result, length);
|
||||
return result;
|
||||
}
|
||||
|
||||
/* Compile a regexp and throw an exception on error. This returns a
|
||||
cleanup to free the resulting pattern on success. RX must not be
|
||||
NULL. */
|
||||
|
||||
struct cleanup *
|
||||
compile_rx_or_error (regex_t *pattern, const char *rx, const char *message)
|
||||
{
|
||||
int code;
|
||||
|
||||
gdb_assert (rx != NULL);
|
||||
|
||||
code = regcomp (pattern, rx, REG_NOSUB);
|
||||
if (code != 0)
|
||||
{
|
||||
char *err = get_regcomp_error (code, pattern);
|
||||
|
||||
make_cleanup (xfree, err);
|
||||
error (("%s: %s"), message, err);
|
||||
}
|
||||
|
||||
return make_regfree_cleanup (pattern);
|
||||
}
|
@ -16,8 +16,8 @@
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
||||
|
||||
#ifndef GDB_REGEX_H
|
||||
#define GDB_REGEX_H 1
|
||||
#ifndef COMMON_GDB_REGEX_H
|
||||
#define COMMON_GDB_REGEX_H 1
|
||||
|
||||
#ifdef USE_INCLUDED_REGEX
|
||||
# include "xregex.h"
|
||||
@ -27,10 +27,9 @@
|
||||
# include <regex.h>
|
||||
#endif
|
||||
|
||||
/* From utils.c. */
|
||||
struct cleanup *make_regfree_cleanup (regex_t *);
|
||||
char *get_regcomp_error (int, regex_t *);
|
||||
struct cleanup *compile_rx_or_error (regex_t *pattern, const char *rx,
|
||||
const char *message);
|
||||
|
||||
#endif /* not GDB_REGEX_H */
|
||||
#endif /* not COMMON_GDB_REGEX_H */
|
102
gdb/configure
vendored
102
gdb/configure
vendored
@ -11925,6 +11925,57 @@ $as_echo "#define HAVE_SIGSETJMP 1" >>confdefs.h
|
||||
|
||||
fi
|
||||
|
||||
# Assume we'll default to using the included libiberty regex.
|
||||
gdb_use_included_regex=yes
|
||||
|
||||
# However, if the system regex is GNU regex, then default to *not*
|
||||
# using the included regex.
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU regex" >&5
|
||||
$as_echo_n "checking for GNU regex... " >&6; }
|
||||
if test "${gdb_cv_have_gnu_regex+set}" = set; then :
|
||||
$as_echo_n "(cached) " >&6
|
||||
else
|
||||
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
||||
/* end confdefs.h. */
|
||||
#include <gnu-versions.h>
|
||||
int
|
||||
main ()
|
||||
{
|
||||
#define REGEX_INTERFACE_VERSION 1
|
||||
#if _GNU_REGEX_INTERFACE_VERSION != REGEX_INTERFACE_VERSION
|
||||
# error "Version mismatch"
|
||||
#endif
|
||||
;
|
||||
return 0;
|
||||
}
|
||||
_ACEOF
|
||||
if ac_fn_c_try_compile "$LINENO"; then :
|
||||
gdb_cv_have_gnu_regex=yes
|
||||
else
|
||||
gdb_cv_have_gnu_regex=no
|
||||
fi
|
||||
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
|
||||
fi
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gdb_cv_have_gnu_regex" >&5
|
||||
$as_echo "$gdb_cv_have_gnu_regex" >&6; }
|
||||
if test $gdb_cv_have_gnu_regex = yes; then
|
||||
gdb_use_included_regex=no
|
||||
fi
|
||||
|
||||
|
||||
# Check whether --with-included-regex was given.
|
||||
if test "${with_included_regex+set}" = set; then :
|
||||
withval=$with_included_regex; gdb_with_regex=$withval
|
||||
else
|
||||
gdb_with_regex=$gdb_use_included_regex
|
||||
fi
|
||||
|
||||
if test "$gdb_with_regex" = yes; then
|
||||
|
||||
$as_echo "#define USE_INCLUDED_REGEX 1" >>confdefs.h
|
||||
|
||||
fi
|
||||
|
||||
|
||||
# Check the return and argument types of ptrace. No canned test for
|
||||
# this, so roll our own.
|
||||
@ -12187,57 +12238,6 @@ if test $ac_cv_func_setpgrp_void = yes; then
|
||||
fi
|
||||
fi
|
||||
|
||||
# Assume we'll default to using the included libiberty regex.
|
||||
gdb_use_included_regex=yes
|
||||
|
||||
# However, if the system regex is GNU regex, then default to *not*
|
||||
# using the included regex.
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU regex" >&5
|
||||
$as_echo_n "checking for GNU regex... " >&6; }
|
||||
if test "${gdb_cv_have_gnu_regex+set}" = set; then :
|
||||
$as_echo_n "(cached) " >&6
|
||||
else
|
||||
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
||||
/* end confdefs.h. */
|
||||
#include <gnu-versions.h>
|
||||
int
|
||||
main ()
|
||||
{
|
||||
#define REGEX_INTERFACE_VERSION 1
|
||||
#if _GNU_REGEX_INTERFACE_VERSION != REGEX_INTERFACE_VERSION
|
||||
# error "Version mismatch"
|
||||
#endif
|
||||
;
|
||||
return 0;
|
||||
}
|
||||
_ACEOF
|
||||
if ac_fn_c_try_compile "$LINENO"; then :
|
||||
gdb_cv_have_gnu_regex=yes
|
||||
else
|
||||
gdb_cv_have_gnu_regex=no
|
||||
fi
|
||||
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
|
||||
fi
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gdb_cv_have_gnu_regex" >&5
|
||||
$as_echo "$gdb_cv_have_gnu_regex" >&6; }
|
||||
if test $gdb_cv_have_gnu_regex = yes; then
|
||||
gdb_use_included_regex=no
|
||||
fi
|
||||
|
||||
|
||||
# Check whether --with-included-regex was given.
|
||||
if test "${with_included_regex+set}" = set; then :
|
||||
withval=$with_included_regex; gdb_with_regex=$withval
|
||||
else
|
||||
gdb_with_regex=$gdb_use_included_regex
|
||||
fi
|
||||
|
||||
if test "$gdb_with_regex" = yes; then
|
||||
|
||||
$as_echo "#define USE_INCLUDED_REGEX 1" >>confdefs.h
|
||||
|
||||
fi
|
||||
|
||||
# Check if <sys/proc.h> defines `struct thread' with a td_pcb member.
|
||||
ac_fn_c_check_member "$LINENO" "struct thread" "td_pcb" "ac_cv_member_struct_thread_td_pcb" "#include <sys/param.h>
|
||||
#include <sys/proc.h>
|
||||
|
@ -1444,35 +1444,6 @@ if test $ac_cv_func_setpgrp_void = yes; then
|
||||
fi
|
||||
fi
|
||||
|
||||
# Assume we'll default to using the included libiberty regex.
|
||||
gdb_use_included_regex=yes
|
||||
|
||||
# However, if the system regex is GNU regex, then default to *not*
|
||||
# using the included regex.
|
||||
AC_CACHE_CHECK(
|
||||
[for GNU regex],
|
||||
[gdb_cv_have_gnu_regex],
|
||||
[AC_TRY_COMPILE(
|
||||
[#include <gnu-versions.h>],
|
||||
[#define REGEX_INTERFACE_VERSION 1
|
||||
#if _GNU_REGEX_INTERFACE_VERSION != REGEX_INTERFACE_VERSION
|
||||
# error "Version mismatch"
|
||||
#endif],
|
||||
gdb_cv_have_gnu_regex=yes,
|
||||
gdb_cv_have_gnu_regex=no)])
|
||||
if test $gdb_cv_have_gnu_regex = yes; then
|
||||
gdb_use_included_regex=no
|
||||
fi
|
||||
|
||||
AC_ARG_WITH(included-regex,
|
||||
AS_HELP_STRING([--without-included-regex], [don't use included regex; this is the default on systems with version 2 of the GNU C library (use with caution on other system)]),
|
||||
gdb_with_regex=$withval,
|
||||
gdb_with_regex=$gdb_use_included_regex)
|
||||
if test "$gdb_with_regex" = yes; then
|
||||
AC_DEFINE(USE_INCLUDED_REGEX, 1,
|
||||
[Define to 1 if the regex included in libiberty should be used.])
|
||||
fi
|
||||
|
||||
# Check if <sys/proc.h> defines `struct thread' with a td_pcb member.
|
||||
AC_CHECK_MEMBERS([struct thread.td_pcb], [], [],
|
||||
[#include <sys/param.h>
|
||||
|
@ -1,3 +1,10 @@
|
||||
2015-07-15 Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||
|
||||
* Makefile.in (OBS): Add gdb_regex.o.
|
||||
(gdb_regex.o): New.
|
||||
* config.in: Rebuilt.
|
||||
* configure: Rebuilt.
|
||||
|
||||
2015-07-15 Aleksandar Ristovski <aristovski@qnx.com
|
||||
Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||
|
||||
|
@ -195,6 +195,7 @@ OBS = agent.o ax.o inferiors.o regcache.o remote-utils.o server.o signals.o \
|
||||
common-utils.o ptid.o buffer.o format.o filestuff.o dll.o notif.o \
|
||||
tdesc.o print-utils.o rsp-low.o errors.o common-debug.o cleanups.o \
|
||||
common-exceptions.o symbol.o btrace-common.o fileio.o target-utils.o \
|
||||
gdb_regex.o \
|
||||
$(XML_BUILTIN) $(DEPFILES) $(LIBOBJS)
|
||||
GDBREPLAY_OBS = gdbreplay.o version.o
|
||||
GDBSERVER_LIBS = @GDBSERVER_LIBS@
|
||||
@ -582,6 +583,9 @@ waitstatus.o: ../target/waitstatus.c
|
||||
fileio.o: ../common/fileio.c
|
||||
$(COMPILE) $<
|
||||
$(POSTCOMPILE)
|
||||
gdb_regex.o: ../common/gdb_regex.c
|
||||
$(COMPILE) $<
|
||||
$(POSTCOMPILE)
|
||||
|
||||
# Native object files rules from ../nat
|
||||
|
||||
|
@ -317,6 +317,9 @@
|
||||
/* Define to 1 if you have the ANSI C header files. */
|
||||
#undef STDC_HEADERS
|
||||
|
||||
/* Define to 1 if the regex included in libiberty should be used. */
|
||||
#undef USE_INCLUDED_REGEX
|
||||
|
||||
/* Define if we should use libthread_db directly. */
|
||||
#undef USE_LIBTHREAD_DB_DIRECTLY
|
||||
|
||||
|
56
gdb/gdbserver/configure
vendored
56
gdb/gdbserver/configure
vendored
@ -694,6 +694,7 @@ enable_maintainer_mode
|
||||
enable_largefile
|
||||
enable_build_with_cxx
|
||||
enable_libmcheck
|
||||
with_included_regex
|
||||
with_ust
|
||||
with_ust_include
|
||||
with_ust_lib
|
||||
@ -1345,6 +1346,10 @@ Optional Features:
|
||||
Optional Packages:
|
||||
--with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
|
||||
--without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
|
||||
--without-included-regex
|
||||
don't use included regex; this is the default on
|
||||
systems with version 2 of the GNU C library (use
|
||||
with caution on other system)
|
||||
--with-ust=PATH Specify prefix directory for the installed UST package
|
||||
Equivalent to --with-ust-include=PATH/include
|
||||
plus --with-ust-lib=PATH/lib
|
||||
@ -5747,6 +5752,57 @@ $as_echo "#define HAVE_SIGSETJMP 1" >>confdefs.h
|
||||
|
||||
fi
|
||||
|
||||
# Assume we'll default to using the included libiberty regex.
|
||||
gdb_use_included_regex=yes
|
||||
|
||||
# However, if the system regex is GNU regex, then default to *not*
|
||||
# using the included regex.
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU regex" >&5
|
||||
$as_echo_n "checking for GNU regex... " >&6; }
|
||||
if test "${gdb_cv_have_gnu_regex+set}" = set; then :
|
||||
$as_echo_n "(cached) " >&6
|
||||
else
|
||||
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
||||
/* end confdefs.h. */
|
||||
#include <gnu-versions.h>
|
||||
int
|
||||
main ()
|
||||
{
|
||||
#define REGEX_INTERFACE_VERSION 1
|
||||
#if _GNU_REGEX_INTERFACE_VERSION != REGEX_INTERFACE_VERSION
|
||||
# error "Version mismatch"
|
||||
#endif
|
||||
;
|
||||
return 0;
|
||||
}
|
||||
_ACEOF
|
||||
if ac_fn_c_try_compile "$LINENO"; then :
|
||||
gdb_cv_have_gnu_regex=yes
|
||||
else
|
||||
gdb_cv_have_gnu_regex=no
|
||||
fi
|
||||
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
|
||||
fi
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gdb_cv_have_gnu_regex" >&5
|
||||
$as_echo "$gdb_cv_have_gnu_regex" >&6; }
|
||||
if test $gdb_cv_have_gnu_regex = yes; then
|
||||
gdb_use_included_regex=no
|
||||
fi
|
||||
|
||||
|
||||
# Check whether --with-included-regex was given.
|
||||
if test "${with_included_regex+set}" = set; then :
|
||||
withval=$with_included_regex; gdb_with_regex=$withval
|
||||
else
|
||||
gdb_with_regex=$gdb_use_included_regex
|
||||
fi
|
||||
|
||||
if test "$gdb_with_regex" = yes; then
|
||||
|
||||
$as_echo "#define USE_INCLUDED_REGEX 1" >>confdefs.h
|
||||
|
||||
fi
|
||||
|
||||
|
||||
# Check for UST
|
||||
ustlibs=""
|
||||
|
55
gdb/utils.c
55
gdb/utils.c
@ -67,7 +67,6 @@
|
||||
|
||||
#include "gdb_usleep.h"
|
||||
#include "interps.h"
|
||||
#include "gdb_regex.h"
|
||||
|
||||
#if !HAVE_DECL_MALLOC
|
||||
extern PTR malloc (); /* ARI: PTR */
|
||||
@ -1114,60 +1113,6 @@ make_hex_string (const gdb_byte *data, size_t length)
|
||||
|
||||
|
||||
|
||||
/* A cleanup function that calls regfree. */
|
||||
|
||||
static void
|
||||
do_regfree_cleanup (void *r)
|
||||
{
|
||||
regfree (r);
|
||||
}
|
||||
|
||||
/* Create a new cleanup that frees the compiled regular expression R. */
|
||||
|
||||
struct cleanup *
|
||||
make_regfree_cleanup (regex_t *r)
|
||||
{
|
||||
return make_cleanup (do_regfree_cleanup, r);
|
||||
}
|
||||
|
||||
/* Return an xmalloc'd error message resulting from a regular
|
||||
expression compilation failure. */
|
||||
|
||||
char *
|
||||
get_regcomp_error (int code, regex_t *rx)
|
||||
{
|
||||
size_t length = regerror (code, rx, NULL, 0);
|
||||
char *result = xmalloc (length);
|
||||
|
||||
regerror (code, rx, result, length);
|
||||
return result;
|
||||
}
|
||||
|
||||
/* Compile a regexp and throw an exception on error. This returns a
|
||||
cleanup to free the resulting pattern on success. RX must not be
|
||||
NULL. */
|
||||
|
||||
struct cleanup *
|
||||
compile_rx_or_error (regex_t *pattern, const char *rx, const char *message)
|
||||
{
|
||||
int code;
|
||||
|
||||
gdb_assert (rx != NULL);
|
||||
|
||||
code = regcomp (pattern, rx, REG_NOSUB);
|
||||
if (code != 0)
|
||||
{
|
||||
char *err = get_regcomp_error (code, pattern);
|
||||
|
||||
make_cleanup (xfree, err);
|
||||
error (("%s: %s"), message, err);
|
||||
}
|
||||
|
||||
return make_regfree_cleanup (pattern);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* This function supports the query, nquery, and yquery functions.
|
||||
Ask user a y-or-n question and return 0 if answer is no, 1 if
|
||||
answer is yes, or default the answer to the specified default
|
||||
|
Loading…
Reference in New Issue
Block a user