diff --git a/.gitignore b/.gitignore index 0fa6fe4..d832d60 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ *.o +*.bin /config.mk diff --git a/Makefile b/Makefile index e05cbf5..94031e0 100644 --- a/Makefile +++ b/Makefile @@ -2,8 +2,8 @@ include config.mk run: run-iso -all: all-kernel all-iso all-libk -clean: clean-kernel clean-iso clean-libk +all: all-kernel all-iso all-libk all-test +clean: clean-kernel clean-iso clean-libk clean-test all-kernel: all-libk make all -C arch I=$(shell pwd)/include LIBK=$(shell pwd)/libk/libk.a @@ -25,3 +25,9 @@ all-libk: clean-libk: make clean -C libk + +test-libk: all-libk + make run -C test/libk I=$(shell pwd)/include LIBK=$(shell pwd)/libk/libk.a + +clean-test: + make clean -C test/libk diff --git a/arch/console.c b/arch/console.c index 7dfdcb1..6348812 100644 --- a/arch/console.c +++ b/arch/console.c @@ -31,7 +31,7 @@ void console_initialize() { void console_print(const char *const s) { - console_write(s, strlen(s)); + console_write(s, kstrlen(s)); } void console_putc(const char c) { diff --git a/arch/kprintf.c b/arch/kprintf.c index e5c62aa..6ba9aaf 100644 --- a/arch/kprintf.c +++ b/arch/kprintf.c @@ -37,7 +37,7 @@ void kprintf(const char *format, ...) case 'd': case 'u': case 'x': - itoa (buf, c, *((int *) arg++)); + kitoa (buf, c, *((int *) arg++)); p = buf; goto string; break; diff --git a/arch/paging.c b/arch/paging.c index 081ef84..1d97b85 100644 --- a/arch/paging.c +++ b/arch/paging.c @@ -65,11 +65,11 @@ void paging_initialize() nframes = mem_end_page / 0x1000; frames = (unsigned int*)kmalloc(INDEX_FROM_BIT(nframes)); - memset(frames, 0, INDEX_FROM_BIT(nframes)); + kmemset(frames, 0, INDEX_FROM_BIT(nframes)); // Let's make a page directory. kernel_dir = (struct page_dir*)kmalloc_a(sizeof(struct page_dir)); - memset(kernel_dir, 0, sizeof(struct page_dir)); + kmemset(kernel_dir, 0, sizeof(struct page_dir)); current_dir = kernel_dir; // We need to identity map (phys addr = virt addr) from @@ -116,7 +116,7 @@ struct page *get_page(unsigned int address, unsigned char make, struct page_dir if (make) { unsigned int tmp; dir->tables[table_idx] = (struct page_table*)kmalloc_ap(sizeof(struct page_table), &tmp); - memset(dir->tables[table_idx], 0, 0x1000); + kmemset(dir->tables[table_idx], 0, 0x1000); dir->tables_phys[table_idx] = tmp | 0x7; // PRESENT, RW, US. return &dir->tables[table_idx]->pages[address%1024]; } diff --git a/arch/protected.c b/arch/protected.c index 02c015b..06f27be 100644 --- a/arch/protected.c +++ b/arch/protected.c @@ -77,7 +77,7 @@ void protected_initialize() logger_info("Setup IDT."); - memset(idt_entries, 0, sizeof(idt_entries)); + kmemset(idt_entries, 0, sizeof(idt_entries)); idt_set_gate(0, (unsigned int)exception_0, 0x08, 0x8E); idt_set_gate(1, (unsigned int)exception_1, 0x08, 0x8E); diff --git a/include/kernelmq/stdlib.h b/include/kernelmq/stdlib.h index 4151564..e99e11e 100644 --- a/include/kernelmq/stdlib.h +++ b/include/kernelmq/stdlib.h @@ -1,8 +1,8 @@ #ifndef KERNELMQ_INCLUDED_STDLIB #define KERNELMQ_INCLUDED_STDLIB 1 -void memset(void *buffer, unsigned char value, unsigned int size); -unsigned int strlen(const char *s); -void itoa(char *buf, int base, int d); +void kmemset(void *buffer, unsigned char value, unsigned int size); +unsigned int kstrlen(const char *s); +void kitoa(char *buf, int base, int d); #endif diff --git a/libk/itoa.c b/libk/itoa.c index 729b3f8..c6d6973 100644 --- a/libk/itoa.c +++ b/libk/itoa.c @@ -1,4 +1,4 @@ -void itoa(char *buf, int base, int d) +void kitoa(char *buf, int base, int d) { char *p = buf; char *p1, *p2; diff --git a/libk/memset.c b/libk/memset.c index c79c884..6c7523c 100644 --- a/libk/memset.c +++ b/libk/memset.c @@ -1,4 +1,4 @@ -void memset(void *const buffer, const unsigned char value, const unsigned int size) +void kmemset(void *const buffer, const unsigned char value, const unsigned int size) { const unsigned char *end = buffer + size; diff --git a/libk/strlen.c b/libk/strlen.c index 40f47b5..cf73404 100644 --- a/libk/strlen.c +++ b/libk/strlen.c @@ -1,4 +1,4 @@ -unsigned int strlen(const char *const s) +unsigned int kstrlen(const char *const s) { unsigned int result = 0; diff --git a/test/libk/Makefile b/test/libk/Makefile new file mode 100644 index 0000000..1b3c96a --- /dev/null +++ b/test/libk/Makefile @@ -0,0 +1,18 @@ +CC = $(CCPREFIX)gcc + +CFLAGS = -std=gnu99 -Wall -Wextra + +BINS = strlen.bin + +run: all $(addprefix run-, $(BINS)) + +all: $(BINS) + +clean: + rm -f $(BINS) + +run-%.bin: %.bin + @./$< && echo "[ OK ] $*" || echo "[FAIL] $*" + +%.bin: %.c + $(CC) $< -o $@ $(CFLAGS) -I "$(I)" "$(LIBK)" diff --git a/test/libk/strlen.c b/test/libk/strlen.c new file mode 100644 index 0000000..045ff89 --- /dev/null +++ b/test/libk/strlen.c @@ -0,0 +1,13 @@ +#include + +#include + +int main() +{ + assert(kstrlen("") == 0); + assert(kstrlen("q") == 1); + assert(kstrlen("qwe rty") == 7); + assert(kstrlen("qwe\0rty") == 3); + + return 0; +}