diff --git a/include/functions.h b/include/functions.h index 98cfefe655..367d784ae0 100644 --- a/include/functions.h +++ b/include/functions.h @@ -236,8 +236,8 @@ u32 __osCheckArena(Arena* heap); void* proutSprintf(void* s, const char* buf, size_t n); s32 vsprintf(char* dst, char* fmt, va_list args); s32 sprintf(char* s, char* fmt, ...); -void PrintUtils_VPrintf(void* callback, const char* fmt, va_list args); -// void PrintUtils_Printf(void); +void PrintUtils_VPrintf(PrintCallback* pfn, const char* fmt, va_list args); +void PrintUtils_Printf(PrintCallback* pfn, const char* fmt, ...); void Sleep_Cycles(OSTime time); // void Sleep_Nsec(void); void Sleep_Usec(s32); diff --git a/src/boot_O2/gfxprint.c b/src/boot_O2/gfxprint.c index 4857996789..f671c6f5ca 100644 --- a/src/boot_O2/gfxprint.c +++ b/src/boot_O2/gfxprint.c @@ -172,7 +172,7 @@ Gfx* GfxPrint_Close(GfxPrint* this) { } void GfxPrint_VPrintf(GfxPrint* this, const char* fmt, va_list args) { - PrintUtils_VPrintf(&this->callback, fmt, args); + PrintUtils_VPrintf((PrintCallback*)&this->callback, fmt, args); } void GfxPrint_Printf(GfxPrint* this, const char* fmt, ...) { @@ -180,4 +180,6 @@ void GfxPrint_Printf(GfxPrint* this, const char* fmt, ...) { va_start(args, fmt); GfxPrint_VPrintf(this, fmt, args); + + va_end(args); } diff --git a/src/boot_O2/printutils.c b/src/boot_O2/printutils.c index fb5b81033e..4f04fca145 100644 --- a/src/boot_O2/printutils.c +++ b/src/boot_O2/printutils.c @@ -1,5 +1,14 @@ #include "global.h" -#pragma GLOBAL_ASM("asm/non_matchings/boot/printutils/PrintUtils_VPrintf.s") +void PrintUtils_VPrintf(PrintCallback* pfn, const char* fmt, va_list args) { + _Printf(*pfn, pfn, fmt, args); +} -#pragma GLOBAL_ASM("asm/non_matchings/boot/printutils/PrintUtils_Printf.s") +void PrintUtils_Printf(PrintCallback* pfn, const char* fmt, ...) { + va_list args; + va_start(args, fmt); + + PrintUtils_VPrintf(pfn, fmt, args); + + va_end(args); +} diff --git a/src/boot_O2_g3/fault_drawer.c b/src/boot_O2_g3/fault_drawer.c index a5d728864f..74a3b7e5ec 100644 --- a/src/boot_O2_g3/fault_drawer.c +++ b/src/boot_O2_g3/fault_drawer.c @@ -153,6 +153,8 @@ void FaultDrawer_Printf(const char* fmt, ...) { va_start(args, fmt); FaultDrawer_VPrintf(fmt, args); + + va_end(args); } void FaultDrawer_DrawText(s32 x, s32 y, const char* fmt, ...) { @@ -161,6 +163,8 @@ void FaultDrawer_DrawText(s32 x, s32 y, const char* fmt, ...) { FaultDrawer_SetCursor(x, y); FaultDrawer_VPrintf(fmt, args); + + va_end(args); } void FaultDrawer_SetDrawerFB(void* fb, u16 w, u16 h) { diff --git a/src/libultra/rmon/sprintf.c b/src/libultra/rmon/sprintf.c index 7658bbd302..446a747027 100644 --- a/src/libultra/rmon/sprintf.c +++ b/src/libultra/rmon/sprintf.c @@ -14,12 +14,15 @@ int vsprintf(char* dst, char* fmt, va_list args) { int sprintf(char* dst, char* fmt, ...) { int ans; - va_list ap; - va_start(ap, fmt); + va_list args; + va_start(args, fmt); - ans = _Printf(&proutSprintf, dst, fmt, ap); + ans = _Printf(&proutSprintf, dst, fmt, args); if (ans > -1) { dst[ans] = 0; } + + va_end(args); + return ans; }