ports/lang/ghc-8.10.7/patches/patch-rts_RtsMessages_c

65 lines
1.7 KiB
Text

$OpenBSD: patch-rts_RtsMessages_c,v 1.1.1.1 2023/03/09 18:59:42 kili Exp $
The debug message function has to return the number of bytes written
(like printf(3)), to allow killing a %n format specifier in one in
one invocation of statsPrintf() in report_summary() (rts/Stats.c).
Index: rts/RtsMessages.c
--- rts/RtsMessages.c.orig
+++ rts/RtsMessages.c
@@ -36,7 +36,7 @@
// Default to the stdio implementation of these hooks.
RtsMsgFunction *fatalInternalErrorFn = rtsFatalInternalErrorFn;
-RtsMsgFunction *debugMsgFn = rtsDebugMsgFn;
+RtsMsgFunctionRetLen *debugMsgFn = rtsDebugMsgFn;
RtsMsgFunction *errorMsgFn = rtsErrorMsgFn;
RtsMsgFunction *sysErrorMsgFn = rtsSysErrorMsgFn;
@@ -102,10 +102,10 @@ debugBelch(const char*s, ...)
va_end(ap);
}
-void
+int
vdebugBelch(const char*s, va_list ap)
{
- (*debugMsgFn)(s,ap);
+ return (*debugMsgFn)(s,ap);
}
/* -----------------------------------------------------------------------------
@@ -285,16 +285,16 @@ rtsSysErrorMsgFn(const char *s, va_list ap)
#endif
}
-void
+int
rtsDebugMsgFn(const char *s, va_list ap)
{
+ int r;
#if defined(mingw32_HOST_OS)
/* Ensure we're in text mode so newlines get encoded properly. */
int mode = _setmode (_fileno(stderr), _O_TEXT);
if (isGUIApp())
{
char buf[BUFSIZE];
- int r;
r = vsnprintf(buf, BUFSIZE, s, ap);
if (r > 0 && r < BUFSIZE) {
@@ -305,12 +305,13 @@ rtsDebugMsgFn(const char *s, va_list ap)
#endif
{
/* don't fflush(stdout); WORKAROUND bug in Linux glibc */
- vfprintf(stderr, s, ap);
+ r = vfprintf(stderr, s, ap);
fflush(stderr);
}
#if defined(mingw32_HOST_OS)
_setmode (_fileno(stderr), mode);
#endif
+ return r;
}