hi

log tags | changeset raw browse | bz2 | zip | gz

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[];