aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid <dbphillipsnz@gmail.com>2013-11-30 09:14:45 +1300
committerDavid <dbphillipsnz@gmail.com>2014-03-27 20:32:48 +1300
commit5d944dfe9f03c9fb43271199d2ba4b8880747614 (patch)
treeab57a964538f06e86064ad45cb510673b91b8c94
parentf5bbf7cf9bd1eff316fd5b2d2ed71abbb49a7ecd (diff)
downloadtoast-5d944dfe9f03c9fb43271199d2ba4b8880747614.tar.xz
Bugfixes in strlen() which used to handle zero-length strings incorrectly
-rw-r--r--Makefile2
-rw-r--r--kernel.c9
-rw-r--r--screen/console.c10
-rw-r--r--string/common.c4
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)