aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gdb/ChangeLog3
-rw-r--r--gdb/defs.h4
-rw-r--r--gdb/utils.c14
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.
diff --git a/gdb/defs.h b/gdb/defs.h
index c14321a..fa012a4 100644
--- a/gdb/defs.h
+++ b/gdb/defs.h
@@ -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. */