|
|
1.1 ! root 1: #include "u.h" ! 2: #include <sys/types.h> ! 3: #include <sys/stat.h> ! 4: #include "libc.h" ! 5: #include "9p.h" ! 6: ! 7: extern void error(char*); ! 8: ! 9: #define CHAR(x) *p++ = f->x ! 10: #define SHORT(x) p[0] = f->x; p[1] = f->x>>8; p += 2 ! 11: #define LONG(x) p[0] = f->x; p[1] = f->x>>8; p[2] = f->x>>16; p[3] = f->x>>24; p += 4 ! 12: #define VLONG(x) p[0] = f->x; p[1] = f->x>>8; p[2] = f->x>>16; p[3] = f->x>>24;\ ! 13: p[4] = 0; p[5] = 0; p[6] = 0; p[7] = 0; p += 8 ! 14: #define STRING(x,n) memmove(p, f->x, n); p += n ! 15: ! 16: int ! 17: convD2M(Dir *f, char *ap) ! 18: { ! 19: Uchar *p; ! 20: ! 21: p = (Uchar*)ap; ! 22: STRING(name, sizeof(f->name)); ! 23: STRING(uid, sizeof(f->uid)); ! 24: STRING(gid, sizeof(f->gid)); ! 25: LONG(qid.path); ! 26: LONG(qid.vers); ! 27: LONG(mode); ! 28: LONG(atime); ! 29: LONG(mtime); ! 30: VLONG(len.l.length); ! 31: SHORT(type); ! 32: SHORT(dev); ! 33: return p - (Uchar*)ap; ! 34: } ! 35: ! 36: #undef CHAR ! 37: #undef SHORT ! 38: #undef LONG ! 39: #undef VLONG ! 40: #undef STRING ! 41: #define CHAR(x) f->x = *p++ ! 42: #define SHORT(x) f->x = (p[0] | (p[1]<<8)); p += 2 ! 43: #define LONG(x) f->x = (p[0] | (p[1]<<8) |\ ! 44: (p[2]<<16) | (p[3]<<24)); p += 4 ! 45: #define VLONG(x) f->x = (p[0] | (p[1]<<8) |\ ! 46: (p[2]<<16) | (p[3]<<24)); p += 8 ! 47: #define STRING(x,n) memmove(f->x, p, n); p += n ! 48: ! 49: int ! 50: convM2D(char *ap, Dir *f) ! 51: { ! 52: Uchar *p; ! 53: ! 54: p = (Uchar*)ap; ! 55: STRING(name, sizeof(f->name)); ! 56: STRING(uid, sizeof(f->uid)); ! 57: STRING(gid, sizeof(f->gid)); ! 58: LONG(qid.path); ! 59: LONG(qid.vers); ! 60: LONG(mode); ! 61: LONG(atime); ! 62: LONG(mtime); ! 63: VLONG(len.l.length); ! 64: SHORT(type); ! 65: SHORT(dev); ! 66: return p - (Uchar*)ap; ! 67: } ! 68: ! 69: #undef CHAR ! 70: #undef SHORT ! 71: #undef LONG ! 72: #undef VLONG ! 73: #undef STRING ! 74: #define CHAR(x) f->x = *p++ ! 75: #define SHORT(x) f->x = (p[0] | (p[1]<<8)); p += 2 ! 76: #define LONG(x) f->x = (p[0] | (p[1]<<8) |\ ! 77: (p[2]<<16) | (p[3]<<24)); p += 4 ! 78: #define VLONG(x) f->x = (p[0] | (p[1]<<8) |\ ! 79: (p[2]<<16) | (p[3]<<24)); p += 8 ! 80: #define STRING(x,n) memmove(f->x, p, n); p += n ! 81: ! 82: int ! 83: convM2S(char *ap, Fcall *f, int n) ! 84: { ! 85: Uchar *p; ! 86: ! 87: p = (Uchar*)ap; ! 88: CHAR(type); ! 89: SHORT(tag); ! 90: switch(f->type) ! 91: { ! 92: default: ! 93: error("bad convM2S type"); ! 94: ! 95: case Tnop: ! 96: break; ! 97: ! 98: case Tsession: ! 99: STRING(chal, sizeof(f->chal)); ! 100: break; ! 101: ! 102: case Tflush: ! 103: SHORT(oldtag); ! 104: break; ! 105: ! 106: case Tattach: ! 107: SHORT(fid); ! 108: STRING(uname, sizeof(f->uname)); ! 109: STRING(aname, sizeof(f->aname)); ! 110: STRING(ticket, sizeof(f->ticket)); ! 111: STRING(auth, sizeof(f->auth)); ! 112: break; ! 113: ! 114: case Tclone: ! 115: SHORT(fid); ! 116: SHORT(newfid); ! 117: break; ! 118: ! 119: case Twalk: ! 120: SHORT(fid); ! 121: STRING(name, sizeof(f->name)); ! 122: break; ! 123: ! 124: case Topen: ! 125: SHORT(fid); ! 126: CHAR(mode); ! 127: break; ! 128: ! 129: case Tcreate: ! 130: SHORT(fid); ! 131: STRING(name, sizeof(f->name)); ! 132: LONG(perm); ! 133: CHAR(mode); ! 134: break; ! 135: ! 136: case Tread: ! 137: SHORT(fid); ! 138: VLONG(offset); ! 139: SHORT(count); ! 140: break; ! 141: ! 142: case Twrite: ! 143: SHORT(fid); ! 144: VLONG(offset); ! 145: SHORT(count); ! 146: p++; /* pad(1) */ ! 147: f->data = (char*)p; p += f->count; ! 148: break; ! 149: ! 150: case Tclunk: ! 151: SHORT(fid); ! 152: break; ! 153: ! 154: case Tremove: ! 155: SHORT(fid); ! 156: break; ! 157: ! 158: case Tstat: ! 159: SHORT(fid); ! 160: break; ! 161: ! 162: case Twstat: ! 163: SHORT(fid); ! 164: STRING(stat, sizeof(f->stat)); ! 165: break; ! 166: ! 167: case Tclwalk: ! 168: SHORT(fid); ! 169: SHORT(newfid); ! 170: STRING(name, sizeof(f->name)); ! 171: break; ! 172: /* ! 173: */ ! 174: case Rnop: ! 175: break; ! 176: ! 177: case Rsession: ! 178: STRING(chal, sizeof(f->chal)); ! 179: STRING(authid, sizeof(f->authid)); ! 180: STRING(authdom, sizeof(f->authdom)); ! 181: break; ! 182: ! 183: case Rerror: ! 184: STRING(ename, sizeof(f->ename)); ! 185: break; ! 186: ! 187: case Rflush: ! 188: break; ! 189: ! 190: case Rattach: ! 191: SHORT(fid); ! 192: LONG(qid.path); ! 193: LONG(qid.vers); ! 194: STRING(rauth, sizeof(f->rauth)); ! 195: break; ! 196: ! 197: case Rclone: ! 198: SHORT(fid); ! 199: break; ! 200: ! 201: case Rwalk: ! 202: case Rclwalk: ! 203: SHORT(fid); ! 204: LONG(qid.path); ! 205: LONG(qid.vers); ! 206: break; ! 207: ! 208: case Ropen: ! 209: SHORT(fid); ! 210: LONG(qid.path); ! 211: LONG(qid.vers); ! 212: break; ! 213: ! 214: case Rcreate: ! 215: SHORT(fid); ! 216: LONG(qid.path); ! 217: LONG(qid.vers); ! 218: break; ! 219: ! 220: case Rread: ! 221: SHORT(fid); ! 222: SHORT(count); ! 223: p++; /* pad(1) */ ! 224: f->data = (char*)p; p += f->count; ! 225: break; ! 226: ! 227: case Rwrite: ! 228: SHORT(fid); ! 229: SHORT(count); ! 230: break; ! 231: ! 232: case Rclunk: ! 233: SHORT(fid); ! 234: break; ! 235: ! 236: case Rremove: ! 237: SHORT(fid); ! 238: break; ! 239: ! 240: case Rstat: ! 241: SHORT(fid); ! 242: STRING(stat, sizeof(f->stat)); ! 243: break; ! 244: ! 245: case Rwstat: ! 246: SHORT(fid); ! 247: break; ! 248: } ! 249: return (ap+n) - (char*)p; ! 250: } ! 251: ! 252: #undef CHAR ! 253: #undef SHORT ! 254: #undef LONG ! 255: #undef VLONG ! 256: #undef STRING ! 257: #define CHAR(x) *p++ = f->x ! 258: #define SHORT(x) p[0] = f->x; p[1] = f->x>>8; p += 2 ! 259: #define LONG(x) p[0] = f->x; p[1] = f->x>>8; p[2] = f->x>>16; p[3] = f->x>>24; p += 4 ! 260: #define VLONG(x) p[0] = f->x; p[1] = f->x>>8; p[2] = f->x>>16; p[3] = f->x>>24;\ ! 261: p[4] = 0; p[5] = 0; p[6] = 0; p[7] = 0; p += 8 ! 262: #define STRING(x,n) memmove(p, f->x, n); p += n ! 263: ! 264: int ! 265: convS2M(Fcall *f, char *ap) ! 266: { ! 267: Uchar *p; ! 268: ! 269: p = (Uchar*)ap; ! 270: CHAR(type); ! 271: SHORT(tag); ! 272: switch(f->type) ! 273: { ! 274: default: ! 275: return 0; ! 276: ! 277: case Tnop: ! 278: break; ! 279: ! 280: case Tsession: ! 281: STRING(chal, sizeof(f->chal)); ! 282: break; ! 283: ! 284: case Tflush: ! 285: SHORT(oldtag); ! 286: break; ! 287: ! 288: case Tattach: ! 289: SHORT(fid); ! 290: STRING(uname, sizeof(f->uname)); ! 291: STRING(aname, sizeof(f->aname)); ! 292: STRING(ticket, sizeof(f->ticket)); ! 293: STRING(auth, sizeof(f->auth)); ! 294: break; ! 295: ! 296: case Tclone: ! 297: SHORT(fid); ! 298: SHORT(newfid); ! 299: break; ! 300: ! 301: case Twalk: ! 302: SHORT(fid); ! 303: STRING(name, sizeof(f->name)); ! 304: break; ! 305: ! 306: case Topen: ! 307: SHORT(fid); ! 308: CHAR(mode); ! 309: break; ! 310: ! 311: case Tcreate: ! 312: SHORT(fid); ! 313: STRING(name, sizeof(f->name)); ! 314: LONG(perm); ! 315: CHAR(mode); ! 316: break; ! 317: ! 318: case Tread: ! 319: SHORT(fid); ! 320: VLONG(offset); ! 321: SHORT(count); ! 322: break; ! 323: ! 324: case Twrite: ! 325: SHORT(fid); ! 326: VLONG(offset); ! 327: SHORT(count); ! 328: p++; /* pad(1) */ ! 329: STRING(data, f->count); ! 330: break; ! 331: ! 332: case Tclunk: ! 333: SHORT(fid); ! 334: break; ! 335: ! 336: case Tremove: ! 337: SHORT(fid); ! 338: break; ! 339: ! 340: case Tstat: ! 341: SHORT(fid); ! 342: break; ! 343: ! 344: case Twstat: ! 345: SHORT(fid); ! 346: STRING(stat, sizeof(f->stat)); ! 347: break; ! 348: ! 349: case Tclwalk: ! 350: SHORT(fid); ! 351: SHORT(newfid); ! 352: STRING(name, sizeof(f->name)); ! 353: break; ! 354: /* ! 355: */ ! 356: case Rnop: ! 357: break; ! 358: ! 359: case Rsession: ! 360: STRING(chal, sizeof(f->chal)); ! 361: STRING(authid, sizeof(f->authid)); ! 362: STRING(authdom, sizeof(f->authdom)); ! 363: break; ! 364: ! 365: case Rerror: ! 366: STRING(ename, sizeof(f->ename)); ! 367: break; ! 368: ! 369: case Rflush: ! 370: break; ! 371: ! 372: case Rattach: ! 373: SHORT(fid); ! 374: LONG(qid.path); ! 375: LONG(qid.vers); ! 376: STRING(rauth, sizeof(f->rauth)); ! 377: break; ! 378: ! 379: case Rclone: ! 380: SHORT(fid); ! 381: break; ! 382: ! 383: case Rwalk: ! 384: case Rclwalk: ! 385: SHORT(fid); ! 386: LONG(qid.path); ! 387: LONG(qid.vers); ! 388: break; ! 389: ! 390: case Ropen: ! 391: SHORT(fid); ! 392: LONG(qid.path); ! 393: LONG(qid.vers); ! 394: break; ! 395: ! 396: case Rcreate: ! 397: SHORT(fid); ! 398: LONG(qid.path); ! 399: LONG(qid.vers); ! 400: break; ! 401: ! 402: case Rread: ! 403: SHORT(fid); ! 404: SHORT(count); ! 405: p++; /* pad(1) */ ! 406: STRING(data, f->count); ! 407: break; ! 408: ! 409: case Rwrite: ! 410: SHORT(fid); ! 411: SHORT(count); ! 412: break; ! 413: ! 414: case Rclunk: ! 415: SHORT(fid); ! 416: break; ! 417: ! 418: case Rremove: ! 419: SHORT(fid); ! 420: break; ! 421: ! 422: case Rstat: ! 423: SHORT(fid); ! 424: STRING(stat, sizeof(f->stat)); ! 425: break; ! 426: ! 427: case Rwstat: ! 428: SHORT(fid); ! 429: break; ! 430: } ! 431: return p - (Uchar*)ap; ! 432: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.