ofcallfmt.c 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181
  1. #include "all.h"
  2. #include "9p1.h"
  3. static void dumpsome(char*, char*, long);
  4. static void fdirconv(char*, Dentry*);
  5. int
  6. ofcallfmt(Fmt *f1)
  7. {
  8. char buf[512];
  9. Oldfcall *f;
  10. int fid, type, tag, n;
  11. Dentry d;
  12. f = va_arg(f1->args, Oldfcall*);
  13. type = f->type;
  14. fid = f->fid;
  15. tag = f->tag;
  16. switch(type){
  17. case Tnop9p1: /* 50 */
  18. sprint(buf, "Tnop9p1 tag %ud", tag);
  19. break;
  20. case Rnop9p1:
  21. sprint(buf, "Rnop9p1 tag %ud", tag);
  22. break;
  23. case Tsession9p1: /* 52 */
  24. sprint(buf, "Tsession9p1 tag %ud", tag);
  25. break;
  26. case Rsession9p1:
  27. sprint(buf, "Rsession9p1 tag %ud", tag);
  28. break;
  29. case Rerror9p1: /* 55 */
  30. sprint(buf, "Rerror9p1 tag %ud error %.64s", tag, f->ename);
  31. break;
  32. case Tflush9p1: /* 56 */
  33. sprint(buf, "Tflush9p1 tag %ud oldtag %d", tag, f->oldtag);
  34. break;
  35. case Rflush9p1:
  36. sprint(buf, "Rflush9p1 tag %ud", tag);
  37. break;
  38. case Tattach9p1: /* 58 */
  39. sprint(buf, "Tattach9p1 tag %ud fid %d uname %.28s aname %.28s auth %.28s",
  40. tag, f->fid, f->uname, f->aname, f->auth);
  41. break;
  42. case Rattach9p1:
  43. sprint(buf, "Rattach9p1 tag %ud fid %d qid 0x%lux|0x%lux",
  44. tag, fid, f->qid.path, f->qid.version);
  45. break;
  46. case Tclone9p1: /* 60 */
  47. sprint(buf, "Tclone9p1 tag %ud fid %d newfid %d", tag, fid, f->newfid);
  48. break;
  49. case Rclone9p1:
  50. sprint(buf, "Rclone9p1 tag %ud fid %d", tag, fid);
  51. break;
  52. case Twalk9p1: /* 62 */
  53. sprint(buf, "Twalk9p1 tag %ud fid %d name %.28s", tag, fid, f->name);
  54. break;
  55. case Rwalk9p1:
  56. sprint(buf, "Rwalk9p1 tag %ud fid %d qid 0x%lux|0x%lux",
  57. tag, fid, f->qid.path, f->qid.version);
  58. break;
  59. case Topen9p1: /* 64 */
  60. sprint(buf, "Topen9p1 tag %ud fid %d mode %d", tag, fid, f->mode);
  61. break;
  62. case Ropen9p1:
  63. sprint(buf, "Ropen9p1 tag %ud fid %d qid 0x%lux|0x%lux",
  64. tag, fid, f->qid.path, f->qid.version);
  65. break;
  66. case Tcreate9p1: /* 66 */
  67. sprint(buf, "Tcreate9p1 tag %ud fid %d name %.28s perm 0x%lux mode %d",
  68. tag, fid, f->name, f->perm, f->mode);
  69. break;
  70. case Rcreate9p1:
  71. sprint(buf, "Rcreate9p1 tag %ud fid %d qid 0x%lux|0x%lux",
  72. tag, fid, f->qid.path, f->qid.version);
  73. break;
  74. case Tread9p1: /* 68 */
  75. sprint(buf, "Tread9p1 tag %ud fid %d offset %ld count %ld",
  76. tag, fid, f->offset, f->count);
  77. break;
  78. case Rread9p1:
  79. n = sprint(buf, "Rread9p1 tag %ud fid %d count %ld ", tag, fid, f->count);
  80. dumpsome(buf+n, f->data, f->count);
  81. break;
  82. case Twrite9p1: /* 70 */
  83. n = sprint(buf, "Twrite9p1 tag %ud fid %d offset %ld count %ld ",
  84. tag, fid, f->offset, f->count);
  85. dumpsome(buf+n, f->data, f->count);
  86. break;
  87. case Rwrite9p1:
  88. sprint(buf, "Rwrite9p1 tag %ud fid %d count %ld", tag, fid, f->count);
  89. break;
  90. case Tclunk9p1: /* 72 */
  91. sprint(buf, "Tclunk9p1 tag %ud fid %d", tag, fid);
  92. break;
  93. case Rclunk9p1:
  94. sprint(buf, "Rclunk9p1 tag %ud fid %d", tag, fid);
  95. break;
  96. case Tremove9p1: /* 74 */
  97. sprint(buf, "Tremove9p1 tag %ud fid %d", tag, fid);
  98. break;
  99. case Rremove9p1:
  100. sprint(buf, "Rremove9p1 tag %ud fid %d", tag, fid);
  101. break;
  102. case Tstat9p1: /* 76 */
  103. sprint(buf, "Tstat9p1 tag %ud fid %d", tag, fid);
  104. break;
  105. case Rstat9p1:
  106. n = sprint(buf, "Rstat9p1 tag %ud fid %d", tag, fid);
  107. convM2D9p1(f->stat, &d);
  108. sprint(buf+n, " stat ");
  109. fdirconv(buf+n+6, &d);
  110. break;
  111. case Twstat9p1: /* 78 */
  112. convM2D9p1(f->stat, &d);
  113. n = sprint(buf, "Twstat9p1 tag %ud fid %d stat ", tag, fid);
  114. fdirconv(buf+n, &d);
  115. break;
  116. case Rwstat9p1:
  117. sprint(buf, "Rwstat9p1 tag %ud fid %d", tag, fid);
  118. break;
  119. case Tclwalk9p1: /* 81 */
  120. sprint(buf, "Tclwalk9p1 tag %ud fid %d newfid %d name %.28s",
  121. tag, fid, f->newfid, f->name);
  122. break;
  123. case Rclwalk9p1:
  124. sprint(buf, "Rclwalk9p1 tag %ud fid %d qid 0x%lux|0x%lux",
  125. tag, fid, f->qid.path, f->qid.version);
  126. break;
  127. default:
  128. sprint(buf, "unknown type %d", type);
  129. }
  130. return fmtstrcpy(f1, buf);
  131. }
  132. static void
  133. fdirconv(char *buf, Dentry *d)
  134. {
  135. sprint(buf, "'%s' uid=%d gid=%d "
  136. "q %lux|%lux m %uo "
  137. "at %ld mt %ld l %ld ",
  138. d->name, d->uid, d->gid,
  139. d->qid.path, d->qid.version, d->mode,
  140. d->atime, d->mtime, d->size);
  141. }
  142. /*
  143. * dump out count (or DUMPL, if count is bigger) bytes from
  144. * buf to ans, as a string if they are all printable,
  145. * else as a series of hex bytes
  146. */
  147. #define DUMPL 24
  148. static void
  149. dumpsome(char *ans, char *buf, long count)
  150. {
  151. int i, printable;
  152. char *p;
  153. printable = 1;
  154. if(count > DUMPL)
  155. count = DUMPL;
  156. for(i=0; i<count && printable; i++)
  157. if((buf[i]<32 && buf[i] !='\n' && buf[i] !='\t') || (uchar)buf[i]>127)
  158. printable = 0;
  159. p = ans;
  160. *p++ = '\'';
  161. if(printable){
  162. memmove(p, buf, count);
  163. p += count;
  164. }else{
  165. for(i=0; i<count; i++){
  166. if(i>0 && i%4==0)
  167. *p++ = ' ';
  168. sprint(p, "%2.2ux", buf[i]);
  169. p += 2;
  170. }
  171. }
  172. *p++ = '\'';
  173. *p = 0;
  174. }