From: cuz Date: Sat, 18 Dec 2004 14:28:42 +0000 (+0000) Subject: Fixes for the Watcom compiler and some general improvements for older X-Git-Tag: V2.12.0~498 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=218e722b91ddcae40cf17456ddfc1994d6964868;p=cc65 Fixes for the Watcom compiler and some general improvements for older compilers that don't have the va_copy macro. git-svn-id: svn://svn.cc65.org/cc65/trunk@3338 b7a2c559-68d2-44c3-8de9-860c34a00d81 --- diff --git a/src/common/strbuf.c b/src/common/strbuf.c index 6d1e26285..369716c3f 100644 --- a/src/common/strbuf.c +++ b/src/common/strbuf.c @@ -37,6 +37,7 @@ /* common */ #include "strbuf.h" +#include "va_copy.h" #include "xmalloc.h" #include "xsprintf.h" diff --git a/src/common/va_copy.h b/src/common/va_copy.h new file mode 100644 index 000000000..d2be4ebc0 --- /dev/null +++ b/src/common/va_copy.h @@ -0,0 +1,54 @@ +/*****************************************************************************/ +/* */ +/* 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 + + + diff --git a/src/common/xsprintf.c b/src/common/xsprintf.c index da4bcaa64..307d16e18 100644 --- a/src/common/xsprintf.c +++ b/src/common/xsprintf.c @@ -42,6 +42,7 @@ #include "chartype.h" #include "check.h" #include "inttypes.h" +#include "va_copy.h" #include "xsprintf.h" @@ -154,7 +155,9 @@ static intmax_t NextIVal (PrintfCtrl*P) 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; } } @@ -171,7 +174,9 @@ static uintmax_t NextUVal (PrintfCtrl*P) 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; } } @@ -372,7 +377,7 @@ int xvsnprintf (char* Buf, size_t Size, const char* Format, va_list ap) /* Initialize the control structure */ - P.ap = ap; + va_copy (P.ap, ap); P.Buf = Buf; P.BufSize = Size; P.BufFill = 0; @@ -584,6 +589,9 @@ int xvsnprintf (char* Buf, size_t Size, const char* Format, va_list ap) } } + /* 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!