diff --git a/src/arch/x86_64/isr.asm b/src/arch/x86_64/isr.asm index 6c007a93..08dfd33d 100644 --- a/src/arch/x86_64/isr.asm +++ b/src/arch/x86_64/isr.asm @@ -23,9 +23,8 @@ section .text mov rax, ds - - cmp rax,0x43 - je .noswapgs + cmp rax,0x40 + jne .noswapgs swapgs .noswapgs: diff --git a/src/fs/initrd.c b/src/fs/initrd.c index 218af213..fff5e1dd 100644 --- a/src/fs/initrd.c +++ b/src/fs/initrd.c @@ -152,10 +152,16 @@ void initrd_parse(){ switch(entry.type){ case TAR_FILE: - vfs_create(vfs_root(), entry.name, entry.mode); + int err = vfs_create(vfs_root(), entry.name, entry.mode); + if(err){ + + printf("Failed creating %s: ERROR %lu\n", entry.name, err); + } break; case TAR_DIR: - vfs_mkdir(vfs_root(), entry.name, entry.mode); + err = vfs_mkdir(vfs_root(), entry.name, entry.mode); + if(err) + printf("Failed creating %s: ERROR %lu\n", entry.name, err); break; default: _panic("Unsupported file type in initrd!", 0); diff --git a/src/include/hashtable/hashtable.c b/src/include/hashtable/hashtable.c index 1d4585cc..58725544 100644 --- a/src/include/hashtable/hashtable.c +++ b/src/include/hashtable/hashtable.c @@ -20,6 +20,8 @@ bool hashtable_init(hashtable* table, size_t size){ } static inline hashtableentry* getentry(hashtable* table, char* key){ + if(!table->size) + return NULL; size_t entryn = hash(key, strlen(key)) % table->size; return &table->entries[entryn]; @@ -30,6 +32,9 @@ bool hashtable_insert(hashtable* table, char* key, void* val){ hashtableentry* entry = getentry(table, key); + if(!entry) + return NULL; + char* keysave = alloc(strlen(key)+1); memcpy(keysave, key, strlen(key)+1); @@ -62,6 +67,8 @@ bool hashtable_remove(hashtable* table, char* key){ hashtableentry* entry = getentry(table, key); + if(!entry) return false; + if(!entry->key) return false; hashtableentry* prev = NULL; @@ -100,6 +107,9 @@ bool hashtable_remove(hashtable* table, char* key){ bool hashtable_set(hashtable* table, char* key, void* value){ hashtableentry* entry = getentry(table, key); + if(!entry) + return false; + if(!entry->key) return false; @@ -117,6 +127,9 @@ void* hashtable_get(hashtable* table, char* key){ hashtableentry* entry = getentry(table, key); + if(!entry) + return NULL; + if(!entry->key) return NULL; diff --git a/src/include/string/strcmp.c b/src/include/string/strcmp.c index 1e93858f..835ce97e 100644 --- a/src/include/string/strcmp.c +++ b/src/include/string/strcmp.c @@ -1,6 +1,9 @@ int strcmp(const char* a, const char* b){ - while(*a && (*a++ == *b++)); + while(*a && (*a == *b)){ + ++a; + ++b; + } return *(const unsigned char*)a - *(const unsigned char*)b;