* defs.h (xsnprintf): New prototype.
authorMark Kettenis <kettenis@gnu.org>
Thu, 17 Mar 2005 22:11:09 +0000 (22:11 +0000)
committerMark Kettenis <kettenis@gnu.org>
Thu, 17 Mar 2005 22:11:09 +0000 (22:11 +0000)
* utils.c (xsnprintf): New function.

gdb/ChangeLog
gdb/defs.h
gdb/utils.c

index 3c62956..d4b85ea 100644 (file)
@@ -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.
 
index c14321a..fa012a4 100644 (file)
@@ -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.  */
index 7ee2061..0c45108 100644 (file)
@@ -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.  */