$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; }