changeset 4886:e4317f1f2e2c

Use size_t instead of ssize_t.
author Bruno Haible <bruno@clisp.org>
date Tue, 25 Nov 2003 11:18:46 +0000
parents 3ecffbe2fb59
children e1d2f92c866a
files ChangeLog lib/ChangeLog lib/printf-parse.c lib/printf-parse.h lib/vasnprintf.c m4/ChangeLog m4/vasnprintf.m4 modules/vasnprintf
diffstat 8 files changed, 52 insertions(+), 42 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2003-11-25  Bruno Haible  <bruno@clisp.org>
+
+	* modules/vasnprintf (Files): Remove m4/ssize_t.m4.
+
 2003-11-24  Paul Eggert  <eggert@twinsun.com>
 
 	* modules/alloca: Remove dependency on xalloc.
--- a/lib/ChangeLog
+++ b/lib/ChangeLog
@@ -1,6 +1,19 @@
+2003-11-23  Paul Eggert  <eggert@twinsun.com>
+            Bruno Haible  <bruno@clisp.org>
+
+	* printf-parse.h: Don't include sys/types.h.
+	(ARG_NONE): New macro.
+	(char_directive): Change type of *arg_index fields to size_t.
+	* printf-parse.c: Don't include sys/types.h.
+	(SSIZE_MAX): Remove macro.
+	(PRINTF_PARSE): Change the type of the arg_index variables to size_t.
+	Remove unnecessary overflow check.
+	* vasnprintf.c (VASNPRINTF): Update for type change of *arg_index
+	fields.
+
 2003-11-24  Paul Eggert  <eggert@twinsun.com>
 
-	* lib/alloca.c: Remove dependency on xalloc module.
+	* alloca.c: Remove dependency on xalloc module.
 	(xalloc_die): Remove.
 	(memory_full) [!defined emacs]: New macro.
 	[!defined emacs]: Don't include xalloc.h.
--- a/lib/printf-parse.c
+++ b/lib/printf-parse.c
@@ -29,9 +29,6 @@
 /* Get size_t, NULL.  */
 #include <stddef.h>
 
-/* Get ssize_t.  */
-#include <sys/types.h>
-
 /* Get intmax_t.  */
 #if HAVE_STDINT_H_WITH_UINTMAX
 # include <stdint.h>
@@ -46,10 +43,6 @@
 /* Checked size_t computations.  */
 #include "xsize.h"
 
-#ifndef SSIZE_MAX
-# define SSIZE_MAX ((ssize_t) (SIZE_MAX / 2))
-#endif
-
 #if WIDE_CHAR_VERSION
 # define PRINTF_PARSE wprintf_parse
 # define CHAR_T wchar_t
@@ -69,7 +62,7 @@
 PRINTF_PARSE (const CHAR_T *format, DIRECTIVES *d, arguments *a)
 {
   const CHAR_T *cp = format;		/* pointer into format */
-  ssize_t arg_posn = 0;		/* number of regular arguments consumed */
+  size_t arg_posn = 0;		/* number of regular arguments consumed */
   size_t d_allocated;			/* allocated elements of d->dir */
   size_t a_allocated;			/* allocated elements of a->arg */
   size_t max_width_length = 0;
@@ -123,7 +116,7 @@
       CHAR_T c = *cp++;
       if (c == '%')
 	{
-	  ssize_t arg_index = -1;
+	  size_t arg_index = ARG_NONE;
 	  DIRECTIVE *dp = &d->dir[d->count];/* pointer to next directive */
 
 	  /* Initialize the next directive.  */
@@ -131,11 +124,11 @@
 	  dp->flags = 0;
 	  dp->width_start = NULL;
 	  dp->width_end = NULL;
-	  dp->width_arg_index = -1;
+	  dp->width_arg_index = ARG_NONE;
 	  dp->precision_start = NULL;
 	  dp->precision_end = NULL;
-	  dp->precision_arg_index = -1;
-	  dp->arg_index = -1;
+	  dp->precision_arg_index = ARG_NONE;
+	  dp->arg_index = ARG_NONE;
 
 	  /* Test for positional argument.  */
 	  if (*cp >= '0' && *cp <= '9')
@@ -153,7 +146,7 @@
 		  if (n == 0)
 		    /* Positional argument 0.  */
 		    goto error;
-		  if (size_overflow_p (n) || n - 1 > SSIZE_MAX)
+		  if (size_overflow_p (n))
 		    /* n too large, would lead to out of memory later.  */
 		    goto error;
 		  arg_index = n - 1;
@@ -223,18 +216,18 @@
 		      if (n == 0)
 			/* Positional argument 0.  */
 			goto error;
-		      if (size_overflow_p (n) || n - 1 > SSIZE_MAX)
+		      if (size_overflow_p (n))
 			/* n too large, would lead to out of memory later.  */
 			goto error;
 		      dp->width_arg_index = n - 1;
 		      cp = np + 1;
 		    }
 		}
