# HG changeset patch # User yiyus@1936 # Date 1248572992 -7200 # Node ID 175342326bd687f08d214c24e8e034a699544c6b # Parent 39041c2d74f93810e5c091f512adcc88eb9a7dc2 id file diff -r 39041c2d74f9 -r 175342326bd6 fs.c --- a/fs.c Sun Jul 26 02:08:10 2009 +0200 +++ b/fs.c Sun Jul 26 03:49:52 2009 +0200 @@ -9,14 +9,17 @@ #include "hi.h" +static int id = 0; + /* +0400 /id 0600 /msg - message */ /* name, parent, type, mode, size */ Fileinfo files[QMAX] = { {"", QNONE, P9_QTDIR, 0500|P9_DMDIR, 0}, + {"id", QROOT, P9_QTFILE, 0400, 0}, {"msg", QROOT, P9_QTFILE, 0600, 0} }; @@ -31,6 +34,7 @@ return NULL; memcpy(msg->data, message, len); msg->size = len; + msg->id = id++; return msg; } @@ -129,12 +133,13 @@ void fs_read(Ixp9Req *r) { + char buf[512]; Msg *msg; + int n; if(files[r->fid->qid.path].type & P9_QTDIR){ IxpStat st = {0}; IxpMsg m; - char buf[512]; int i; m = ixp_message(buf, sizeof(buf), MsgPack); @@ -164,20 +169,41 @@ msg = r->fid->aux; - if(r->ifcall.tread.offset < msg->size) { - if(r->ifcall.tread.offset + r->ifcall.tread.count > msg->size) { - r->ofcall.rread.count = msg->size - r->ifcall.tread.offset; - } else { - r->ofcall.rread.count = r->ifcall.tread.count; + switch(r->fid->qid.path){ + case QIDENT: { + sprintf(buf, "%11d ", msg->id); + if(r->ifcall.tread.offset < 11) { + n = strlen(buf); + if(r->ifcall.tread.offset + r->ifcall.tread.count > 11) { + r->ofcall.rread.count = 11 - r->ifcall.tread.offset; + } else { + r->ofcall.rread.count = r->ifcall.tread.count; + } + if(!(r->ofcall.rread.data = malloc(r->ofcall.rread.count))) { + r->ofcall.rread.count = 0; + respond(r, "out of memory"); + return; + } + memcpy(r->ofcall.rread.data, buf, r->ofcall.rread.count); + } + break; } - if(!(r->ofcall.rread.data = malloc(r->ofcall.rread.count))) { - r->ofcall.rread.count = 0; - respond(r, "out of memory"); - return; + case QMSG: { + if(r->ifcall.tread.offset < msg->size) { + if(r->ifcall.tread.offset + r->ifcall.tread.count > msg->size) { + r->ofcall.rread.count = msg->size - r->ifcall.tread.offset; + } else { + r->ofcall.rread.count = r->ifcall.tread.count; + } + if(!(r->ofcall.rread.data = malloc(r->ofcall.rread.count))) { + r->ofcall.rread.count = 0; + respond(r, "out of memory"); + return; + } + memcpy(r->ofcall.rread.data, msg->data+r->ifcall.tread.offset, r->ofcall.rread.count); + } + break; } - memcpy(r->ofcall.rread.data, msg->data+r->ifcall.tread.offset, r->ofcall.rread.count); - respond(r, NULL); - return; } respond(r, NULL); diff -r 39041c2d74f9 -r 175342326bd6 hi.h --- a/hi.h Sun Jul 26 02:08:10 2009 +0200 +++ b/hi.h Sun Jul 26 03:49:52 2009 +0200 @@ -1,4 +1,4 @@ -typedef enum {QNONE=-1, QROOT=0, QMSG, QMAX} qpath; +typedef enum {QNONE=-1, QROOT=0, QIDENT, QMSG, QMAX} qpath; typedef struct Fileinfo_ Fileinfo; typedef struct Msg_ Msg; @@ -13,8 +13,9 @@ struct Msg_ { + int id; + int size; char *data; - int size; }; extern Fileinfo files[];