diff options
-rw-r--r-- | gdb/ChangeLog | 3 | ||||
-rw-r--r-- | gdb/defs.h | 4 | ||||
-rw-r--r-- | gdb/utils.c | 14 |
3 files changed, 21 insertions, 0 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 3c62956c..d4b85ea 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,8 @@ 2005-03-17 Mark Kettenis <kettenis@gnu.org> + * defs.h (xsnprintf): New prototype. + * utils.c (xsnprintf): New function. + * corelow.c (get_core_register_section): Replace usage of sprintf and strcpy with xstrprintf and xstrdup. @@ -879,6 +879,10 @@ extern void xvasprintf (char **ret, const char *format, va_list ap); extern char *xstrprintf (const char *format, ...) ATTR_FORMAT (printf, 1, 2); extern char *xstrvprintf (const char *format, va_list ap); +/* Like snprintf, but throw an error if the output buffer is too small. */ +extern int xsnprintf (char *str, size_t size, const char *format, ...) + ATTR_FORMAT (printf, 3, 4); + extern int parse_escape (char **); /* Message to be printed before the error message, when an error occurs. */ diff --git a/gdb/utils.c b/gdb/utils.c index 7ee2061..0c45108 100644 --- a/gdb/utils.c +++ b/gdb/utils.c @@ -1079,6 +1079,20 @@ xstrvprintf (const char *format, va_list ap) return ret; } +int +xsnprintf (char *str, size_t size, const char *format, ...) +{ + va_list args; + int ret; + + va_start (args, format); + ret = vsnprintf (str, size, format, args); + gdb_assert (ret < size); + va_end (args); + + return ret; +} + /* My replacement for the read system call. Used like `read' but keeps going if `read' returns too soon. */ |