Fix devfs bypassing the VFS on return message sending
This commit is contained in:
parent
4cf2945d36
commit
43bd25506b
28
devfs/main.c
28
devfs/main.c
@ -10,6 +10,7 @@
|
|||||||
#include <dbg.h>
|
#include <dbg.h>
|
||||||
|
|
||||||
uint32_t vfs_box;
|
uint32_t vfs_box;
|
||||||
|
uint32_t devfs_vfs_box;
|
||||||
uint32_t devfs_reg_box;
|
uint32_t devfs_reg_box;
|
||||||
uint32_t devfs_drv_box;
|
uint32_t devfs_drv_box;
|
||||||
int num_devs;
|
int num_devs;
|
||||||
@ -58,10 +59,10 @@ char devfs_puts(vfs_message* vfs_msg) {
|
|||||||
char* data=malloc(sizeof(char)*vfs_msg->data);
|
char* data=malloc(sizeof(char)*vfs_msg->data);
|
||||||
Message msg;
|
Message msg;
|
||||||
msg.msg=data;
|
msg.msg=data;
|
||||||
mailbox_get_msg(vfs_box,&msg,vfs_msg->data);
|
mailbox_get_msg(devfs_vfs_box,&msg,vfs_msg->data);
|
||||||
while (msg.from==0 && msg.size==0) {
|
while (msg.from==0 && msg.size==0) {
|
||||||
yield();
|
yield();
|
||||||
mailbox_get_msg(vfs_box,&msg,sizeof(vfs_message));
|
mailbox_get_msg(devfs_vfs_box,&msg,sizeof(vfs_message));
|
||||||
}
|
}
|
||||||
if (msg.from==0) {
|
if (msg.from==0) {
|
||||||
serial_print("Could not recieve fputs data from the VFS\n");
|
serial_print("Could not recieve fputs data from the VFS\n");
|
||||||
@ -110,10 +111,10 @@ char devfs_mount(vfs_message* vfs_msg) {
|
|||||||
char* disk_file=malloc(sizeof(char)*vfs_msg->data);
|
char* disk_file=malloc(sizeof(char)*vfs_msg->data);
|
||||||
Message msg;
|
Message msg;
|
||||||
msg.msg=disk_file;
|
msg.msg=disk_file;
|
||||||
mailbox_get_msg(vfs_box,&msg,vfs_msg->data);
|
mailbox_get_msg(devfs_vfs_box,&msg,vfs_msg->data);
|
||||||
while (msg.from==0 && msg.size==0) {
|
while (msg.from==0 && msg.size==0) {
|
||||||
yield();
|
yield();
|
||||||
mailbox_get_msg(vfs_box,&msg,sizeof(vfs_message));
|
mailbox_get_msg(devfs_vfs_box,&msg,sizeof(vfs_message));
|
||||||
}
|
}
|
||||||
if (msg.from==0) {
|
if (msg.from==0) {
|
||||||
serial_print("Could not recieve disk file path from the VFS\n");
|
serial_print("Could not recieve disk file path from the VFS\n");
|
||||||
@ -132,8 +133,8 @@ void process_vfs_msg(vfs_message* vfs_msg, uint32_t from) {
|
|||||||
free((void*)vfs_msg->data);
|
free((void*)vfs_msg->data);
|
||||||
}
|
}
|
||||||
Message msg;
|
Message msg;
|
||||||
msg.to=vfs_msg->orig_mbox;
|
msg.to=vfs_box;
|
||||||
msg.from=vfs_box;
|
msg.from=devfs_vfs_box;
|
||||||
msg.size=sizeof(vfs_message);
|
msg.size=sizeof(vfs_message);
|
||||||
msg.msg=vfs_msg;
|
msg.msg=vfs_msg;
|
||||||
mailbox_send_msg(&msg);
|
mailbox_send_msg(&msg);
|
||||||
@ -156,8 +157,8 @@ void process_vfs_msg(vfs_message* vfs_msg, uint32_t from) {
|
|||||||
vfs_msg->flags=1;
|
vfs_msg->flags=1;
|
||||||
}
|
}
|
||||||
Message msg;
|
Message msg;
|
||||||
msg.to=vfs_msg->orig_mbox;
|
msg.to=vfs_box;
|
||||||
msg.from=vfs_box;
|
msg.from=devfs_vfs_box;
|
||||||
msg.size=sizeof(vfs_message);
|
msg.size=sizeof(vfs_message);
|
||||||
msg.msg=vfs_msg;
|
msg.msg=vfs_msg;
|
||||||
mailbox_send_msg(&msg);
|
mailbox_send_msg(&msg);
|
||||||
@ -190,8 +191,8 @@ void process_vfs_msg(vfs_message* vfs_msg, uint32_t from) {
|
|||||||
if (send_msg) {
|
if (send_msg) {
|
||||||
serial_print("Send message prep\n");
|
serial_print("Send message prep\n");
|
||||||
Message msg;
|
Message msg;
|
||||||
msg.to=from;
|
msg.to=vfs_box;
|
||||||
msg.from=vfs_box;
|
msg.from=devfs_vfs_box;
|
||||||
msg.size=sizeof(vfs_message);
|
msg.size=sizeof(vfs_message);
|
||||||
msg.msg=vfs_msg;
|
msg.msg=vfs_msg;
|
||||||
serial_print("Send message\n");
|
serial_print("Send message\n");
|
||||||
@ -205,17 +206,18 @@ void process_vfs_msg(vfs_message* vfs_msg, uint32_t from) {
|
|||||||
|
|
||||||
|
|
||||||
int main() {
|
int main() {
|
||||||
vfs_box=mailbox_new(16,"devfs_vfs");
|
vfs_box=mailbox_find_by_name("vfs");
|
||||||
|
devfs_vfs_box=mailbox_new(16,"devfs_vfs");
|
||||||
devfs_reg_box=mailbox_new(16,"devfs_register");
|
devfs_reg_box=mailbox_new(16,"devfs_register");
|
||||||
devfs_drv_box=mailbox_new(16,"devfs_driver");
|
devfs_drv_box=mailbox_new(16,"devfs_driver");
|
||||||
register_fs("devfs",vfs_box);
|
register_fs("devfs",devfs_vfs_box);
|
||||||
dev_names=malloc(sizeof(char*)*32);
|
dev_names=malloc(sizeof(char*)*32);
|
||||||
dev_mboxes=malloc(sizeof(uint32_t)*32);
|
dev_mboxes=malloc(sizeof(uint32_t)*32);
|
||||||
dev_types=malloc(sizeof(int)*32);
|
dev_types=malloc(sizeof(int)*32);
|
||||||
for (;;) {
|
for (;;) {
|
||||||
Message msg;
|
Message msg;
|
||||||
msg.msg=malloc(sizeof(vfs_message));
|
msg.msg=malloc(sizeof(vfs_message));
|
||||||
mailbox_get_msg(vfs_box,&msg,sizeof(vfs_message));
|
mailbox_get_msg(devfs_vfs_box,&msg,sizeof(vfs_message));
|
||||||
if (msg.from==0) {
|
if (msg.from==0) {
|
||||||
free(msg.msg);
|
free(msg.msg);
|
||||||
} else {
|
} else {
|
||||||
|
Loading…
Reference in New Issue
Block a user