diff options
author | Keith Seitz <keiths@redhat.com> | 2017-08-17 13:58:01 -0700 |
---|---|---|
committer | Keith Seitz <keiths@redhat.com> | 2017-08-17 13:58:01 -0700 |
commit | b5f28d7abc02ca509e389fa932d725cf111e4b40 (patch) | |
tree | 57a0dc0feaff890630a6ba2c9fab811d56b1f9cf /gdb/utils.h | |
parent | 2a95a158fae932f758d75a1178a40d4cc4804ff0 (diff) | |
parent | 1a457753cfad05989574c671a221ffce2d5df703 (diff) | |
download | binutils-users/pmuldoon/c++compile.zip binutils-users/pmuldoon/c++compile.tar.gz binutils-users/pmuldoon/c++compile.tar.bz2 |
Update w/HEADusers/pmuldoon/c++compile
Problems:
gdb/compile/compile.c
gdb/cp-support.c
gdb/cp-support.h
gdb/gdbtypes.h
gdb/language.c
gdb/linespec.c
Diffstat (limited to 'gdb/utils.h')
-rw-r--r-- | gdb/utils.h | 157 |
1 files changed, 143 insertions, 14 deletions
diff --git a/gdb/utils.h b/gdb/utils.h index 5e5033a..9516071 100644 --- a/gdb/utils.h +++ b/gdb/utils.h @@ -31,7 +31,24 @@ extern void initialize_utils (void); extern int sevenbit_strings; -extern int strcmp_iw (const char *, const char *); +/* Do a strncmp() type operation on STRING1 and STRING2, ignoring any + differences in whitespace. STRING2_LEN is STRING2's length. + Returns 0 if STRING1 matches STRING2_LEN characters of STRING2, + non-zero otherwise (slightly different than strncmp()'s range of + return values). */ +extern int strncmp_iw (const char *string1, const char *string2, + size_t string2_len); + +/* Do a strcmp() type operation on STRING1 and STRING2, ignoring any + differences in whitespace. Returns 0 if they match, non-zero if + they don't (slightly different than strcmp()'s range of return + values). + + As an extra hack, string1=="FOO(ARGS)" matches string2=="FOO". + This "feature" is useful when searching for matching C++ function + names (such as if the user types 'break FOO', where FOO is a + mangled C++ function). */ +extern int strcmp_iw (const char *string1, const char *string2); extern int strcmp_iw_ordered (const char *, const char *); @@ -42,6 +59,14 @@ extern int subset_compare (const char *, const char *); int compare_positive_ints (const void *ap, const void *bp); int compare_strings (const void *ap, const void *bp); +/* Compare C strings for std::sort. */ + +static inline bool +compare_cstrings (const char *str1, const char *str2) +{ + return strcmp (str1, str2) < 0; +} + /* A wrapper for bfd_errmsg to produce a more helpful error message in the case of bfd_error_file_ambiguously recognized. MATCHING, if non-NULL, is the corresponding argument to @@ -60,12 +85,126 @@ extern int parse_pid_to_attach (const char *args); extern int parse_escape (struct gdbarch *, const char **); -char **gdb_buildargv (const char *); +/* A wrapper for an array of char* that was allocated in the way that + 'buildargv' does, and should be freed with 'freeargv'. */ + +class gdb_argv +{ +public: + + /* A constructor that initializes to NULL. */ + + gdb_argv () + : m_argv (NULL) + { + } + + /* A constructor that calls buildargv on STR. STR may be NULL, in + which case this object is initialized with a NULL array. If + buildargv fails due to out-of-memory, call malloc_failure. + Therefore, the value is guaranteed to be non-NULL, unless the + parameter itself is NULL. */ + + explicit gdb_argv (const char *str) + : m_argv (NULL) + { + reset (str); + } + + /* A constructor that takes ownership of an existing array. */ + + explicit gdb_argv (char **array) + : m_argv (array) + { + } + + gdb_argv (const gdb_argv &) = delete; + gdb_argv &operator= (const gdb_argv &) = delete; + + ~gdb_argv () + { + freeargv (m_argv); + } + + /* Call buildargv on STR, storing the result in this object. Any + previous state is freed. STR may be NULL, in which case this + object is reset with a NULL array. If buildargv fails due to + out-of-memory, call malloc_failure. Therefore, the value is + guaranteed to be non-NULL, unless the parameter itself is + NULL. */ + + void reset (const char *str); + + /* Return the underlying array. */ + + char **get () + { + return m_argv; + } + + /* Return the underlying array, transferring ownership to the + caller. */ + + char **release () + { + char **result = m_argv; + m_argv = NULL; + return result; + } + + /* Return the number of items in the array. */ + + int count () const + { + return countargv (m_argv); + } + + /* Index into the array. */ + + char *operator[] (int arg) + { + gdb_assert (m_argv != NULL); + return m_argv[arg]; + } + + /* The iterator type. */ + + typedef char **iterator; + + /* Return an iterator pointing to the start of the array. */ + + iterator begin () + { + return m_argv; + } + + /* Return an iterator pointing to the end of the array. */ + + iterator end () + { + return m_argv + count (); + } + + bool operator!= (std::nullptr_t) + { + return m_argv != NULL; + } + + bool operator== (std::nullptr_t) + { + return m_argv == NULL; + } + +private: + + /* The wrapped array. */ + + char **m_argv; +}; + /* Cleanup utilities. */ -extern struct cleanup *make_cleanup_freeargv (char **); - struct ui_out; extern struct cleanup * make_cleanup_ui_out_redirect_pop (struct ui_out *uiout); @@ -76,11 +215,6 @@ extern struct cleanup *(make_cleanup_free_section_addr_info /* For make_cleanup_close see common/filestuff.h. */ -extern struct cleanup *make_cleanup_fclose (FILE *file); - -struct obstack; -extern struct cleanup *make_cleanup_obstack_free (struct obstack *obstack); - extern struct cleanup *make_cleanup_restore_integer (int *variable); extern struct cleanup *make_cleanup_restore_uinteger (unsigned int *variable); @@ -90,11 +224,6 @@ extern struct cleanup *make_cleanup_unpush_target (struct target_ops *ops); extern struct cleanup *make_cleanup_value_free_to_mark (struct value *); extern struct cleanup *make_cleanup_value_free (struct value *); -struct so_list; -extern struct cleanup *make_cleanup_free_so (struct so_list *so); - -extern struct cleanup *make_cleanup_restore_current_language (void); - /* A deleter for a hash table. */ struct htab_deleter { |