aboutsummaryrefslogtreecommitdiff
path: root/gdb/utils.h
diff options
context:
space:
mode:
Diffstat (limited to 'gdb/utils.h')
-rw-r--r--gdb/utils.h168
1 files changed, 146 insertions, 22 deletions
diff --git a/gdb/utils.h b/gdb/utils.h
index 3347c23..6d33e8d 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,15 +85,125 @@ extern int parse_pid_to_attach (const char *args);
extern int parse_escape (struct gdbarch *, const char **);
-char **gdb_buildargv (const char *);
-
-/* Cleanup utilities. */
+/* A wrapper for an array of char* that was allocated in the way that
+ 'buildargv' does, and should be freed with 'freeargv'. */
-extern struct cleanup *make_cleanup_freeargv (char **);
+class gdb_argv
+{
+public:
-struct ui_out;
-extern struct cleanup *
- make_cleanup_ui_out_redirect_pop (struct ui_out *uiout);
+ /* 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. */
struct section_addr_info;
extern struct cleanup *(make_cleanup_free_section_addr_info
@@ -76,8 +211,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);
-
extern struct cleanup *make_cleanup_restore_integer (int *variable);
extern struct cleanup *make_cleanup_restore_uinteger (unsigned int *variable);
@@ -87,11 +220,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
{
@@ -104,10 +232,6 @@ struct htab_deleter
/* A unique_ptr wrapper for htab_t. */
typedef std::unique_ptr<htab, htab_deleter> htab_up;
-struct parser_state;
-extern struct cleanup *make_cleanup_clear_parser_state
- (struct parser_state **p);
-
extern void free_current_contents (void *);
extern void init_page_info (void);
@@ -120,11 +244,11 @@ extern struct cleanup *make_bpstat_clear_actions_cleanup (void);
/* Path utilities. */
-extern char *gdb_realpath (const char *);
+extern gdb::unique_xmalloc_ptr<char> gdb_realpath (const char *);
-extern char *gdb_realpath_keepfile (const char *);
+extern gdb::unique_xmalloc_ptr<char> gdb_realpath_keepfile (const char *);
-extern char *gdb_abspath (const char *);
+extern gdb::unique_xmalloc_ptr<char> gdb_abspath (const char *);
extern int gdb_filename_fnmatch (const char *pattern, const char *string,
int flags);