Some printf() bug fixes

This commit is contained in:
2024-05-29 12:00:02 +02:00
parent ed18f4ac4b
commit f4e8435603
2 changed files with 6 additions and 7 deletions
+6 -6
View File
@@ -27,7 +27,7 @@ void clear() {
// TODO: Support negative numbers // TODO: Support negative numbers
// TODO: Printing individual characters doesn't let escape sequences work :( // TODO: Printing individual characters doesn't let escape sequences work :(
int printf(const char* fmt, ...) { int printf(const char* fmt, ...) {
char* argPtr = (char*)&fmt + sizeof(char*); // First arg after fmt uint32_t* argPtr = (uint32_t*)&fmt + 1; // First arg after fmt
uint8_t state = 0; uint8_t state = 0;
for (uint32_t i = 0; fmt[i] != '\0'; i++) { for (uint32_t i = 0; fmt[i] != '\0'; i++) {
@@ -40,22 +40,22 @@ int printf(const char* fmt, ...) {
switch (c) { switch (c) {
case 'd': // Decimal number case 'd': // Decimal number
print(itoa(*(uint32_t*)argPtr, 10)); print(itoa(*(uint32_t*)argPtr, 10));
argPtr += sizeof(unsigned int); argPtr++;
break; break;
case 'x': // Hex number case 'x': // Hex number
print(itoa(*(uint32_t*)argPtr, 16)); print(itoa(*(uint32_t*)argPtr, 16));
argPtr += sizeof(unsigned int); argPtr++;;
break; break;
case 's': // String case 's': // String
print(*(char**)argPtr); print(*(char**)argPtr);
argPtr += sizeof(char*); argPtr++;
break; break;
case 'c': // Char case 'c': // Char
putc(*(char*)argPtr); putc(*(char*)argPtr);
argPtr += sizeof(char); argPtr++;
break; break;
case '%': // Just print '%' case '%': // Just print '%'
putc('%'); putc(c);
break; break;
default: default:
putc('%'); putc('%');
-1
View File
@@ -304,7 +304,6 @@ void printPhysicalMemmap() {
smapEntry_t* smapEntry = (smapEntry_t*)SMAP_ENTRIES; smapEntry_t* smapEntry = (smapEntry_t*)SMAP_ENTRIES;
for (uint32_t i = 0; i < entryCount; i++) { for (uint32_t i = 0; i < entryCount; i++) {
// Need to cast to uint32_t because they are uint64_t
printf("Region %d - base: 0x%x length: 0x%x type: %d ", i, (uint32_t)smapEntry->baseAddress, (uint32_t)smapEntry->length, smapEntry->type); printf("Region %d - base: 0x%x length: 0x%x type: %d ", i, (uint32_t)smapEntry->baseAddress, (uint32_t)smapEntry->length, smapEntry->type);
switch (smapEntry->type) { switch (smapEntry->type) {