19a747e4fSDavid du Colombier #include "all.h"
29a747e4fSDavid du Colombier #include "9p1.h"
39a747e4fSDavid du Colombier
49a747e4fSDavid du Colombier static void dumpsome(char*, char*, long);
59a747e4fSDavid du Colombier static void fdirconv(char*, Dentry*);
69a747e4fSDavid du Colombier
79a747e4fSDavid du Colombier int
ofcallfmt(Fmt * f1)89a747e4fSDavid du Colombier ofcallfmt(Fmt *f1)
99a747e4fSDavid du Colombier {
109a747e4fSDavid du Colombier char buf[512];
119a747e4fSDavid du Colombier Oldfcall *f;
129a747e4fSDavid du Colombier int fid, type, tag, n;
139a747e4fSDavid du Colombier Dentry d;
149a747e4fSDavid du Colombier
159a747e4fSDavid du Colombier f = va_arg(f1->args, Oldfcall*);
169a747e4fSDavid du Colombier type = f->type;
179a747e4fSDavid du Colombier fid = f->fid;
189a747e4fSDavid du Colombier tag = f->tag;
199a747e4fSDavid du Colombier switch(type){
209a747e4fSDavid du Colombier case Tnop9p1: /* 50 */
219a747e4fSDavid du Colombier sprint(buf, "Tnop9p1 tag %ud", tag);
229a747e4fSDavid du Colombier break;
239a747e4fSDavid du Colombier case Rnop9p1:
249a747e4fSDavid du Colombier sprint(buf, "Rnop9p1 tag %ud", tag);
259a747e4fSDavid du Colombier break;
269a747e4fSDavid du Colombier case Tsession9p1: /* 52 */
279a747e4fSDavid du Colombier sprint(buf, "Tsession9p1 tag %ud", tag);
289a747e4fSDavid du Colombier break;
299a747e4fSDavid du Colombier case Rsession9p1:
309a747e4fSDavid du Colombier sprint(buf, "Rsession9p1 tag %ud", tag);
319a747e4fSDavid du Colombier break;
329a747e4fSDavid du Colombier case Rerror9p1: /* 55 */
339a747e4fSDavid du Colombier sprint(buf, "Rerror9p1 tag %ud error %.64s", tag, f->ename);
349a747e4fSDavid du Colombier break;
359a747e4fSDavid du Colombier case Tflush9p1: /* 56 */
369a747e4fSDavid du Colombier sprint(buf, "Tflush9p1 tag %ud oldtag %d", tag, f->oldtag);
379a747e4fSDavid du Colombier break;
389a747e4fSDavid du Colombier case Rflush9p1:
399a747e4fSDavid du Colombier sprint(buf, "Rflush9p1 tag %ud", tag);
409a747e4fSDavid du Colombier break;
419a747e4fSDavid du Colombier case Tattach9p1: /* 58 */
429a747e4fSDavid du Colombier sprint(buf, "Tattach9p1 tag %ud fid %d uname %.28s aname %.28s auth %.28s",
439a747e4fSDavid du Colombier tag, f->fid, f->uname, f->aname, f->auth);
449a747e4fSDavid du Colombier break;
459a747e4fSDavid du Colombier case Rattach9p1:
469a747e4fSDavid du Colombier sprint(buf, "Rattach9p1 tag %ud fid %d qid 0x%lux|0x%lux",
479a747e4fSDavid du Colombier tag, fid, f->qid.path, f->qid.version);
489a747e4fSDavid du Colombier break;
499a747e4fSDavid du Colombier case Tclone9p1: /* 60 */
509a747e4fSDavid du Colombier sprint(buf, "Tclone9p1 tag %ud fid %d newfid %d", tag, fid, f->newfid);
519a747e4fSDavid du Colombier break;
529a747e4fSDavid du Colombier case Rclone9p1:
539a747e4fSDavid du Colombier sprint(buf, "Rclone9p1 tag %ud fid %d", tag, fid);
549a747e4fSDavid du Colombier break;
559a747e4fSDavid du Colombier case Twalk9p1: /* 62 */
569a747e4fSDavid du Colombier sprint(buf, "Twalk9p1 tag %ud fid %d name %.28s", tag, fid, f->name);
579a747e4fSDavid du Colombier break;
589a747e4fSDavid du Colombier case Rwalk9p1:
599a747e4fSDavid du Colombier sprint(buf, "Rwalk9p1 tag %ud fid %d qid 0x%lux|0x%lux",
609a747e4fSDavid du Colombier tag, fid, f->qid.path, f->qid.version);
619a747e4fSDavid du Colombier break;
629a747e4fSDavid du Colombier case Topen9p1: /* 64 */
639a747e4fSDavid du Colombier sprint(buf, "Topen9p1 tag %ud fid %d mode %d", tag, fid, f->mode);
649a747e4fSDavid du Colombier break;
659a747e4fSDavid du Colombier case Ropen9p1:
669a747e4fSDavid du Colombier sprint(buf, "Ropen9p1 tag %ud fid %d qid 0x%lux|0x%lux",
679a747e4fSDavid du Colombier tag, fid, f->qid.path, f->qid.version);
689a747e4fSDavid du Colombier break;
699a747e4fSDavid du Colombier case Tcreate9p1: /* 66 */
709a747e4fSDavid du Colombier sprint(buf, "Tcreate9p1 tag %ud fid %d name %.28s perm 0x%lux mode %d",
719a747e4fSDavid du Colombier tag, fid, f->name, f->perm, f->mode);
729a747e4fSDavid du Colombier break;
739a747e4fSDavid du Colombier case Rcreate9p1:
749a747e4fSDavid du Colombier sprint(buf, "Rcreate9p1 tag %ud fid %d qid 0x%lux|0x%lux",
759a747e4fSDavid du Colombier tag, fid, f->qid.path, f->qid.version);
769a747e4fSDavid du Colombier break;
779a747e4fSDavid du Colombier case Tread9p1: /* 68 */
789a747e4fSDavid du Colombier sprint(buf, "Tread9p1 tag %ud fid %d offset %ld count %ld",
799a747e4fSDavid du Colombier tag, fid, f->offset, f->count);
809a747e4fSDavid du Colombier break;
819a747e4fSDavid du Colombier case Rread9p1:
829a747e4fSDavid du Colombier n = sprint(buf, "Rread9p1 tag %ud fid %d count %ld ", tag, fid, f->count);
839a747e4fSDavid du Colombier dumpsome(buf+n, f->data, f->count);
849a747e4fSDavid du Colombier break;
859a747e4fSDavid du Colombier case Twrite9p1: /* 70 */
869a747e4fSDavid du Colombier n = sprint(buf, "Twrite9p1 tag %ud fid %d offset %ld count %ld ",
879a747e4fSDavid du Colombier tag, fid, f->offset, f->count);
889a747e4fSDavid du Colombier dumpsome(buf+n, f->data, f->count);
899a747e4fSDavid du Colombier break;
909a747e4fSDavid du Colombier case Rwrite9p1:
919a747e4fSDavid du Colombier sprint(buf, "Rwrite9p1 tag %ud fid %d count %ld", tag, fid, f->count);
929a747e4fSDavid du Colombier break;
939a747e4fSDavid du Colombier case Tclunk9p1: /* 72 */
949a747e4fSDavid du Colombier sprint(buf, "Tclunk9p1 tag %ud fid %d", tag, fid);
959a747e4fSDavid du Colombier break;
969a747e4fSDavid du Colombier case Rclunk9p1:
979a747e4fSDavid du Colombier sprint(buf, "Rclunk9p1 tag %ud fid %d", tag, fid);
989a747e4fSDavid du Colombier break;
999a747e4fSDavid du Colombier case Tremove9p1: /* 74 */
1009a747e4fSDavid du Colombier sprint(buf, "Tremove9p1 tag %ud fid %d", tag, fid);
1019a747e4fSDavid du Colombier break;
1029a747e4fSDavid du Colombier case Rremove9p1:
1039a747e4fSDavid du Colombier sprint(buf, "Rremove9p1 tag %ud fid %d", tag, fid);
1049a747e4fSDavid du Colombier break;
1059a747e4fSDavid du Colombier case Tstat9p1: /* 76 */
1069a747e4fSDavid du Colombier sprint(buf, "Tstat9p1 tag %ud fid %d", tag, fid);
1079a747e4fSDavid du Colombier break;
1089a747e4fSDavid du Colombier case Rstat9p1:
1099a747e4fSDavid du Colombier n = sprint(buf, "Rstat9p1 tag %ud fid %d", tag, fid);
1109a747e4fSDavid du Colombier convM2D9p1(f->stat, &d);
1119a747e4fSDavid du Colombier sprint(buf+n, " stat ");
1129a747e4fSDavid du Colombier fdirconv(buf+n+6, &d);
1139a747e4fSDavid du Colombier break;
1149a747e4fSDavid du Colombier case Twstat9p1: /* 78 */
1159a747e4fSDavid du Colombier convM2D9p1(f->stat, &d);
1169a747e4fSDavid du Colombier n = sprint(buf, "Twstat9p1 tag %ud fid %d stat ", tag, fid);
1179a747e4fSDavid du Colombier fdirconv(buf+n, &d);
1189a747e4fSDavid du Colombier break;
1199a747e4fSDavid du Colombier case Rwstat9p1:
1209a747e4fSDavid du Colombier sprint(buf, "Rwstat9p1 tag %ud fid %d", tag, fid);
1219a747e4fSDavid du Colombier break;
1229a747e4fSDavid du Colombier case Tclwalk9p1: /* 81 */
1239a747e4fSDavid du Colombier sprint(buf, "Tclwalk9p1 tag %ud fid %d newfid %d name %.28s",
1249a747e4fSDavid du Colombier tag, fid, f->newfid, f->name);
1259a747e4fSDavid du Colombier break;
1269a747e4fSDavid du Colombier case Rclwalk9p1:
1279a747e4fSDavid du Colombier sprint(buf, "Rclwalk9p1 tag %ud fid %d qid 0x%lux|0x%lux",
1289a747e4fSDavid du Colombier tag, fid, f->qid.path, f->qid.version);
1299a747e4fSDavid du Colombier break;
1309a747e4fSDavid du Colombier default:
1319a747e4fSDavid du Colombier sprint(buf, "unknown type %d", type);
1329a747e4fSDavid du Colombier }
1339a747e4fSDavid du Colombier return fmtstrcpy(f1, buf);
1349a747e4fSDavid du Colombier }
1359a747e4fSDavid du Colombier
1369a747e4fSDavid du Colombier static void
fdirconv(char * buf,Dentry * d)1379a747e4fSDavid du Colombier fdirconv(char *buf, Dentry *d)
1389a747e4fSDavid du Colombier {
1399a747e4fSDavid du Colombier sprint(buf, "'%s' uid=%d gid=%d "
1409a747e4fSDavid du Colombier "q %lux|%lux m %uo "
1419a747e4fSDavid du Colombier "at %ld mt %ld l %ld ",
1429a747e4fSDavid du Colombier d->name, d->uid, d->gid,
1439a747e4fSDavid du Colombier d->qid.path, d->qid.version, d->mode,
1449a747e4fSDavid du Colombier d->atime, d->mtime, d->size);
1459a747e4fSDavid du Colombier }
1469a747e4fSDavid du Colombier
1479a747e4fSDavid du Colombier /*
1489a747e4fSDavid du Colombier * dump out count (or DUMPL, if count is bigger) bytes from
1499a747e4fSDavid du Colombier * buf to ans, as a string if they are all printable,
1509a747e4fSDavid du Colombier * else as a series of hex bytes
1519a747e4fSDavid du Colombier */
1529a747e4fSDavid du Colombier #define DUMPL 24
1539a747e4fSDavid du Colombier
1549a747e4fSDavid du Colombier static void
dumpsome(char * ans,char * buf,long count)1559a747e4fSDavid du Colombier dumpsome(char *ans, char *buf, long count)
1569a747e4fSDavid du Colombier {
1579a747e4fSDavid du Colombier int i, printable;
1589a747e4fSDavid du Colombier char *p;
1599a747e4fSDavid du Colombier
1609a747e4fSDavid du Colombier printable = 1;
1619a747e4fSDavid du Colombier if(count > DUMPL)
1629a747e4fSDavid du Colombier count = DUMPL;
1639a747e4fSDavid du Colombier for(i=0; i<count && printable; i++)
164*22a127bbSDavid du Colombier if((buf[i]<32 && buf[i] !='\n' && buf[i] !='\t') || (uchar)buf[i]>127)
1659a747e4fSDavid du Colombier printable = 0;
1669a747e4fSDavid du Colombier p = ans;
1679a747e4fSDavid du Colombier *p++ = '\'';
1689a747e4fSDavid du Colombier if(printable){
1699a747e4fSDavid du Colombier memmove(p, buf, count);
1709a747e4fSDavid du Colombier p += count;
1719a747e4fSDavid du Colombier }else{
1729a747e4fSDavid du Colombier for(i=0; i<count; i++){
1739a747e4fSDavid du Colombier if(i>0 && i%4==0)
1749a747e4fSDavid du Colombier *p++ = ' ';
1759a747e4fSDavid du Colombier sprint(p, "%2.2ux", buf[i]);
1769a747e4fSDavid du Colombier p += 2;
1779a747e4fSDavid du Colombier }
1789a747e4fSDavid du Colombier }
1799a747e4fSDavid du Colombier *p++ = '\'';
1809a747e4fSDavid du Colombier *p = 0;
1819a747e4fSDavid du Colombier }
182