-	      if (dp->width_arg_index < 0)
+	      if (dp->width_arg_index == ARG_NONE)
 		{
 		  dp->width_arg_index = arg_posn++;
-		  if (dp->width_arg_index < 0)
-		    /* arg_posn wrapped around at SSIZE_MAX.  */
+		  if (dp->width_arg_index == ARG_NONE)
+		    /* arg_posn wrapped around.  */
 		    goto error;
 		}
 	      REGISTER_ARG (dp->width_arg_index, TYPE_INT);
@@ -280,7 +273,7 @@
 			  if (n == 0)
 			    /* Positional argument 0.  */
 			    goto error;
-			  if (size_overflow_p (n) || n - 1 > SSIZE_MAX)
+			  if (size_overflow_p (n))
 			    /* n too large, would lead to out of memory
 			       later.  */
 			    goto error;
@@ -288,11 +281,11 @@
 			  cp = np + 1;
 			}
 		    }
-		  if (dp->precision_arg_index < 0)
+		  if (dp->precision_arg_index == ARG_NONE)
 		    {
 		      dp->precision_arg_index = arg_posn++;
-		      if (dp->precision_arg_index < 0)
-			/* arg_posn wrapped around at SSIZE_MAX.  */
+		      if (dp->precision_arg_index == ARG_NONE)
+			/* arg_posn wrapped around.  */
 			goto error;
 		    }
 		  REGISTER_ARG (dp->precision_arg_index, TYPE_INT);
