diff options
author | Tom Tromey <tom@tromey.com> | 2017-11-22 20:17:28 -0700 |
---|---|---|
committer | Tom Tromey <tom@tromey.com> | 2017-12-08 10:23:43 -0700 |
commit | 8e481c3ba86e512b39b16b41de24e87a17f7d968 (patch) | |
tree | bfad22d6b383d85c5b82aa4356af50c81e7bd959 /gdb/common/format.h | |
parent | 10af2a65c8891435d0d63411a3e694cc74c9447c (diff) | |
download | fsf-binutils-gdb-8e481c3ba86e512b39b16b41de24e87a17f7d968.zip fsf-binutils-gdb-8e481c3ba86e512b39b16b41de24e87a17f7d968.tar.gz fsf-binutils-gdb-8e481c3ba86e512b39b16b41de24e87a17f7d968.tar.bz2 |
C++-ify parse_format_string
This replaces parse_format_string with a class, removing some
constructors along the way. While doing this, I found that one
argument to gen_printf is unused, so I removed it.
Also, I am not completely sure, but the use of `release' in
maint_agent_printf_command and parse_cmd_to_aexpr seems like it may
leak expressions.
Regression tested by the buildbot.
ChangeLog
2017-12-08 Tom Tromey <tom@tromey.com>
* printcmd.c (ui_printf): Update. Use std::vector.
* common/format.h (struct format_piece): Add constructor.
<string>: Now const.
(class format_pieces): New class.
(parse_format_string, free_format_pieces)
(free_format_pieces_cleanup): Remove.
* common/format.c (format_pieces::format_pieces): Rename from
parse_format_string. Update.
(free_format_pieces, free_format_pieces_cleanup): Remove.
* breakpoint.c (parse_cmd_to_aexpr): Update. Use std::vector.
* ax-gdb.h (gen_printf): Remove argument.
* ax-gdb.c (gen_printf): Remove "frags" argument.
(maint_agent_printf_command): Update. Use std::vector.
gdbserver/ChangeLog
2017-12-08 Tom Tromey <tom@tromey.com>
* ax.c (ax_printf): Update.
Diffstat (limited to 'gdb/common/format.h')
-rw-r--r-- | gdb/common/format.h | 42 |
1 files changed, 33 insertions, 9 deletions
diff --git a/gdb/common/format.h b/gdb/common/format.h index f3a94b8..dd083f9 100644 --- a/gdb/common/format.h +++ b/gdb/common/format.h @@ -48,22 +48,46 @@ enum argclass struct format_piece { - char *string; + format_piece (const char *str, enum argclass argc) + : string (str), + argclass (argc) + { + } + + const char *string; enum argclass argclass; }; -/* Return an array of printf fragments found at the given string, and - rewrite ARG with a pointer to the end of the format string. */ +class format_pieces +{ +public: + + format_pieces (const char **arg); + ~format_pieces () = default; + + DISABLE_COPY_AND_ASSIGN (format_pieces); -extern struct format_piece *parse_format_string (const char **arg); + format_piece &operator[] (size_t index) + { + return m_pieces[index]; + } -/* Given a pointer to an array of format pieces, free any memory that - would have been allocated by parse_format_string. */ + typedef std::vector<format_piece>::iterator iterator; -extern void free_format_pieces (struct format_piece *frags); + iterator begin () + { + return m_pieces.begin (); + } -/* Freeing, cast as a cleanup. */ + iterator end () + { + return m_pieces.end (); + } -extern void free_format_pieces_cleanup (void *); +private: + + std::vector<format_piece> m_pieces; + gdb::unique_xmalloc_ptr<char> m_storage; +}; #endif /* COMMON_FORMAT_H */ |