From a0458f6d2ef04ce30f5c951281cd7de91bd48cff Mon Sep 17 00:00:00 2001 From: Timerix22 Date: Thu, 9 Mar 2023 22:01:49 +0600 Subject: [PATCH] kprintf hex --- src/kprint/README.md | 4 +++- src/kprint/kprintf.c | 15 ++++++++++++--- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/src/kprint/README.md b/src/kprint/README.md index 1bdf1d2..e1ad83f 100644 --- a/src/kprint/README.md +++ b/src/kprint/README.md @@ -11,7 +11,9 @@ Unlike in standard printf, `%l...` and `%ll...` placeholders dont depend on size | f32 / f64 | %f | | char | %c | | char[] | %s | -| void\* | %p / %x | +| void\* | %p | +| 32bit or less | %x | +| 64bit | %lx |
diff --git a/src/kprint/kprintf.c b/src/kprint/kprintf.c index c4a3bb6..80c299c 100644 --- a/src/kprint/kprintf.c +++ b/src/kprint/kprintf.c @@ -75,10 +75,19 @@ void kprintf(const char* format, ...){ if((c=format[i++])) goto format_escape_seq; break; - case 'p': + case 'p': ; + void* phex=va_arg(vl, void*); + argstr=toString_hex(&phex,getEndian()==LittleEndian,sizeof(phex),1,0); + break; case 'x': ; - u64 px=va_arg(vl, u64); - argstr=toString_hex(&px,getEndian()==LittleEndian,sizeof(px),1,0); + if(l){ + u64 xhex=va_arg(vl, u64); + argstr=toString_hex(&xhex,getEndian()==LittleEndian,sizeof(xhex),0,1); + } + else { + u32 xhex=va_arg(vl, u32); + argstr=toString_hex(&xhex,getEndian()==LittleEndian,sizeof(xhex),0,1); + } break; case 's': ; char* cptr=va_arg(vl,char*);