syscalls: fix cwd-related stuff

This commit is contained in:
2025-07-18 21:02:54 +03:00
parent 359e5c6d78
commit 3ae26ed88a
6 changed files with 37 additions and 11 deletions
+1 -1
View File
@@ -218,7 +218,7 @@ void kmain(unsigned int magic, unsigned int info)
printf("huy1 points to: 0x%X huy2 points to:0x%X\n", huy, huy2);
printf("huy1: %s\nhuy2: %s", huy, huy2);
exec_from_file("/ebalo/forktest");
exec_from_file("/ebalo/aye", "/ebalo/");
while(1)
{
+7 -3
View File
@@ -20,7 +20,7 @@ disk_ops_t ops1 =
static fat_t g_fat;
int read_file(const char* path, uint8_t** buffer)
int read_file(const char* path, uint8_t** buffer, dir_t* dir)
{
file_t file;
int err = fat_fopen(&file, path, "r");
@@ -38,19 +38,22 @@ int read_file(const char* path, uint8_t** buffer)
debug_log("eeee\n");
int cnt = fat_fread(&file, *buffer, file_size);
*dir = file.dir;
return fat_fclose(&file);
}
void exec_from_file(const char* filename)
void exec_from_file(const char* filename, const char* dirname)
{
asm volatile("cli");
int err, cnt;
err = fat_mount(&ops1, 0, &g_fat, "ebalo");
uint8_t* file;
dir_t dir;
int result = read_file(filename, &file);
int result = read_file(filename, &file, &dir);
//debug_log("result: %X\n", result);
//debug_log("buffer: %s\n", file);
@@ -140,6 +143,7 @@ void exec_from_file(const char* filename)
set_page_dir(curr_pd_phys);
Process* p_task1 = task_create(elf_ehdr->e_entry, USER_STACK_TOP, 3, proc_pd);
*p_task1->cwd = dir;
asm volatile("sti");
}
+4 -6
View File
@@ -232,17 +232,15 @@ int sys_close(TrapFrame *tf)
int sys_chdir(TrapFrame *tf)
{
strcat(current->cwd->fat->path, "/");
strcat(current->cwd->fat->path, (char*)tf->ebx);
return fat_opendir(current->cwd, (const char*)tf->ebx);
}
int sys_getcwd(TrapFrame *tf)
{
int len = tf->ecx;
if(len >= 260)
return (int)NULL;
memcpy((void*)tf->ebx, current->cwd->fat->name, current->cwd->fat->namelen);
strcpy((char*)tf->ebx, current->cwd->fat->path);
return tf->ebx;
}
+22
View File
@@ -48,3 +48,25 @@ size_t strlen(const char* str)
len++;
return len;
}
char *strcat(char *dest, const char *src) {
char *original_dest = dest;
while (*dest != '\0') {
dest++;
}
while ((*dest++ = *src++) != '\0')
;
return original_dest;
}
char *strcpy(char *dest, const char *src) {
char *original_dest = dest;
while ((*dest++ = *src++) != '\0')
;
return original_dest;
}