Пример #1
0
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");
}
Пример #2
0
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");
}
Пример #3
0
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");
}
Пример #4
0
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");
}
Пример #5
0
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");
}
Пример #6
0
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");
}
Пример #7
0
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");
}
Пример #8
0
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");
}