forked from Imagelibrary/binutils-gdb
* cli/cli-cmds.c (apropos_command): Free the compiled regex. Use
get_regcomp_error. * utils.c: Include gdb_regex.h. (do_regfree_cleanup): New function. (make_regfree_cleanup): Likewise. (get_regcomp_error): Likewise. * gdb_regex.h (make_regfree_cleanup, get_regcomp_error): Declare.
This commit is contained in:
@@ -1,3 +1,13 @@
|
|||||||
|
2011-01-17 Tom Tromey <tromey@redhat.com>
|
||||||
|
|
||||||
|
* cli/cli-cmds.c (apropos_command): Free the compiled regex. Use
|
||||||
|
get_regcomp_error.
|
||||||
|
* utils.c: Include gdb_regex.h.
|
||||||
|
(do_regfree_cleanup): New function.
|
||||||
|
(make_regfree_cleanup): Likewise.
|
||||||
|
(get_regcomp_error): Likewise.
|
||||||
|
* gdb_regex.h (make_regfree_cleanup, get_regcomp_error): Declare.
|
||||||
|
|
||||||
2011-01-17 Tom Tromey <tromey@redhat.com>
|
2011-01-17 Tom Tromey <tromey@redhat.com>
|
||||||
|
|
||||||
* cli/cli-cmds.c (apropos_command): Fix formatting. Don't call
|
* cli/cli-cmds.c (apropos_command): Fix formatting. Don't call
|
||||||
|
|||||||
@@ -1254,18 +1254,26 @@ void
|
|||||||
apropos_command (char *searchstr, int from_tty)
|
apropos_command (char *searchstr, int from_tty)
|
||||||
{
|
{
|
||||||
regex_t pattern;
|
regex_t pattern;
|
||||||
char errorbuffer[512];
|
int code;
|
||||||
|
|
||||||
if (searchstr == NULL)
|
if (searchstr == NULL)
|
||||||
error (_("REGEXP string is empty"));
|
error (_("REGEXP string is empty"));
|
||||||
|
|
||||||
if (regcomp (&pattern, searchstr, REG_ICASE) == 0)
|
code = regcomp (&pattern, searchstr, REG_ICASE);
|
||||||
apropos_cmd (gdb_stdout, cmdlist, &pattern, "");
|
if (code == 0)
|
||||||
|
{
|
||||||
|
struct cleanup *cleanups;
|
||||||
|
|
||||||
|
cleanups = make_regfree_cleanup (&pattern);
|
||||||
|
apropos_cmd (gdb_stdout, cmdlist, &pattern, "");
|
||||||
|
do_cleanups (cleanups);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
regerror (regcomp (&pattern, searchstr, REG_ICASE), NULL,
|
char *err = get_regcomp_error (code, &pattern);
|
||||||
errorbuffer, 512);
|
|
||||||
error (_("Error in regular expression: %s"), errorbuffer);
|
make_cleanup (xfree, err);
|
||||||
|
error (_("Error in regular expression: %s"), err);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -28,4 +28,8 @@
|
|||||||
# include <regex.h>
|
# include <regex.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* From utils.c. */
|
||||||
|
struct cleanup *make_regfree_cleanup (regex_t *);
|
||||||
|
char *get_regcomp_error (int, regex_t *);
|
||||||
|
|
||||||
#endif /* not GDB_REGEX_H */
|
#endif /* not GDB_REGEX_H */
|
||||||
|
|||||||
32
gdb/utils.c
32
gdb/utils.c
@@ -73,6 +73,7 @@
|
|||||||
|
|
||||||
#include "gdb_usleep.h"
|
#include "gdb_usleep.h"
|
||||||
#include "interps.h"
|
#include "interps.h"
|
||||||
|
#include "gdb_regex.h"
|
||||||
|
|
||||||
#if !HAVE_DECL_MALLOC
|
#if !HAVE_DECL_MALLOC
|
||||||
extern PTR malloc (); /* ARI: PTR */
|
extern PTR malloc (); /* ARI: PTR */
|
||||||
@@ -1643,6 +1644,37 @@ gdb_print_host_address (const void *addr, struct ui_file *stream)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* 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;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* This function supports the query, nquery, and yquery functions.
|
/* 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
|
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
|
answer is yes, or default the answer to the specified default
|
||||||
|
|||||||
Reference in New Issue
Block a user