2013-09-26 17:14:40 +02:00

78 lines
2.4 KiB
Plaintext

$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 */
// ---------------------------------------------------------------------------