+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.
/* 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>
/* 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
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;
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. */
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')
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;
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);
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;
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);
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);
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. */
{
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);
}
else
{
- if (!(dp->arg_index >= 0))
+ if (!(dp->arg_index != ARG_NONE))
abort ();
if (dp->conversion == 'n')
width = 0;
if (dp->width_start != dp->width_end)
{
- if (dp->width_arg_index >= 0)
+ if (dp->width_arg_index != ARG_NONE)
{
int arg;
precision = 6;
if (dp->precision_start != dp->precision_end)
{
- if (dp->precision_arg_index >= 0)
+ if (dp->precision_arg_index != ARG_NONE)
{
int arg;
/* 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 ();