hi
changeset 13:175342326bd6 tip
id file
| author | yiyus@1936 |
|---|---|
| date | Sun Jul 26 03:49:52 2009 +0200 (2009-07-26 ago) |
| parents | 39041c2d74f9 |
| children | |
| files | fs.c hi.h |
line diff
1.1 --- a/fs.c Sun Jul 26 02:08:10 2009 +0200
1.2 +++ b/fs.c Sun Jul 26 03:49:52 2009 +0200
1.3 @@ -9,14 +9,17 @@
1.4
1.5 #include "hi.h"
1.6
1.7 +static int id = 0;
1.8 +
1.9 /*
1.10 +0400 /id
1.11 0600 /msg
1.12 - message
1.13 */
1.14
1.15 /* name, parent, type, mode, size */
1.16 Fileinfo files[QMAX] = {
1.17 {"", QNONE, P9_QTDIR, 0500|P9_DMDIR, 0},
1.18 + {"id", QROOT, P9_QTFILE, 0400, 0},
1.19 {"msg", QROOT, P9_QTFILE, 0600, 0}
1.20 };
1.21
1.22 @@ -31,6 +34,7 @@
1.23 return NULL;
1.24 memcpy(msg->data, message, len);
1.25 msg->size = len;
1.26 + msg->id = id++;
1.27
1.28 return msg;
1.29 }
1.30 @@ -129,12 +133,13 @@
1.31 void
1.32 fs_read(Ixp9Req *r)
1.33 {
1.34 + char buf[512];
1.35 Msg *msg;
1.36 + int n;
1.37
1.38 if(files[r->fid->qid.path].type & P9_QTDIR){
1.39 IxpStat st = {0};
1.40 IxpMsg m;
1.41 - char buf[512];
1.42 int i;
1.43
1.44 m = ixp_message(buf, sizeof(buf), MsgPack);
1.45 @@ -164,20 +169,41 @@
1.46
1.47 msg = r->fid->aux;
1.48
1.49 - if(r->ifcall.tread.offset < msg->size) {
1.50 - if(r->ifcall.tread.offset + r->ifcall.tread.count > msg->size) {
1.51 - r->ofcall.rread.count = msg->size - r->ifcall.tread.offset;
1.52 - } else {
1.53 - r->ofcall.rread.count = r->ifcall.tread.count;
1.54 + switch(r->fid->qid.path){
1.55 + case QIDENT: {
1.56 + sprintf(buf, "%11d ", msg->id);
1.57 + if(r->ifcall.tread.offset < 11) {
1.58 + n = strlen(buf);
1.59 + if(r->ifcall.tread.offset + r->ifcall.tread.count > 11) {
1.60 + r->ofcall.rread.count = 11 - r->ifcall.tread.offset;
1.61 + } else {
1.62 + r->ofcall.rread.count = r->ifcall.tread.count;
1.63 + }
1.64 + if(!(r->ofcall.rread.data = malloc(r->ofcall.rread.count))) {
1.65 + r->ofcall.rread.count = 0;
1.66 + respond(r, "out of memory");
1.67 + return;
1.68 + }
1.69 + memcpy(r->ofcall.rread.data, buf, r->ofcall.rread.count);
1.70 + }
1.71 + break;
1.72 }
1.73 - if(!(r->ofcall.rread.data = malloc(r->ofcall.rread.count))) {
1.74 - r->ofcall.rread.count = 0;
1.75 - respond(r, "out of memory");
1.76 - return;
1.77 + case QMSG: {
1.78 + if(r->ifcall.tread.offset < msg->size) {
1.79 + if(r->ifcall.tread.offset + r->ifcall.tread.count > msg->size) {
1.80 + r->ofcall.rread.count = msg->size - r->ifcall.tread.offset;
1.81 + } else {
1.82 + r->ofcall.rread.count = r->ifcall.tread.count;
1.83 + }
1.84 + if(!(r->ofcall.rread.data = malloc(r->ofcall.rread.count))) {
1.85 + r->ofcall.rread.count = 0;
1.86 + respond(r, "out of memory");
1.87 + return;
1.88 + }
1.89 + memcpy(r->ofcall.rread.data, msg->data+r->ifcall.tread.offset, r->ofcall.rread.count);
1.90 + }
1.91 + break;
1.92 }
1.93 - memcpy(r->ofcall.rread.data, msg->data+r->ifcall.tread.offset, r->ofcall.rread.count);
1.94 - respond(r, NULL);
1.95 - return;
1.96 }
1.97
1.98 respond(r, NULL);
2.1 --- a/hi.h Sun Jul 26 02:08:10 2009 +0200
2.2 +++ b/hi.h Sun Jul 26 03:49:52 2009 +0200
2.3 @@ -1,4 +1,4 @@
2.4 -typedef enum {QNONE=-1, QROOT=0, QMSG, QMAX} qpath;
2.5 +typedef enum {QNONE=-1, QROOT=0, QIDENT, QMSG, QMAX} qpath;
2.6 typedef struct Fileinfo_ Fileinfo;
2.7 typedef struct Msg_ Msg;
2.8
2.9 @@ -13,8 +13,9 @@
2.10
2.11 struct Msg_
2.12 {
2.13 + int id;
2.14 + int size;
2.15 char *data;
2.16 - int size;
2.17 };
2.18
2.19 extern Fileinfo files[];