rolled back to 2.9.1 because 2.9.2 doesn't work with connecting net
[platform/upstream/libxml2.git] / trio.c
diff --git a/trio.c b/trio.c
index c8b9c84..d885db9 100644 (file)
--- a/trio.c
+++ b/trio.c
@@ -99,7 +99,7 @@
 #endif
 #include <stddef.h>
 
-#if defined( HAVE_ERRNO_H ) || defined( __VMS )
+#ifdef HAVE_ERRNO_H
 #include <errno.h>
 #endif
 
 # define TRIO_ERROR_RETURN(x,y) (-1)
 #endif
 
-#ifndef VA_LIST_IS_ARRAY
-#define TRIO_VA_LIST_PTR       va_list *
-#define TRIO_VA_LIST_ADDR(l)   (&(l))
-#define TRIO_VA_LIST_DEREF(l)  (*(l))
-#else
-#define TRIO_VA_LIST_PTR       va_list
-#define TRIO_VA_LIST_ADDR(l)   (l)
-#define TRIO_VA_LIST_DEREF(l)  (l)
-#endif
-
 typedef unsigned long trio_flags_t;
 
 
 /*************************************************************************
  * Platform specific definitions
  */
-#if defined(TRIO_PLATFORM_UNIX) || defined(TRIO_PLATFORM_OS400)
+#if defined(TRIO_PLATFORM_UNIX)
 # include <unistd.h>
 # include <signal.h>
 # include <locale.h>
@@ -218,7 +208,7 @@ typedef unsigned long int trio_ulonglong_t;
 #endif
 
 /* Maximal and fixed integer types */
-#if defined(TRIO_COMPILER_SUPPORTS_C99) && !defined( __VMS )
+#if defined(TRIO_COMPILER_SUPPORTS_C99)
 # include <stdint.h>
 typedef intmax_t trio_intmax_t;
 typedef uintmax_t trio_uintmax_t;
@@ -226,12 +216,8 @@ typedef int8_t trio_int8_t;
 typedef int16_t trio_int16_t;
 typedef int32_t trio_int32_t;
 typedef int64_t trio_int64_t;
-#elif defined(TRIO_COMPILER_SUPPORTS_UNIX98) || defined( __VMS )
+#elif defined(TRIO_COMPILER_SUPPORTS_UNIX98)
 # include <inttypes.h>
-#ifdef __VMS
-typedef long long int          intmax_t;
-typedef unsigned long long int uintmax_t;
-#endif
 typedef intmax_t trio_intmax_t;
 typedef uintmax_t trio_uintmax_t;
 typedef int8_t trio_int8_t;
@@ -322,9 +308,7 @@ typedef trio_longlong_t trio_int64_t;
 #define NAN_UPPER "NAN"
 
 #if !defined(HAVE_ISASCII) && !defined(isascii)
-#ifndef __VMS
-# define isascii(x) ((unsigned int)(x) < 128)
-#endif
+#  define isascii(x) ((unsigned int)(x) < 128)
 #endif
 
 /* Various constants */
