From 5d944dfe9f03c9fb43271199d2ba4b8880747614 Mon Sep 17 00:00:00 2001 From: David Date: Sat, 30 Nov 2013 09:14:45 +1300 Subject: Bugfixes in strlen() which used to handle zero-length strings incorrectly --- Makefile | 2 +- kernel.c | 9 +++++---- screen/console.c | 10 +++++----- string/common.c | 4 ++-- 4 files changed, 13 insertions(+), 12 deletions(-) diff --git a/Makefile b/Makefile index 4226d9d..1b64ea7 100644 --- a/Makefile +++ b/Makefile @@ -27,7 +27,7 @@ link: install: # sudo umount $(TOAST_TARGET) - sudo mount /dev/loop0p1 $(TOAST_TARGET) + sudo mount /dev/loop1p1 $(TOAST_TARGET) sudo cp kernel $(TOAST_TARGET) ls $(TOAST_TARGET) sudo umount $(TOAST_TARGET) diff --git a/kernel.c b/kernel.c index dec3e57..8ca7927 100644 --- a/kernel.c +++ b/kernel.c @@ -41,7 +41,8 @@ void kernel_main(multiboot_info_t *mbd, unsigned int magic) console_print("--------------------------------\nShowing console_print() off...\n%dd in binary is %b\n%oo = %xh = %dd\n%d is the ASCII code for %c\n--------------------------------\n",100,100,1234,1234,1234,112,112); - + console_print("strlen(\"asdf\") == %d\n",strlen("asdf")); + console_print("strlen(\"\") == %d\n",strlen("")); // Show all memory stuff uint32_t mmaps = mbd->mmap_length; @@ -51,9 +52,9 @@ void kernel_main(multiboot_info_t *mbd, unsigned int magic) mmap = (multiboot_memory_map_t*) ( (unsigned int)mmap + mmap->size + sizeof(unsigned int) ); console_print("%s: 0x%x to 0x%x = %d bytes\n", mmap->type == 1? "AVAILABLE" : "RESERVED ", - mmap->addr, - mmap->addr + mmap->len-1, - mmap->len + (uint32_t)mmap->addr, + (uint32_t)mmap->addr + (uint32_t)mmap->len-1, + (uint32_t)mmap->len ); } diff --git a/screen/console.c b/screen/console.c index da5cf9a..cceab6c 100644 --- a/screen/console.c +++ b/screen/console.c @@ -171,19 +171,19 @@ void console_print(const char* format, ...) console_print_string(va_arg(strings, char*)); break; case 'c': - console_print_char(va_arg(strings, uint64_t)); + console_print_char(va_arg(strings, int)); break; case 'd': - console_print_num(va_arg(strings, uint32_t),10); + console_print_num(va_arg(strings, int),10); break; case 'x': - console_print_num(va_arg(strings, uint64_t),16); + console_print_num(va_arg(strings, int),16); break; case 'o': - console_print_num(va_arg(strings, uint64_t),8); + console_print_num(va_arg(strings, int),8); break; case 'b': - console_print_num(va_arg(strings, uint64_t),2); + console_print_num(va_arg(strings, int),2); break; } } else { diff --git a/string/common.c b/string/common.c index 6edce1a..b9adc3e 100644 --- a/string/common.c +++ b/string/common.c @@ -24,8 +24,8 @@ uint64_t strlen(const char *string) { uint64_t l = 0; - while (string[++l] != 0); - return l; + while (string[l++]); + return l-1; } bool itoa(uint32_t num, char *buffer, uint8_t base) -- cgit v1.1