$NetBSD: patch-as,v 1.1 2010/04/06 04:36:00 dsainty Exp $ Casts to va_list are forbidden by ISO C++. Even if everything works as intended, the format string parser that generates the va_list does not support all formatting characters. Make this code portable by failing to parse any format string at all, not just the ones that aren't fully supported. --- SrcShared/HostControl.cpp.orig 2010-04-06 15:17:21.970083672 +1200 +++ SrcShared/HostControl.cpp 2010-04-06 15:22:12.868914553 +1200 @@ -143,8 +143,10 @@ static HostHandler PrvHostGetHandler (HostControlSelectorType selector); +#ifdef ILLEGAL_VA_LIST_CASTS static Bool PrvCollectParameters (EmSubroutine& sub, const string& fmt, ByteList& stackData, StringList& stringData); +#endif /* ILLEGAL_VA_LIST_CASTS */ static void PrvPushShort (EmSubroutine& sub, ByteList& stackData); static void PrvPushLong (EmSubroutine& sub, ByteList& stackData); static void PrvPushDouble (EmSubroutine& sub, ByteList& stackData); @@ -228,6 +230,7 @@ return fgets (s, n, f); } +#ifdef ILLEGAL_VA_LIST_CASTS inline int x_vfprintf (FILE* f, const char* fmt, va_list args) { if (f == hostLogFILE) @@ -237,6 +240,7 @@ return vfprintf (f, fmt, args); } +#endif /* ILLEGAL_VA_LIST_CASTS */ inline int x_fputc (int c, FILE* f) { @@ -1119,11 +1123,14 @@ ByteList stackData; StringList stringData; +#ifdef ILLEGAL_VA_LIST_CASTS if (!::PrvCollectParameters (sub, string (fmt), stackData, stringData)) { +#endif /* ILLEGAL_VA_LIST_CASTS */ PUT_RESULT_VAL (long, EOF); errno = hostErrInvalidParameter; return; +#ifdef ILLEGAL_VA_LIST_CASTS } // Write everything out to the file using vfprintf. @@ -1133,6 +1140,7 @@ // Return the result. PUT_RESULT_VAL (long, result); +#endif /* ILLEGAL_VA_LIST_CASTS */ } @@ -4190,6 +4198,7 @@ // ¥ PrvCollectParameters // --------------------------------------------------------------------------- +#ifdef ILLEGAL_VA_LIST_CASTS Bool PrvCollectParameters (EmSubroutine& sub, const string& fmt, ByteList& stackData, StringList& stringData) { // Start parsing up the format string. @@ -4473,6 +4482,7 @@ stackData.insert (stackData.end (), sizeof (char*), 0); // Make space for a "char*" *(const char**) &stackData[oldSize] = (*(stringData.end () - 1)).c_str (); } +#endif /* ILLEGAL_VA_LIST_CASTS */ // ---------------------------------------------------------------------------