void serve_dirty(u_int envid, struct Fsreq_dirty *rq) { if (debug) { writef("serve_dirty %08x %08x %08x\n", envid, rq->req_fileid, rq->req_offset); } // Your code here struct Open *pOpen; int r; if ((r = open_lookup(envid, rq->req_fileid, &pOpen)) < 0) { ipc_send(envid, r, 0, 0); return; } if ((r = file_dirty(pOpen->o_file, rq->req_offset)) < 0) { ipc_send(envid, r, 0, 0); return; } ipc_send(envid, 0, 0, 0); return; // user_panic("serve_dirty not implemented"); }
void serve_set_size(u_int envid, struct Fsreq_set_size *rq) { if (debug) { writef("serve_set_size %08x %08x %08x\n", envid, rq->req_fileid, rq->req_size); } struct Open *pOpen; int r; // Your code here if ((r = open_lookup(envid, rq->req_fileid, &pOpen)) < 0) { ipc_send(envid, r, 0, 0); return; } if ((r = file_set_size(pOpen->o_file, rq->req_size)) < 0) { ipc_send(envid, r, 0, 0); return; } ipc_send(envid, 0, 0, 0);//PTE_V); return; // user_panic("serve_set_size not implemented"); }
void serve_map(u_int envid, struct Fsreq_map *rq) { if (debug) { writef("serve_map %08x %08x %08x\n", envid, rq->req_fileid, rq->req_offset); } struct Open *pOpen; u_int filebno; void *blk; int r; // Your code here if ((r = open_lookup(envid, rq->req_fileid, &pOpen)) < 0) { ipc_send(envid, r, 0, 0); return; } filebno = rq->req_offset / BY2BLK; if ((r = file_get_block(pOpen->o_file, filebno, &blk)) < 0) { ipc_send(envid, r, 0, 0); return; } ipc_send(envid, 0, (u_int)blk, PTE_V | PTE_R | PTE_LIBRARY); return; // user_panic("serve_map not implemented"); }
void serve_dirty(u_int envid, struct Fsreq_dirty *rq) { struct Open *o; int r; if (debug) printf("serve_dirty %08x %08x %08x\n", envid, rq->req_fileid, rq->req_offset); if((r = open_lookup(envid, rq->req_fileid, &o)) < 0) goto out_dirty; r = file_dirty(&o->o_ff->f_file, rq->req_offset); out_dirty: ipc_send(envid, r, 0, 0); // Your code here // panic("serve_dirty not implemented"); }
void serve_close(u_int envid, struct Fsreq_close *rq) { struct Open *o; int r = 0; if (debug) printf("serve_close %08x %08x\n", envid, rq->req_fileid); if((r = open_lookup(envid, rq->req_fileid, &o)) < 0) goto out_close; file_close(&o->o_ff->f_file); out_close: ipc_send(envid, r, 0, 0); // Your code here // panic("serve_close not implemented"); }
void serve_set_size(u_int envid, struct Fsreq_set_size *rq) { struct Open *o; int r = 0; if (debug) printf("serve_set_size %08x %08x %08x\n", envid, rq->req_fileid, rq->req_size); if((r = open_lookup(envid, rq->req_fileid, &o)) < 0) goto out_set_size; r = file_set_size(&o->o_ff->f_file, rq->req_size); if(r == 0) o->o_file->f_size = rq->req_size; out_set_size: ipc_send(envid, r, 0, 0); // Your code here // panic("serve_set_size not implemented"); }
void serve_map(u_int envid, struct Fsreq_map *rq) { struct Open *o; void *blk; int r = 0; if (debug) printf("serve_map %08x %08x %08x\n", envid, rq->req_fileid, rq->req_offset); if((r = open_lookup(envid, rq->req_fileid, &o)) < 0) goto out_map; if((r = file_get_block(&o->o_ff->f_file, rq->req_offset/BY2BLK, &blk)) < 0) goto out_map; ipc_send(envid, 0, (u_long)blk, PTE_P|PTE_U|PTE_W|PTE_LIBRARY); return; out_map: ipc_send(envid, r, 0, 0); // Your code here // panic("serve_map not implemented"); }
void serve_close(u_int envid, struct Fsreq_close *rq) { if (debug) { writef("serve_close %08x %08x\n", envid, rq->req_fileid); } struct Open *pOpen; int r; if ((r = open_lookup(envid, rq->req_fileid, &pOpen)) < 0) { ipc_send(envid, r, 0, 0); return; } //writef("serve_close:pOpen = %x\n",pOpen); file_close(pOpen->o_file); ipc_send(envid, 0, 0, 0);//PTE_V); // syscall_mem_unmap(0, (u_int)pOpen); return; // user_panic("serve_close not implemented"); }