--- /dev/null
+/*****************************************************************************/
+/* */
+/* va_copy.h */
+/* */
+/* va_copy macro for systems that don't have it */
+/* */
+/* */
+/* */
+/* (C) 2004 Ullrich von Bassewitz */
+/* Römerstrasse 52 */
+/* D-70794 Filderstadt */
+/* EMail: uz@cc65.org */
+/* */
+/* */
+/* This software is provided 'as-is', without any expressed or implied */
+/* warranty. In no event will the authors be held liable for any damages */
+/* arising from the use of this software. */
+/* */
+/* Permission is granted to anyone to use this software for any purpose, */
+/* including commercial applications, and to alter it and redistribute it */
+/* freely, subject to the following restrictions: */
+/* */
+/* 1. The origin of this software must not be misrepresented; you must not */
+/* claim that you wrote the original software. If you use this software */
+/* in a product, an acknowledgment in the product documentation would be */
+/* appreciated but is not required. */
+/* 2. Altered source versions must be plainly marked as such, and must not */
+/* be misrepresented as being the original software. */
+/* 3. This notice may not be removed or altered from any source */
+/* distribution. */
+/* */
+/*****************************************************************************/
+
+
+
+#ifndef VA_COPY_H
+#define VA_COPY_H
+
+
+
+/* The watcom compiler doesn't have va_copy and a problematic va_list definition */
+#if defined(__WATCOMC__)
+
+#define va_copy(src,dest) memcpy((src), (dest), sizeof (va_list))
+
+#endif
+
+
+
+/* End of va_copy.h */
+#endif
+
+
+
#include "chartype.h"
#include "check.h"
#include "inttypes.h"
+#include "va_copy.h"
#include "xsprintf.h"
case lmIntMax: return va_arg (P->ap, intmax_t);
case lmSizeT: return (uintmax_t) va_arg (P->ap, size_t);
case lmPtrDiffT: return (long) va_arg (P->ap, ptrdiff_t);
- default: FAIL ("Invalid type size in NextIVal");
+ default:
+ FAIL ("Invalid type size in NextIVal");
+ return 0;
}
}
case lmIntMax: return va_arg (P->ap, uintmax_t);
case lmSizeT: return va_arg (P->ap, size_t);
case lmPtrDiffT: return (intmax_t) va_arg (P->ap, ptrdiff_t);
- default: FAIL ("Invalid type size in NextUVal");
+ default:
+ FAIL ("Invalid type size in NextUVal");
+ return 0;
}
}
/* Initialize the control structure */
- P.ap = ap;
+ va_copy (P.ap, ap);
P.Buf = Buf;
P.BufSize = Size;
P.BufFill = 0;
}
}
+ /* We don't need P.ap any longer */
+ va_end (P.ap);
+
/* Terminate the output string and return the number of chars that had
* been written if the buffer was large enough.
* Beware: The terminating zero is not counted for the function result!