@@ -1183,7 +1167,7 @@ TRIO_ARGS5((type, format, parameters, arglist, argarray),
           int type,
           TRIO_CONST char *format,
           trio_parameter_t *parameters,
-          TRIO_VA_LIST_PTR arglist,
+          va_list *arglist,
           trio_pointer_t *argarray)
 {
   /* Count the number of times a parameter is referenced */
@@ -1961,14 +1945,14 @@ TRIO_ARGS5((type, format, parameters, arglist, argarray),
          if (flags & FLAGS_WIDECHAR)
            {
              parameters[i].data.wstring = (argarray == NULL)
-               ? va_arg(TRIO_VA_LIST_DEREF(arglist), trio_wchar_t *)
+               ? va_arg(*arglist, trio_wchar_t *)
                : (trio_wchar_t *)(argarray[num]);
            }
          else
 #endif
            {
              parameters[i].data.string = (argarray == NULL)
-               ? va_arg(TRIO_VA_LIST_DEREF(arglist), char *)
+               ? va_arg(*arglist, char *)
                : (char *)(argarray[num]);
            }
          break;
@@ -1980,7 +1964,7 @@ TRIO_ARGS5((type, format, parameters, arglist, argarray),
        case FORMAT_COUNT:
        case FORMAT_UNKNOWN:
          parameters[i].data.pointer = (argarray == NULL)
-           ? va_arg(TRIO_VA_LIST_DEREF(arglist), trio_pointer_t )
+           ? va_arg(*arglist, trio_pointer_t )
            : argarray[num];
          break;
 
@@ -1990,7 +1974,7 @@ TRIO_ARGS5((type, format, parameters, arglist, argarray),
            {
               if (argarray == NULL)
                 parameters[i].data.pointer =
-                  (trio_pointer_t)va_arg(TRIO_VA_LIST_DEREF(arglist), trio_pointer_t);
+                  (trio_pointer_t)va_arg(*arglist, trio_pointer_t);
               else
                 {
                   if (parameters[i].type == FORMAT_CHAR)
@@ -2048,36 +2032,36 @@ TRIO_ARGS5((type, format, parameters, arglist, argarray),
 #if defined(QUALIFIER_SIZE_T) || defined(QUALIFIER_SIZE_T_UPPER)
              if (parameters[i].flags & FLAGS_SIZE_T)
                parameters[i].data.number.as_unsigned = (argarray == NULL)
-                 ? (trio_uintmax_t)va_arg(TRIO_VA_LIST_DEREF(arglist), size_t)
+                 ? (trio_uintmax_t)va_arg(*arglist, size_t)
                  : (trio_uintmax_t)(*((size_t *)argarray[num]));
              else
 #endif
 #if defined(QUALIFIER_PTRDIFF_T)
              if (parameters[i].flags & FLAGS_PTRDIFF_T)
                parameters[i].data.number.as_unsigned = (argarray == NULL)
-                 ? (trio_uintmax_t)va_arg(TRIO_VA_LIST_DEREF(arglist), ptrdiff_t)
+                 ? (trio_uintmax_t)va_arg(*arglist, ptrdiff_t)
                  : (trio_uintmax_t)(*((ptrdiff_t *)argarray[num]));
              else
 #endif
 #if defined(QUALIFIER_INTMAX_T)
              if (parameters[i].flags & FLAGS_INTMAX_T)
                parameters[i].data.number.as_unsigned = (argarray == NULL)
-                 ? (trio_uintmax_t)va_arg(TRIO_VA_LIST_DEREF(arglist), trio_intmax_t)
+                 ? (trio_uintmax_t)va_arg(*arglist, trio_intmax_t)
                  : (trio_uintmax_t)(*((trio_intmax_t *)argarray[num]));
              else
 #endif
              if (parameters[i].flags & FLAGS_QUAD)
                parameters[i].data.number.as_unsigned = (argarray == NULL)
-                 ? (trio_uintmax_t)va_arg(TRIO_VA_LIST_DEREF(arglist), trio_ulonglong_t)
+                 ? (trio_uintmax_t)va_arg(*arglist, trio_ulonglong_t)
                  : (trio_uintmax_t)(*((trio_ulonglong_t *)argarray[num]));
              else if (parameters[i].flags & FLAGS_LONG)
                parameters[i].data.number.as_unsigned = (argarray == NULL)
-                 ? (trio_uintmax_t)va_arg(TRIO_VA_LIST_DEREF(arglist), long)
+                 ? (trio_uintmax_t)va_arg(*arglist, long)
                  : (trio_uintmax_t)(*((long *)argarray[num]));
              else
                {
                  if (argarray == NULL)
-                   parameters[i].data.number.as_unsigned = (trio_uintmax_t)va_arg(TRIO_VA_LIST_DEREF(arglist), int);
+                   parameters[i].data.number.as_unsigned = (trio_uintmax_t)va_arg(*arglist, int);
                  else
                    {
                      if (parameters[i].type == FORMAT_CHAR)
@@ -2098,11 +2082,11 @@ TRIO_ARGS5((type, format, parameters, arglist, argarray),
           */
          if (parameters[i].flags & FLAGS_USER_DEFINED)
            parameters[i].data.pointer = (argarray == NULL)
-             ? va_arg(TRIO_VA_LIST_DEREF(arglist), trio_pointer_t )
+             ? va_arg(*arglist, trio_pointer_t )
              : argarray[num];
          else
            parameters[i].data.number.as_unsigned = (argarray == NULL)
-             ? (trio_uintmax_t)va_arg(TRIO_VA_LIST_DEREF(arglist), int)
+             ? (trio_uintmax_t)va_arg(*arglist, int)
              : (trio_uintmax_t)(*((int *)argarray[num]));
          break;
 
@@ -2111,17 +2095,17 @@ TRIO_ARGS5((type, format, parameters, arglist, argarray),
            {
              if (parameters[i].flags & FLAGS_LONGDOUBLE)
                parameters[i].data.longdoublePointer = (argarray == NULL)
-                 ? va_arg(TRIO_VA_LIST_DEREF(arglist), trio_long_double_t *)
+                 ? va_arg(*arglist, trio_long_double_t *)
                  : (trio_long_double_t *)argarray[num];
              else
                 {
                  if (parameters[i].flags & FLAGS_LONG)
                    parameters[i].data.doublePointer = (argarray == NULL)
-                     ? va_arg(TRIO_VA_LIST_DEREF(arglist), double *)
+                     ? va_arg(*arglist, double *)
                      : (double *)argarray[num];
                  else
                    parameters[i].data.doublePointer = (argarray == NULL)
-                     ? (double *)va_arg(TRIO_VA_LIST_DEREF(arglist), float *)
+                     ? (double *)va_arg(*arglist, float *)
                      : (double *)((float *)argarray[num]);
                 }
            }
@@ -2129,13 +2113,13 @@ TRIO_ARGS5((type, format, parameters, arglist, argarray),
            {
              if (parameters[i].flags & FLAGS_LONGDOUBLE)
                parameters[i].data.longdoubleNumber = (argarray == NULL)
-                 ? va_arg(TRIO_VA_LIST_DEREF(arglist), trio_long_double_t)
+                 ? va_arg(*arglist, trio_long_double_t)
                  : (trio_long_double_t)(*((trio_long_double_t *)argarray[num]));
              else
                {
                  if (argarray == NULL)
                    parameters[i].data.longdoubleNumber =
-                     (trio_long_double_t)va_arg(TRIO_VA_LIST_DEREF(arglist), double);
+                     (trio_long_double_t)va_arg(*arglist, double);
                  else
                    {
                      if (parameters[i].flags & FLAGS_SHORT)
@@ -3400,7 +3384,7 @@ TrioFormatRef
 TRIO_ARGS4((reference, format, arglist, argarray),
           trio_reference_t *reference,
           TRIO_CONST char *format,
-          TRIO_VA_LIST_PTR arglist,
+          va_list *arglist,
           trio_pointer_t *argarray)
 {
   int status;
@@ -3428,7 +3412,7 @@ TRIO_ARGS6((destination, destinationSize, OutStream, format, arglist, argarray),
           size_t destinationSize,
           void (*OutStream) TRIO_PROTO((trio_class_t *, int)),
           TRIO_CONST char *format,
-          TRIO_VA_LIST_PTR arglist,
+          va_list *arglist,
           trio_pointer_t *argarray)
 {
   int status;
@@ -3654,7 +3638,7 @@ TRIO_VARGS2((format, va_alist),
   assert(VALID(format));
 
   TRIO_VA_START(args, format);
-  status = TrioFormat(stdout, 0, TrioOutStreamFile, format, TRIO_VA_LIST_ADDR(args), NULL);
+  status = TrioFormat(stdout, 0, TrioOutStreamFile, format, &args, NULL);
   TRIO_VA_END(args);
   return status;
 }
@@ -3674,7 +3658,7 @@ TRIO_ARGS2((format, args),
 {
   assert(VALID(format));
 
-  return TrioFormat(stdout, 0, TrioOutStreamFile, format, TRIO_VA_LIST_ADDR(args), NULL);
+  return TrioFormat(stdout, 0, TrioOutStreamFile, format, &args, NULL);
 }
 
 /**
@@ -3721,7 +3705,7 @@ TRIO_VARGS3((file, format, va_alist),
   assert(VALID(format));
 
   TRIO_VA_START(args, format);
-  status = TrioFormat(file, 0, TrioOutStreamFile, format, TRIO_VA_LIST_ADDR(args), NULL);
+  status = TrioFormat(file, 0, TrioOutStreamFile, format, &args, NULL);
   TRIO_VA_END(args);
   return status;
 }
@@ -3744,7 +3728,7 @@ TRIO_ARGS3((file, format, args),
   assert(VALID(file));
   assert(VALID(format));
 
-  return TrioFormat(file, 0, TrioOutStreamFile, format, TRIO_VA_LIST_ADDR(args), NULL);
+  return TrioFormat(file, 0, TrioOutStreamFile, format, &args, NULL);
 }
 
 /**
@@ -3793,7 +3777,7 @@ TRIO_VARGS3((fd, format, va_alist),
   assert(VALID(format));
 
   TRIO_VA_START(args, format);
-  status = TrioFormat(&fd, 0, TrioOutStreamFileDescriptor, format, TRIO_VA_LIST_ADDR(args), NULL);
+  status = TrioFormat(&fd, 0, TrioOutStreamFileDescriptor, format, &args, NULL);
   TRIO_VA_END(args);
   return status;
 }
@@ -3815,7 +3799,7 @@ TRIO_ARGS3((fd, format, args),
 {
   assert(VALID(format));
 
-  return TrioFormat(&fd, 0, TrioOutStreamFileDescriptor, format, TRIO_VA_LIST_ADDR(args), NULL);
+  return TrioFormat(&fd, 0, TrioOutStreamFileDescriptor, format, &args, NULL);
 }
 
 /**
@@ -3859,7 +3843,7 @@ TRIO_VARGS4((stream, closure, format, va_alist),
   TRIO_VA_START(args, format);
   data.stream.out = stream;
   data.closure = closure;
-  status = TrioFormat(&data, 0, TrioOutStreamCustom, format, TRIO_VA_LIST_ADDR(args), NULL);
+  status = TrioFormat(&data, 0, TrioOutStreamCustom, format, &args, NULL);
   TRIO_VA_END(args);
   return status;
 }
@@ -3879,7 +3863,7 @@ TRIO_ARGS4((stream, closure, format, args),
 
   data.stream.out = stream;
   data.closure = closure;
-  return TrioFormat(&data, 0, TrioOutStreamCustom, format, TRIO_VA_LIST_ADDR(args), NULL);
+  return TrioFormat(&data, 0, TrioOutStreamCustom, format, &args, NULL);
 }
 
 TRIO_PUBLIC int
@@ -3926,7 +3910,7 @@ TRIO_VARGS3((buffer, format, va_alist),
   assert(VALID(format));
 
   TRIO_VA_START(args, format);
-  status = TrioFormat(&buffer, 0, TrioOutStreamString, format, TRIO_VA_LIST_ADDR(args), NULL);
+  status = TrioFormat(&buffer, 0, TrioOutStreamString, format, &args, NULL);
   *buffer = NIL; /* Terminate with NIL character */
   TRIO_VA_END(args);
   return status;
@@ -3952,7 +3936,7 @@ TRIO_ARGS3((buffer, format, args),
   assert(VALID(buffer));
   assert(VALID(format));
 
-  status = TrioFormat(&buffer, 0, TrioOutStreamString, format, TRIO_VA_LIST_ADDR(args), NULL);
+  status = TrioFormat(&buffer, 0, TrioOutStreamString, format, &args, NULL);
   *buffer = NIL;
   return status;
 }
@@ -4011,7 +3995,7 @@ TRIO_VARGS4((buffer, max, format, va_alist),
 
   TRIO_VA_START(args, format);
   status = TrioFormat(&buffer, max > 0 ? max - 1 : 0,
-                     TrioOutStreamStringMax, format, TRIO_VA_LIST_ADDR(args), NULL);
+                     TrioOutStreamStringMax, format, &args, NULL);
   if (max > 0)
     *buffer = NIL;
   TRIO_VA_END(args);
@@ -4041,7 +4025,7 @@ TRIO_ARGS4((buffer, max, format, args),
   assert(VALID(format));
 
   status = TrioFormat(&buffer, max > 0 ? max - 1 : 0,
-                     TrioOutStreamStringMax, format, TRIO_VA_LIST_ADDR(args), NULL);
+                     TrioOutStreamStringMax, format, &args, NULL);
   if (max > 0)
     *buffer = NIL;
   return status;
@@ -4102,7 +4086,7 @@ TRIO_VARGS4((buffer, max, format, va_alist),
   buffer = &buffer[buf_len];
 
   status = TrioFormat(&buffer, max - 1 - buf_len,
-                     TrioOutStreamStringMax, format, TRIO_VA_LIST_ADDR(args), NULL);
+                     TrioOutStreamStringMax, format, &args, NULL);
   TRIO_VA_END(args);
   *buffer = NIL;
   return status;
@@ -4125,7 +4109,7 @@ TRIO_ARGS4((buffer, max, format, args),
   buf_len = trio_length(buffer);
   buffer = &buffer[buf_len];
   status = TrioFormat(&buffer, max - 1 - buf_len,
-                     TrioOutStreamStringMax, format, TRIO_VA_LIST_ADDR(args), NULL);
+                     TrioOutStreamStringMax, format, &args, NULL);
   *buffer = NIL;
   return status;
 }
@@ -4152,7 +4136,7 @@ TRIO_VARGS2((format, va_alist),
     {
       TRIO_VA_START(args, format);
       (void)TrioFormat(info, 0, TrioOutStreamStringDynamic,
-                      format, TRIO_VA_LIST_ADDR(args), NULL);
+                      format, &args, NULL);
       TRIO_VA_END(args);
 
       trio_string_terminate(info);
@@ -4178,7 +4162,7 @@ TRIO_ARGS2((format, args),
   if (info)
     {
       (void)TrioFormat(info, 0, TrioOutStreamStringDynamic,
-                      format, TRIO_VA_LIST_ADDR(args), NULL);
+                      format, &args, NULL);
       trio_string_terminate(info);
       result = trio_string_extract(info);
       trio_string_destroy(info);
@@ -4210,7 +4194,7 @@ TRIO_VARGS3((result, format, va_alist),
     {
       TRIO_VA_START(args, format);
       status = TrioFormat(info, 0, TrioOutStreamStringDynamic,
-                         format, TRIO_VA_LIST_ADDR(args), NULL);
+                         format, &args, NULL);
       TRIO_VA_END(args);
       if (status >= 0)
        {
@@ -4244,7 +4228,7 @@ TRIO_ARGS3((result, format, args),
   else
     {
       status = TrioFormat(info, 0, TrioOutStreamStringDynamic,
-                         format, TRIO_VA_LIST_ADDR(args), NULL);
+                         format, &args, NULL);
       if (status >= 0)
        {
          trio_string_terminate(info);
@@ -4946,7 +4930,7 @@ TRIO_VARGS3((ref, format, va_alist),
   assert(VALID(format));
 
   TRIO_VA_START(arglist, format);
-  status = TrioFormatRef((trio_reference_t *)ref, format, TRIO_VA_LIST_ADDR(arglist), NULL);
+  status = TrioFormatRef((trio_reference_t *)ref, format, &arglist, NULL);
   TRIO_VA_END(arglist);
   return status;
 }
@@ -4963,7 +4947,7 @@ TRIO_ARGS3((ref, format, arglist),
 {
   assert(VALID(format));
 
-  return TrioFormatRef((trio_reference_t *)ref, format, TRIO_VA_LIST_ADDR(arglist), NULL);
+  return TrioFormatRef((trio_reference_t *)ref, format, &arglist, NULL);
 }
 
 /*************************************************************************
@@ -6390,7 +6374,7 @@ TRIO_ARGS6((source, sourceSize, InStream, format, arglist, argarray),
           size_t sourceSize,
           void (*InStream) TRIO_PROTO((trio_class_t *, int *)),
           TRIO_CONST char *format,
-          TRIO_VA_LIST_PTR arglist,
+          va_list *arglist,
           trio_pointer_t *argarray)
 {
   int status;
@@ -6434,14 +6418,11 @@ TRIO_ARGS2((self, intPointer),
           trio_class_t *self,
           int *intPointer)
 {
-  FILE *file;
+  FILE *file = (FILE *)self->location;
 
   assert(VALID(self));
-  assert(VALID(self->location));
   assert(VALID(file));
 
-  file = (FILE *)self->location;
-
   self->current = fgetc(file);
   if (self->current == EOF)
     {
@@ -6470,14 +6451,11 @@ TRIO_ARGS2((self, intPointer),
           trio_class_t *self,
           int *intPointer)
 {
-  int fd;
+  int fd = *((int *)self->location);
   int size;
   unsigned char input;
 
   assert(VALID(self));
-  assert(VALID(self->location));
-
-  fd = *((int *)self->location);
 
   size = read(fd, &input, sizeof(char));
   if (size == -1)
@@ -6608,7 +6586,7 @@ TRIO_VARGS2((format, va_alist),
   TRIO_VA_START(args, format);
   status = TrioScan((trio_pointer_t)stdin, 0,
                    TrioInStreamFile,
-                   format, TRIO_VA_LIST_ADDR(args), NULL);
+                   format, &args, NULL);
   TRIO_VA_END(args);
   return status;
 }
@@ -6623,7 +6601,7 @@ TRIO_ARGS2((format, args),
 
   return TrioScan((trio_pointer_t)stdin, 0,
                  TrioInStreamFile,
-                 format, TRIO_VA_LIST_ADDR(args), NULL);
+                 format, &args, NULL);
 }
 
 TRIO_PUBLIC int
@@ -6658,7 +6636,7 @@ TRIO_VARGS3((file, format, va_alist),
   TRIO_VA_START(args, format);
   status = TrioScan((trio_pointer_t)file, 0,
                    TrioInStreamFile,
-                   format, TRIO_VA_LIST_ADDR(args), NULL);
+                   format, &args, NULL);
   TRIO_VA_END(args);
   return status;
 }
@@ -6675,7 +6653,7 @@ TRIO_ARGS3((file, format, args),
 
   return TrioScan((trio_pointer_t)file, 0,
                  TrioInStreamFile,
-                 format, TRIO_VA_LIST_ADDR(args), NULL);
+                 format, &args, NULL);
 }
 
 TRIO_PUBLIC int
@@ -6711,7 +6689,7 @@ TRIO_VARGS3((fd, format, va_alist),
   TRIO_VA_START(args, format);
   status = TrioScan((trio_pointer_t)&fd, 0,
                    TrioInStreamFileDescriptor,
-                   format, TRIO_VA_LIST_ADDR(args), NULL);
+                   format, &args, NULL);
   TRIO_VA_END(args);
   return status;
 }
@@ -6727,7 +6705,7 @@ TRIO_ARGS3((fd, format, args),
 
   return TrioScan((trio_pointer_t)&fd, 0,
                  TrioInStreamFileDescriptor,
-                 format, TRIO_VA_LIST_ADDR(args), NULL);
+                 format, &args, NULL);
 }
 
 TRIO_PUBLIC int
@@ -6765,7 +6743,7 @@ TRIO_VARGS4((stream, closure, format, va_alist),
   TRIO_VA_START(args, format);
   data.stream.in = stream;
   data.closure = closure;
-  status = TrioScan(&data, 0, TrioInStreamCustom, format, TRIO_VA_LIST_ADDR(args), NULL);
+  status = TrioScan(&data, 0, TrioInStreamCustom, format, &args, NULL);
   TRIO_VA_END(args);
   return status;
 }
@@ -6785,7 +6763,7 @@ TRIO_ARGS4((stream, closure, format, args),
 
   data.stream.in = stream;
   data.closure = closure;
-  return TrioScan(&data, 0, TrioInStreamCustom, format, TRIO_VA_LIST_ADDR(args), NULL);
+  return TrioScan(&data, 0, TrioInStreamCustom, format, &args, NULL);
 }
 
 TRIO_PUBLIC int
@@ -6825,7 +6803,7 @@ TRIO_VARGS3((buffer, format, va_alist),
   TRIO_VA_START(args, format);
   status = TrioScan((trio_pointer_t)&buffer, 0,
                    TrioInStreamString,
-                   format, TRIO_VA_LIST_ADDR(args), NULL);
+                   format, &args, NULL);
   TRIO_VA_END(args);
   return status;
 }
@@ -6842,7 +6820,7 @@ TRIO_ARGS3((buffer, format, args),
 
   return TrioScan((trio_pointer_t)&buffer, 0,
                  TrioInStreamString,
-                 format, TRIO_VA_LIST_ADDR(args), NULL);
+                 format, &args, NULL);
 }
 
 TRIO_PUBLIC int