xref: /plan9-contrib/sys/src/cmd/disk/kfs/ofcallfmt.c (revision 22a127bbfe4dd304949cc596400de973c0138e31)
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