* modules/snprintf (Depends-on): Remove minmax.
authorPaul Eggert <eggert@cs.ucla.edu>
Thu, 10 Aug 2006 19:32:38 +0000 (19:32 +0000)
committerPaul Eggert <eggert@cs.ucla.edu>
Thu, 10 Aug 2006 19:32:38 +0000 (19:32 +0000)
(Maintainer): Add self.
* lib/.cppi-disable: Add snprintf.h, socket_.h.
* lib/snprintf.c: Include <errno.h> and <limits.h>.
(EOVERFLOW): Define if the system does not.
Do not include "minmax.h"; it wasn't used.
(snprintf): Don't assume size_t promotes to an unsigned type.
Fix bug when generated string was too long for the buffer: the
buffer's contents are supposed to be the initial prefix of the
output.  Don't assume vasnprintf returns EOVERFLOW if the size
exceeds INT_MAX; do the check ourselves.

ChangeLog
lib/.cppi-disable
lib/ChangeLog
lib/snprintf.c
modules/snprintf

index fedabc5..a8bcb87 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2006-08-10  Paul Eggert  <eggert@cs.ucla.edu>
+
+       * modules/snprintf (Depends-on): Remove minmax.
+       (Maintainer): Add self.
+
 2006-08-10  Bruno Haible  <bruno@clisp.org>
 
        * gnulib-tool (func_create_testdir): Detect unexpanded macros here
index 7106f0c..0497839 100644 (file)
@@ -29,6 +29,8 @@ regex.c
 regex.h
 regex_internal.c
 regex_internal.h
+snprintf.h
+socket_.h
 stat-time.h
 stdbool_.h
 stdint_.h
index 3ae7e87..6f2ba3f 100644 (file)
@@ -1,3 +1,15 @@
+2006-08-10  Paul Eggert  <eggert@cs.ucla.edu>
+
+       * .cppi-disable: Add snprintf.h, socket_.h.
+       * snprintf.c: Include <errno.h> and <limits.h>.
+       (EOVERFLOW): Define if the system does not.
+       Do not include "minmax.h"; it wasn't used.
+       (snprintf): Don't assume size_t promotes to an unsigned type.
+       Fix bug when generated string was too long for the buffer: the
+       buffer's contents are supposed to be the initial prefix of the
+       output.  Don't assume vasnprintf returns EOVERFLOW if the size
+       exceeds INT_MAX; do the check ourselves.
+
 2006-08-09  Paul Eggert  <eggert@cs.ucla.edu>
 
        Sync from coreutils.
index 5870f8d..c281f7c 100644 (file)
@@ -1,6 +1,6 @@
 /* Formatted output to strings.
-   Copyright (C) 2004 Free Software Foundation, Inc.
-   Written by Simon Josefsson.
+   Copyright (C) 2004, 2006 Free Software Foundation, Inc.
+   Written by Simon Josefsson and Paul Eggert.
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
 
 #include "snprintf.h"
 
+#include <errno.h>
+#include <limits.h>
 #include <stdarg.h>
 #include <stdlib.h>
 #include <string.h>
 
-#include "minmax.h"
 #include "vasnprintf.h"
 
+/* Some systems, like OSF/1 4.0 and Woe32, don't have EOVERFLOW.  */
+#ifndef EOVERFLOW
+# define EOVERFLOW E2BIG
+#endif
+
 /* Print formatted output to string STR.  Similar to sprintf, but
    additional length SIZE limit how much is written into STR.  Returns
    string length of formatted string (which may be larger than SIZE).
@@ -49,12 +55,22 @@ snprintf (char *str, size_t size, const char *format, ...)
   if (!output)
     return -1;
 
-  if (str != NULL)
-    if (len > size - 1) /* equivalent to: (size > 0 && len >= size) */
-      str[size - 1] = '\0';
-
   if (output != str)
-    free (output);
+    {
+      if (size)
+       {
+         memcpy (str, output, size - 1);
+         str[size - 1] = '\0';
+       }
+
+      free (output);
+    }
+
+  if (INT_MAX < len)
+    {
+      errno = EOVERFLOW;
+      return -1;
+    }
 
   return len;
 }
index 3f53fdf..5b10350 100644 (file)
@@ -8,7 +8,6 @@ m4/snprintf.m4
 
 Depends-on:
 vasnprintf
-minmax
 
 configure.ac:
 gl_FUNC_SNPRINTF
@@ -23,4 +22,4 @@ License:
 LGPL
 
 Maintainer:
-Simon Josefsson
+Simon Josefsson, Paul Eggert