From 0df9d390974dca233fec5dcb660a3d1b2713189b Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Mon, 26 May 2025 14:11:42 +0200 Subject: [PATCH] fix miniprintf formatting --- Makefile | 2 ++ src/mini_printf.c | 30 ++++++++++++++++++++++++------ 2 files changed, 26 insertions(+), 6 deletions(-) diff --git a/Makefile b/Makefile index e776aef1f..66da64c90 100755 --- a/Makefile +++ b/Makefile @@ -164,6 +164,8 @@ ifeq ($(MODERN),0) $(C_BUILDDIR)/agb_flash_1m.o: CC1FLAGS := -O -mthumb-interwork $(C_BUILDDIR)/agb_flash_mx.o: CC1FLAGS := -O -mthumb-interwork $(C_BUILDDIR)/m4a.o: CC1 := tools/agbcc/bin/old_agbcc +else + $(C_BUILDDIR)/agb_flash.o: override CC1FLAGS += -fno-toplevel-reorder endif #### Main Rules #### diff --git a/src/mini_printf.c b/src/mini_printf.c index 6e9801ab7..a6e4d222d 100644 --- a/src/mini_printf.c +++ b/src/mini_printf.c @@ -189,18 +189,36 @@ s32 mini_vpprintf(void *buf, const char *fmt, va_list va) char pad_char = ' '; s32 pad_to = 0; char l = 0; + //char alt_form = 0; // '#' + //char plus_sign = 0; // '+' + bool8 flagsDone = FALSE; char *ptr; ch=*(fmt++); - /* Zero padding requested */ - if (ch == '0') - pad_char = '0'; - while (ch >= '0' && ch <= '9') + // Parse flags + while (!flagsDone) { - pad_to = pad_to * 10 + (ch - '0'); - ch= *(fmt++); + switch (ch) + { + //case '#': alt_form = 1; ch = *(fmt++); break; + //case '+': plus_sign = 1; ch = *(fmt++); break; + case '0': pad_char = '0'; ch = *(fmt++); break; + default: flagsDone = TRUE; break; + } } + + if (ch == '*') { + pad_to = va_arg(va, int); + ch = *(fmt++); + } + else { + while (ch >= '0' && ch <= '9') { + pad_to = pad_to * 10 + (ch - '0'); + ch = *(fmt++); + } + } + if(pad_to > (s32) sizeof(bf)) { pad_to = sizeof(bf);