syscalls: implement read syscall
This commit is contained in:
+1
-1
@@ -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("/boot/katauos.bin");
|
||||
exec_from_file("/ebalo/aaa");
|
||||
|
||||
while(1)
|
||||
{
|
||||
|
||||
@@ -68,7 +68,7 @@ void exec_from_file(const char* filename)
|
||||
|
||||
uint8_t* file;
|
||||
|
||||
int result = read_file("/ebalo/aaa", &file);
|
||||
int result = read_file(filename, &file);
|
||||
debug_log("result: %X\n", result);
|
||||
debug_log("buffer: %s\n", file);
|
||||
|
||||
|
||||
@@ -46,6 +46,22 @@ const char* flags_to_mode_str(int flags) {
|
||||
return mode;
|
||||
}
|
||||
|
||||
int sys_read(TrapFrame *tf)
|
||||
{
|
||||
if(tf->ebx < 3)
|
||||
{
|
||||
//TODO: implement stdin handling here
|
||||
}
|
||||
else
|
||||
{
|
||||
if(current->file_descriptors[tf->ebx] == NULL)
|
||||
{
|
||||
return -EBADF;
|
||||
}
|
||||
return fat_fread(current->file_descriptors[tf->ebx], (void*)tf->ecx, tf->edx);
|
||||
}
|
||||
}
|
||||
|
||||
int sys_write(TrapFrame *tf)
|
||||
{
|
||||
if(tf->ebx < 3)
|
||||
@@ -53,7 +69,9 @@ int sys_write(TrapFrame *tf)
|
||||
//stdin, stdout or stderr
|
||||
if(tf->ebx == STDOUT_FILENO)
|
||||
{
|
||||
debug_log("\n=================SYS_WRITE output to stdout=====================\n");
|
||||
print((char*)tf->ecx, tf->edx);
|
||||
debug_log("\n=================END OF THAT SHIT=====================\n");
|
||||
tf->ecx++;
|
||||
}
|
||||
}
|
||||
@@ -102,9 +120,12 @@ int sys_open(TrapFrame *tf)
|
||||
int sys_close(TrapFrame *tf)
|
||||
{
|
||||
int fd = tf->ebx;
|
||||
debug_log("SYS_CLOSE: fd = 0x%X", fd);
|
||||
if(current->file_descriptors[fd] != NULL)
|
||||
{
|
||||
debug_log("SYS_CLOSE: current->file_descriptors[fd] != NULL");
|
||||
int result = fat_fclose(current->file_descriptors[fd]);
|
||||
debug_log("SYS_CLOSE: fat_fclose result: 0x%X", result);
|
||||
free(current->file_descriptors[fd]);
|
||||
current->file_descriptors[fd] = NULL;
|
||||
return result;
|
||||
@@ -120,6 +141,12 @@ void handle_syscall(TrapFrame *tf)
|
||||
debug_log("ECX: %s ", tf->ecx);
|
||||
debug_log("EDX: %X\n", tf->edx);
|
||||
|
||||
if(tf->eax == 3)//read
|
||||
{
|
||||
int r = sys_read(tf);
|
||||
tf->eax = r;
|
||||
}
|
||||
|
||||
if(tf->eax == 4)//write
|
||||
{
|
||||
int r = sys_write(tf);
|
||||
|
||||
Reference in New Issue
Block a user