Actually use reassigned memory in kstdlib.c:vector_push()

This commit is contained in:
notsomeidiot123 2026-03-03 01:00:01 -05:00
parent 0f9a174d0e
commit 6e82ad6d00
3 changed files with 19 additions and 11 deletions

View File

@ -85,6 +85,9 @@ void vector_push(vector_t *vector, void *new_element){
((uint8_t *)(newptr))[i] = ((uint8_t *)vector->ptr)[i * vector->size];
}
}
void *tmp = vector->ptr;
vector->ptr = newptr;
kfree(tmp);
}
for(uint32_t i = 0; i < vector->sizeof_elements; i++){
((uint8_t *)(vector->ptr))[vector->size * vector->sizeof_elements + i] = ((uint8_t *)new_element)[i];

View File

@ -28,7 +28,6 @@ uint32_t module_api(uint32_t func, ...){
vector_push(modules, structure);
pm_free(tmp);
return_value = 0;
// printf("Registered Key: %x", structure->key);
break;
case MODULE_API_ADDINT:
uint32_t int_index = va_arg(vars, uint32_t);
@ -39,12 +38,10 @@ uint32_t module_api(uint32_t func, ...){
return_value = -1;
break;
}
// printf("installed %d", int_index);
install_irq_handler(interrupt_handler, int_index);
module_t *tmpmodule = vector_get(key & 0xff, modules);
tmpmodule->interrupts |= 1 << int_index;
return_value = 0;
// printf("Added key\n");
break;
case MODULE_API_DELINT:
int_index = va_arg(vars, uint32_t);
@ -61,7 +58,6 @@ uint32_t module_api(uint32_t func, ...){
return_value = 0;
break;
case MODULE_API_PRINT:
// vmlog(MODULE_NAME, "Testing modules calling kernel functions\n", MLOG_PRINT, vars);
char *name = va_arg(vars, char *);
char *string = va_arg(vars, char *);
vmlog(name, string, MLOG_PRINT, vars);
@ -132,7 +128,6 @@ uint32_t module_api(uint32_t func, ...){
for(int i = 0; i < modules->size; i++){
module_t* module = ((module_t *)vector_get(i, modules));
if(module->key == key){
// printf("Adding message handler!!\n\n");
module->message_handler = handler;
return_value = 0;
break;
@ -167,13 +162,9 @@ void dispatch_message(uint32_t message, ...){
for(int i = 0; i < modules->size; i++){
module_t *module = vector_get(i, modules);
// int32_t (*handler)(uint32_t, ...) = ((module_t *)(vector_get(i, modules)))->key;
// uint32_t key = ((module_t *)(vector_get(i, modules)))->key;
uint32_t key = module->key;
int32_t (*handler)(uint32_t, ...) = module->message_handler;
if(!handler) continue;
// printf("Handler: %x, Key: %x\n", handler, key);
// for(;;);
int32_t result = 0;
vfile_t *srcfile;

View File

@ -239,7 +239,9 @@ int ata_write(vfile_t *file, void *ptr, uint32_t offset, uint32_t count){
// api(MODULE_API_PRINT, MODULE_NAME, "PRDT (Read back from busmaster): %x\n", test);
outb(bm_base, 0x00);
while(!ata_ready(io_base, ctrl_base, drive.flags.slave << 4));
while(!ata_ready(io_base, ctrl_base, drive.flags.slave << 4)){
asm("int $32\n");
}
uint64_t lba = offset >> 9;
// uint64_t lba = 0;
outb(io_base + ATA_DRIVE_HEAD, 0x40 | (drive.flags.slave << 4) | ((lba >> 24) & 0x0F));
@ -287,6 +289,13 @@ int ata_write(vfile_t *file, void *ptr, uint32_t offset, uint32_t count){
uint8_t bm_status = inb(bm_base + 2);
asm("int $32\n");
while(!ata_ready(io_base, ctrl_base, drive.flags.slave << 4)){
asm("int $32\n");
}
outb(io_base + ATA_DRIVE_HEAD, 0x40 | (drive.flags.slave << 4));
outb(io_base + ATA_COMMAND, ATA_CMD_CACHE_FLUSH_EXT);
// }
return 0;
@ -329,7 +338,9 @@ int ata_read(vfile_t *file, uint8_t *ptr, uint32_t offset, uint32_t count) {
// api(MODULE_API_PRINT, MODULE_NAME, "PRDT (Read back from busmaster): %x\n", test);
outb(bm_base, 0x08);
while(!ata_ready(io_base, ctrl_base, drive.flags.slave << 4));
while(!ata_ready(io_base, ctrl_base, drive.flags.slave << 4)){
asm("int $32\n");
}
uint64_t lba = offset >> 9;
// uint64_t lba = 0;
outb(io_base + ATA_DRIVE_HEAD, 0x40 | (drive.flags.slave << 4) | ((lba >> 24) & 0x0F));
@ -410,6 +421,9 @@ cpu_registers_t *int_handler(cpu_registers_t * regs){
api(MODULE_API_UNBLOCK_PID, transferring_pid);
transferring_pid = 0;
primary_ata_locked = 0;
return regs;
}