New function cli-utils.c:extract_arg_const

This function provides the exact same functionality as extract_arg,
except that it takes a "const char**" instead of a "char **".
It allows us also to re-implement extract_arg almost as a simple
wrapper around the new function.

gdb/ChangeLog:

        Pedro Alves  <palves@redhat.com>
        Joel Brobecker  <brobecker@adacore.com>

        * cli/cli-utils.h (extract_arg_const): Add declaration.
        * cli/cli-utils.c (extract_arg_const): New function.
        (extract_arg): Reimplement using extract_arg_const.
This commit is contained in:
Joel Brobecker
2013-11-11 09:19:32 +04:00
parent 671afef641
commit b5be8ce022
3 changed files with 31 additions and 8 deletions

View File

@@ -1,3 +1,10 @@
2013-11-14 Pedro Alves <palves@redhat.com>
Joel Brobecker <brobecker@adacore.com>
* cli/cli-utils.h (extract_arg_const): Add declaration.
* cli/cli-utils.c (extract_arg_const): New function.
(extract_arg): Reimplement using extract_arg_const.
2013-11-14 Joel Brobecker <brobecker@adacore.com> 2013-11-14 Joel Brobecker <brobecker@adacore.com>
* language.h: Add "symtab.h" #include. * language.h: Add "symtab.h" #include.

View File

@@ -261,30 +261,39 @@ remove_trailing_whitespace (const char *start, char *s)
/* See documentation in cli-utils.h. */ /* See documentation in cli-utils.h. */
char * char *
extract_arg (char **arg) extract_arg_const (const char **arg)
{ {
char *result, *copy; const char *result;
if (!*arg) if (!*arg)
return NULL; return NULL;
/* Find the start of the argument. */ /* Find the start of the argument. */
*arg = skip_spaces (*arg); *arg = skip_spaces_const (*arg);
if (!**arg) if (!**arg)
return NULL; return NULL;
result = *arg; result = *arg;
/* Find the end of the argument. */ /* Find the end of the argument. */
*arg = skip_to_space (*arg + 1); *arg = skip_to_space_const (*arg + 1);
if (result == *arg) if (result == *arg)
return NULL; return NULL;
copy = xmalloc (*arg - result + 1); return savestring (result, *arg - result);
memcpy (copy, result, *arg - result); }
copy[*arg - result] = '\0';
return copy; /* See documentation in cli-utils.h. */
char *
extract_arg (char **arg)
{
const char *arg_const = *arg;
char *result;
result = extract_arg_const (&arg_const);
*arg += arg_const - *arg;
return result;
} }
/* See documentation in cli-utils.h. */ /* See documentation in cli-utils.h. */

View File

@@ -118,6 +118,13 @@ extern char *remove_trailing_whitespace (const char *start, char *s);
extern char *extract_arg (char **arg); extern char *extract_arg (char **arg);
/* A const-correct version of "extract_arg".
Since the returned value is xmalloc'd, it eventually needs to be
xfree'ed, which prevents us from making it const as well. */
extern char *extract_arg_const (const char **arg);
/* A helper function that looks for an argument at the start of a /* A helper function that looks for an argument at the start of a
string. The argument must also either be at the end of the string, string. The argument must also either be at the end of the string,
or be followed by whitespace. Returns 1 if it finds the argument, or be followed by whitespace. Returns 1 if it finds the argument,