mirror of
https://github.com/Stichting-MINIX-Research-Foundation/pkgsrc-ng.git
synced 2025-09-21 02:24:06 -04:00
78 lines
2.4 KiB
Plaintext
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 */
|
|
|
|
|
|
// ---------------------------------------------------------------------------
|