Added logging, %lu and %p format specifiers to vnsprintf()

This commit is contained in:
2026-03-22 14:25:49 +01:00
parent 9c66d7228a
commit 421a83d202
3 changed files with 21 additions and 4 deletions
+2
View File
@@ -33,4 +33,6 @@ IMG_SIZE = 256 # 256MB
# Qemu
Q_MEMORY = 256M
Q_AUDIODEV = pipewire
Q_LOGGING = int,cpu_reset
Q_LOGFILE = qemu.log
+16 -3
View File
@@ -124,6 +124,7 @@ int vsnprintf(char* buf, size_t n, char* fmt, va_list ap) {
char pad = ' ';
int width = 0;
int prec = -1;
int is_long = 0;
if (*fmt == '-') {
left = 1;
@@ -149,10 +150,22 @@ int vsnprintf(char* buf, size_t n, char* fmt, va_list ap) {
}
}
if (*fmt == 'l') {
is_long = 1;
fmt++;
if (*fmt == 'l') { // handle ll
fmt++;
}
}
switch (*fmt) {
case 'd': fmt_int(buf, n, &idx, va_arg(ap, int), width, pad, left); break;
case 'u': fmt_uint(buf, n, &idx, va_arg(ap, unsigned int), 10, width, pad, left); break;
case 'x': fmt_uint(buf, n, &idx, va_arg(ap, unsigned int), 16, width, pad, left); break;
case 'd': fmt_int(buf, n, &idx, is_long ? va_arg(ap, int64_t) : va_arg(ap, int32_t), width, pad, left); break;
case 'u': fmt_uint(buf, n, &idx, is_long ? va_arg(ap, uint64_t) : va_arg(ap, uint32_t), 10, width, pad, left); break;
case 'x': fmt_uint(buf, n, &idx, is_long ? va_arg(ap, uint64_t) : va_arg(ap, uint32_t), 16, width, pad, left); break;
case 'p':
fmt_string(buf, n, &idx, "0x", 2, 0, ' ', 0);
fmt_uint(buf, n, &idx, va_arg(ap, uintptr_t), 16, 16, '0', 0);
break;
case 'f': fmt_float(buf, n, &idx, va_arg(ap, double), prec, width, pad, left); break;
case 's': {
char* s = va_arg(ap, char*);
+3 -1
View File
@@ -44,6 +44,7 @@ $(MODULES):
clean:
rm -f $(TARGET)
rm -fr $(SYSROOT)
rm -f $(Q_LOGFILE)
for m in $(MODULES); do $(MAKE) -C $$m clean; done
qemu:
@@ -51,5 +52,6 @@ qemu:
-drive format=raw,file=$(TARGET),index=0,media=disk\
-m $(Q_MEMORY) -accel tcg -monitor stdio -net none\
-rtc base=localtime,clock=host,driftfix=slew\
-audiodev $(Q_AUDIODEV),id=audio0 -machine pcspk-audiodev=audio0
-audiodev $(Q_AUDIODEV),id=audio0 -machine pcspk-audiodev=audio0\
-d $(Q_LOGGING) -D $(Q_LOGFILE)