@@ -491,11 +484,11 @@
 	    if (type != TYPE_NONE)
 	      {
 		dp->arg_index = arg_index;
-		if (dp->arg_index < 0)
+		if (dp->arg_index == ARG_NONE)
 		  {
 		    dp->arg_index = arg_posn++;
-		    if (dp->arg_index < 0)
-		      /* arg_posn wrapped around at SSIZE_MAX.  */
+		    if (dp->arg_index == ARG_NONE)
+		      /* arg_posn wrapped around.  */
 		      goto error;
 		  }
 		REGISTER_ARG (dp->arg_index, type);
@@ -511,9 +504,6 @@
 	      DIRECTIVE *memory;
 
 	      d_allocated = xtimes (d_allocated, 2);
-	      if (size_overflow_p (d_allocated))
-		/* Overflow, would lead to out of memory.  */
-		goto error;
 	      memory_size = xtimes (d_allocated, sizeof (DIRECTIVE));
 	      if (size_overflow_p (memory_size))
 		/* Overflow, would lead to out of memory.  */
--- a/lib/printf-parse.h
+++ b/lib/printf-parse.h
@@ -20,9 +20,6 @@
 
 #include "printf-args.h"
 
-/* Get ssize_t.  */
-#include <sys/types.h>
-
 
 /* Flags */
 #define FLAG_GROUP	 1	/* ' flag */
@@ -32,6 +29,9 @@
 #define FLAG_ALT	16	/* # flag */
 #define FLAG_ZERO	32
 
+/* arg_index value indicating that no argument is consumed.  */
+#define ARG_NONE	(~(size_t)0)
+
 /* A parsed directive.  */
 typedef struct
 {
@@ -40,12 +40,12 @@
   int flags;
   const char* width_start;
   const char* width_end;
-  ssize_t width_arg_index;
+  size_t width_arg_index;
   const char* precision_start;
   const char* precision_end;
-  ssize_t precision_arg_index;
+  size_t precision_arg_index;
   char conversion; /* d i o u x X f e E g G c s p n U % but not C S */
-  ssize_t arg_index;
+  size_t arg_index;
 }
 char_directive;
 
--- a/lib/vasnprintf.c
+++ b/lib/vasnprintf.c
@@ -222,7 +222,7 @@
 	  {
 	    size_t augmented_length;
 
-	    if (!(dp->arg_index < 0))
+	    if (!(dp->arg_index == ARG_NONE))
 	      abort ();
 	    augmented_length = xsum (length, 1);
 	    ENSURE_ALLOCATION (augmented_length);
@@ -231,7 +231,7 @@
 	  }
 	else
 	  {
-	    if (!(dp->arg_index >= 0))
+	    if (!(dp->arg_index != ARG_NONE))
 	      abort ();
 
 	    if (dp->conversion == 'n')
@@ -279,7 +279,7 @@
 		  width = 0;
 		  if (dp->width_start != dp->width_end)
 		    {
-		      if (dp->width_arg_index >= 0)
+		      if (dp->width_arg_index != ARG_NONE)
 			{
 			  int arg;
 
@@ -301,7 +301,7 @@
 		  precision = 6;
 		  if (dp->precision_start != dp->precision_end)
 		    {
-		      if (dp->precision_arg_index >= 0)
+		      if (dp->precision_arg_index != ARG_NONE)
 			{
 			  int arg;
 
@@ -563,13 +563,13 @@
 
 		/* Construct the arguments for calling snprintf or sprintf.  */
 		prefix_count = 0;
-		if (dp->width_arg_index >= 0)
+		if (dp->width_arg_index != ARG_NONE)
 		  {
 		    if (!(a.arg[dp->width_arg_index].type == TYPE_INT))
 		      abort ();
 		    prefixes[prefix_count++] = a.arg[dp->width_arg_index].a.a_int;
 		  }
-		if (dp->precision_arg_index >= 0)
+		if (dp->precision_arg_index != ARG_NONE)
 		  {
 		    if (!(a.arg[dp->precision_arg_index].type == TYPE_INT))
 		      abort ();
--- a/m4/ChangeLog
+++ b/m4/ChangeLog
@@ -1,3 +1,8 @@
+2003-11-25  Bruno Haible  <bruno@clisp.org>
+
+	* vasnprintf.m4 (gl_PREREQ_PRINTF_PARSE): Don't require
+	gt_TYPE_SSIZE_T.
+
 2003-11-17  Bruno Haible  <bruno@clisp.org>
 
 	* vasnprintf.m4 (gl_PREREQ_PRINTF_PARSE): Require gt_TYPE_SSIZE_T.
--- a/m4/vasnprintf.m4
+++ b/m4/vasnprintf.m4
@@ -38,7 +38,6 @@
   AC_REQUIRE([gt_TYPE_WCHAR_T])
   AC_REQUIRE([gt_TYPE_WINT_T])
   AC_REQUIRE([AC_TYPE_SIZE_T])
-  AC_REQUIRE([gt_TYPE_SSIZE_T])
   AC_CHECK_TYPES(ptrdiff_t)
   AC_REQUIRE([gt_AC_TYPE_INTMAX_T])
 ])
--- a/modules/vasnprintf
+++ b/modules/vasnprintf
@@ -15,7 +15,6 @@
 m4/wint_t.m4
 m4/longlong.m4
 m4/intmax_t.m4
-m4/ssize_t.m4
 m4/vasnprintf.m4
 
 Depends-on: