13e12c5d1SDavid du Colombier #include <string.h>
23e12c5d1SDavid du Colombier #include "sys9.h"
3*219b2ee8SDavid du Colombier #include "lib.h"
43e12c5d1SDavid du Colombier #include "dir.h"
53e12c5d1SDavid du Colombier #include "fcall.h"
63e12c5d1SDavid du Colombier
73e12c5d1SDavid du Colombier typedef unsigned char uchar;
83e12c5d1SDavid du Colombier
93e12c5d1SDavid du Colombier #define CHAR(x) *p++ = f->x
103e12c5d1SDavid du Colombier #define SHORT(x) p[0] = f->x; p[1] = f->x>>8; p += 2
113e12c5d1SDavid du Colombier #define LONG(x) p[0] = f->x; p[1] = f->x>>8; p[2] = f->x>>16; p[3] = f->x>>24; p += 4
123e12c5d1SDavid du Colombier #define VLONG(x) p[0] = f->x; p[1] = f->x>>8; p[2] = f->x>>16; p[3] = f->x>>24;\
133e12c5d1SDavid du Colombier p[4] = 0; p[5] = 0; p[6] = 0; p[7] = 0; p += 8
143e12c5d1SDavid du Colombier #define STRING(x,n) memcpy(p, f->x, n); p += n
153e12c5d1SDavid du Colombier
163e12c5d1SDavid du Colombier int
convS2M(Fcall * f,char * ap)173e12c5d1SDavid du Colombier convS2M(Fcall *f, char *ap)
183e12c5d1SDavid du Colombier {
193e12c5d1SDavid du Colombier uchar *p;
203e12c5d1SDavid du Colombier
213e12c5d1SDavid du Colombier p = (uchar*)ap;
223e12c5d1SDavid du Colombier CHAR(type);
233e12c5d1SDavid du Colombier SHORT(tag);
243e12c5d1SDavid du Colombier switch(f->type)
253e12c5d1SDavid du Colombier {
263e12c5d1SDavid du Colombier default:
273e12c5d1SDavid du Colombier return 0;
283e12c5d1SDavid du Colombier
29*219b2ee8SDavid du Colombier case Tosession:
303e12c5d1SDavid du Colombier case Tnop:
313e12c5d1SDavid du Colombier break;
323e12c5d1SDavid du Colombier
333e12c5d1SDavid du Colombier case Tsession:
34*219b2ee8SDavid du Colombier STRING(chal, sizeof(f->chal));
353e12c5d1SDavid du Colombier break;
363e12c5d1SDavid du Colombier
373e12c5d1SDavid du Colombier case Tflush:
383e12c5d1SDavid du Colombier SHORT(oldtag);
393e12c5d1SDavid du Colombier break;
403e12c5d1SDavid du Colombier
413e12c5d1SDavid du Colombier case Tattach:
423e12c5d1SDavid du Colombier SHORT(fid);
433e12c5d1SDavid du Colombier STRING(uname, sizeof(f->uname));
443e12c5d1SDavid du Colombier STRING(aname, sizeof(f->aname));
45*219b2ee8SDavid du Colombier STRING(ticket, sizeof(f->ticket));
463e12c5d1SDavid du Colombier STRING(auth, sizeof(f->auth));
473e12c5d1SDavid du Colombier break;
483e12c5d1SDavid du Colombier
49*219b2ee8SDavid du Colombier case Toattach:
50*219b2ee8SDavid du Colombier SHORT(fid);
51*219b2ee8SDavid du Colombier STRING(uname, sizeof(f->uname));
52*219b2ee8SDavid du Colombier STRING(aname, sizeof(f->aname));
53*219b2ee8SDavid du Colombier STRING(ticket, NAMELEN);
54*219b2ee8SDavid du Colombier break;
55*219b2ee8SDavid du Colombier
563e12c5d1SDavid du Colombier case Tauth:
573e12c5d1SDavid du Colombier SHORT(fid);
583e12c5d1SDavid du Colombier STRING(uname, sizeof(f->uname));
59*219b2ee8SDavid du Colombier STRING(ticket, 8+NAMELEN);
603e12c5d1SDavid du Colombier break;
613e12c5d1SDavid du Colombier
623e12c5d1SDavid du Colombier case Tclone:
633e12c5d1SDavid du Colombier SHORT(fid);
643e12c5d1SDavid du Colombier SHORT(newfid);
653e12c5d1SDavid du Colombier break;
663e12c5d1SDavid du Colombier
673e12c5d1SDavid du Colombier case Twalk:
683e12c5d1SDavid du Colombier SHORT(fid);
693e12c5d1SDavid du Colombier STRING(name, sizeof(f->name));
703e12c5d1SDavid du Colombier break;
713e12c5d1SDavid du Colombier
723e12c5d1SDavid du Colombier case Topen:
733e12c5d1SDavid du Colombier SHORT(fid);
743e12c5d1SDavid du Colombier CHAR(mode);
753e12c5d1SDavid du Colombier break;
763e12c5d1SDavid du Colombier
773e12c5d1SDavid du Colombier case Tcreate:
783e12c5d1SDavid du Colombier SHORT(fid);
793e12c5d1SDavid du Colombier STRING(name, sizeof(f->name));
803e12c5d1SDavid du Colombier LONG(perm);
813e12c5d1SDavid du Colombier CHAR(mode);
823e12c5d1SDavid du Colombier break;
833e12c5d1SDavid du Colombier
843e12c5d1SDavid du Colombier case Tread:
853e12c5d1SDavid du Colombier SHORT(fid);
863e12c5d1SDavid du Colombier VLONG(offset);
873e12c5d1SDavid du Colombier SHORT(count);
883e12c5d1SDavid du Colombier break;
893e12c5d1SDavid du Colombier
903e12c5d1SDavid du Colombier case Twrite:
913e12c5d1SDavid du Colombier SHORT(fid);
923e12c5d1SDavid du Colombier VLONG(offset);
933e12c5d1SDavid du Colombier SHORT(count);
943e12c5d1SDavid du Colombier p++; /* pad(1) */
953e12c5d1SDavid du Colombier STRING(data, f->count);
963e12c5d1SDavid du Colombier break;
973e12c5d1SDavid du Colombier
983e12c5d1SDavid du Colombier case Tclunk:
993e12c5d1SDavid du Colombier SHORT(fid);
1003e12c5d1SDavid du Colombier break;
1013e12c5d1SDavid du Colombier
1023e12c5d1SDavid du Colombier case Tremove:
1033e12c5d1SDavid du Colombier SHORT(fid);
1043e12c5d1SDavid du Colombier break;
1053e12c5d1SDavid du Colombier
1063e12c5d1SDavid du Colombier case Tstat:
1073e12c5d1SDavid du Colombier SHORT(fid);
1083e12c5d1SDavid du Colombier break;
1093e12c5d1SDavid du Colombier
1103e12c5d1SDavid du Colombier case Twstat:
1113e12c5d1SDavid du Colombier SHORT(fid);
1123e12c5d1SDavid du Colombier STRING(stat, sizeof(f->stat));
1133e12c5d1SDavid du Colombier break;
1143e12c5d1SDavid du Colombier
1153e12c5d1SDavid du Colombier case Tclwalk:
1163e12c5d1SDavid du Colombier SHORT(fid);
1173e12c5d1SDavid du Colombier SHORT(newfid);
1183e12c5d1SDavid du Colombier STRING(name, sizeof(f->name));
1193e12c5d1SDavid du Colombier break;
1203e12c5d1SDavid du Colombier /*
1213e12c5d1SDavid du Colombier */
122*219b2ee8SDavid du Colombier case Rosession:
1233e12c5d1SDavid du Colombier case Rnop:
1243e12c5d1SDavid du Colombier break;
1253e12c5d1SDavid du Colombier
1263e12c5d1SDavid du Colombier case Rsession:
127*219b2ee8SDavid du Colombier STRING(chal, sizeof(f->chal));
128*219b2ee8SDavid du Colombier STRING(authid, sizeof(f->authid));
129*219b2ee8SDavid du Colombier STRING(authdom, sizeof(f->authdom));
1303e12c5d1SDavid du Colombier break;
1313e12c5d1SDavid du Colombier
1323e12c5d1SDavid du Colombier case Rerror:
1333e12c5d1SDavid du Colombier STRING(ename, sizeof(f->ename));
1343e12c5d1SDavid du Colombier break;
1353e12c5d1SDavid du Colombier
1363e12c5d1SDavid du Colombier case Rflush:
1373e12c5d1SDavid du Colombier break;
1383e12c5d1SDavid du Colombier
1393e12c5d1SDavid du Colombier case Rattach:
1403e12c5d1SDavid du Colombier SHORT(fid);
1413e12c5d1SDavid du Colombier LONG(qid.path);
1423e12c5d1SDavid du Colombier LONG(qid.vers);
143*219b2ee8SDavid du Colombier STRING(rauth, sizeof(f->rauth));
144*219b2ee8SDavid du Colombier break;
145*219b2ee8SDavid du Colombier
146*219b2ee8SDavid du Colombier case Roattach:
147*219b2ee8SDavid du Colombier SHORT(fid);
148*219b2ee8SDavid du Colombier LONG(qid.path);
149*219b2ee8SDavid du Colombier LONG(qid.vers);
1503e12c5d1SDavid du Colombier break;
1513e12c5d1SDavid du Colombier
1523e12c5d1SDavid du Colombier case Rauth:
1533e12c5d1SDavid du Colombier SHORT(fid);
154*219b2ee8SDavid du Colombier STRING(ticket, 8+8+7+7);
1553e12c5d1SDavid du Colombier break;
1563e12c5d1SDavid du Colombier
1573e12c5d1SDavid du Colombier case Rclone:
1583e12c5d1SDavid du Colombier SHORT(fid);
1593e12c5d1SDavid du Colombier break;
1603e12c5d1SDavid du Colombier
1613e12c5d1SDavid du Colombier case Rwalk:
1623e12c5d1SDavid du Colombier case Rclwalk:
1633e12c5d1SDavid du Colombier SHORT(fid);
1643e12c5d1SDavid du Colombier LONG(qid.path);
1653e12c5d1SDavid du Colombier LONG(qid.vers);
1663e12c5d1SDavid du Colombier break;
1673e12c5d1SDavid du Colombier
1683e12c5d1SDavid du Colombier case Ropen:
1693e12c5d1SDavid du Colombier SHORT(fid);
1703e12c5d1SDavid du Colombier LONG(qid.path);
1713e12c5d1SDavid du Colombier LONG(qid.vers);
1723e12c5d1SDavid du Colombier break;
1733e12c5d1SDavid du Colombier
1743e12c5d1SDavid du Colombier case Rcreate:
1753e12c5d1SDavid du Colombier SHORT(fid);
1763e12c5d1SDavid du Colombier LONG(qid.path);
1773e12c5d1SDavid du Colombier LONG(qid.vers);
1783e12c5d1SDavid du Colombier break;
1793e12c5d1SDavid du Colombier
1803e12c5d1SDavid du Colombier case Rread:
1813e12c5d1SDavid du Colombier SHORT(fid);
1823e12c5d1SDavid du Colombier SHORT(count);
1833e12c5d1SDavid du Colombier p++; /* pad(1) */
1843e12c5d1SDavid du Colombier STRING(data, f->count);
1853e12c5d1SDavid du Colombier break;
1863e12c5d1SDavid du Colombier
1873e12c5d1SDavid du Colombier case Rwrite:
1883e12c5d1SDavid du Colombier SHORT(fid);
1893e12c5d1SDavid du Colombier SHORT(count);
1903e12c5d1SDavid du Colombier break;
1913e12c5d1SDavid du Colombier
1923e12c5d1SDavid du Colombier case Rclunk:
1933e12c5d1SDavid du Colombier SHORT(fid);
1943e12c5d1SDavid du Colombier break;
1953e12c5d1SDavid du Colombier
1963e12c5d1SDavid du Colombier case Rremove:
1973e12c5d1SDavid du Colombier SHORT(fid);
1983e12c5d1SDavid du Colombier break;
1993e12c5d1SDavid du Colombier
2003e12c5d1SDavid du Colombier case Rstat:
2013e12c5d1SDavid du Colombier SHORT(fid);
2023e12c5d1SDavid du Colombier STRING(stat, sizeof(f->stat));
2033e12c5d1SDavid du Colombier break;
2043e12c5d1SDavid du Colombier
2053e12c5d1SDavid du Colombier case Rwstat:
2063e12c5d1SDavid du Colombier SHORT(fid);
2073e12c5d1SDavid du Colombier break;
2083e12c5d1SDavid du Colombier }
2093e12c5d1SDavid du Colombier return p - (uchar*)ap;
2103e12c5d1SDavid du Colombier }
2113e12c5d1SDavid du Colombier
2123e12c5d1SDavid du Colombier #undef CHAR
2133e12c5d1SDavid du Colombier #undef SHORT
2143e12c5d1SDavid du Colombier #undef LONG
2153e12c5d1SDavid du Colombier #undef VLONG
2163e12c5d1SDavid du Colombier #undef STRING
2173e12c5d1SDavid du Colombier
2183e12c5d1SDavid du Colombier #define CHAR(x) f->x = *p++
2193e12c5d1SDavid du Colombier #define SHORT(x) f->x = (p[0] | (p[1]<<8)); p += 2
2203e12c5d1SDavid du Colombier #define LONG(x) f->x = (p[0] | (p[1]<<8) |\
2213e12c5d1SDavid du Colombier (p[2]<<16) | (p[3]<<24)); p += 4
2223e12c5d1SDavid du Colombier #define VLONG(x) f->x = (p[0] | (p[1]<<8) |\
2233e12c5d1SDavid du Colombier (p[2]<<16) | (p[3]<<24)); p += 8
2243e12c5d1SDavid du Colombier #define STRING(x,n) memcpy(f->x, p, n); p += n
2253e12c5d1SDavid du Colombier
2263e12c5d1SDavid du Colombier int
convM2S(char * ap,Fcall * f,int n)2273e12c5d1SDavid du Colombier convM2S(char *ap, Fcall *f, int n)
2283e12c5d1SDavid du Colombier {
2293e12c5d1SDavid du Colombier uchar *p;
2303e12c5d1SDavid du Colombier
2313e12c5d1SDavid du Colombier p = (uchar*)ap;
2323e12c5d1SDavid du Colombier CHAR(type);
2333e12c5d1SDavid du Colombier SHORT(tag);
2343e12c5d1SDavid du Colombier switch(f->type)
2353e12c5d1SDavid du Colombier {
2363e12c5d1SDavid du Colombier default:
2373e12c5d1SDavid du Colombier return 0;
2383e12c5d1SDavid du Colombier
2393e12c5d1SDavid du Colombier case Tnop:
240*219b2ee8SDavid du Colombier case Tosession:
2413e12c5d1SDavid du Colombier break;
2423e12c5d1SDavid du Colombier
2433e12c5d1SDavid du Colombier case Tsession:
244*219b2ee8SDavid du Colombier STRING(chal, sizeof(f->chal));
2453e12c5d1SDavid du Colombier break;
2463e12c5d1SDavid du Colombier
2473e12c5d1SDavid du Colombier case Tflush:
2483e12c5d1SDavid du Colombier SHORT(oldtag);
2493e12c5d1SDavid du Colombier break;
2503e12c5d1SDavid du Colombier
2513e12c5d1SDavid du Colombier case Tattach:
2523e12c5d1SDavid du Colombier SHORT(fid);
2533e12c5d1SDavid du Colombier STRING(uname, sizeof(f->uname));
2543e12c5d1SDavid du Colombier STRING(aname, sizeof(f->aname));
255*219b2ee8SDavid du Colombier STRING(ticket, sizeof(f->ticket));
2563e12c5d1SDavid du Colombier STRING(auth, sizeof(f->auth));
2573e12c5d1SDavid du Colombier break;
2583e12c5d1SDavid du Colombier
259*219b2ee8SDavid du Colombier case Toattach:
260*219b2ee8SDavid du Colombier SHORT(fid);
261*219b2ee8SDavid du Colombier STRING(uname, sizeof(f->uname));
262*219b2ee8SDavid du Colombier STRING(aname, sizeof(f->aname));
263*219b2ee8SDavid du Colombier STRING(ticket, NAMELEN);
264*219b2ee8SDavid du Colombier break;
265*219b2ee8SDavid du Colombier
2663e12c5d1SDavid du Colombier case Tauth:
2673e12c5d1SDavid du Colombier SHORT(fid);
2683e12c5d1SDavid du Colombier STRING(uname, sizeof(f->uname));
269*219b2ee8SDavid du Colombier STRING(ticket, 8+NAMELEN);
2703e12c5d1SDavid du Colombier break;
2713e12c5d1SDavid du Colombier
2723e12c5d1SDavid du Colombier case Tclone:
2733e12c5d1SDavid du Colombier SHORT(fid);
2743e12c5d1SDavid du Colombier SHORT(newfid);
2753e12c5d1SDavid du Colombier break;
2763e12c5d1SDavid du Colombier
2773e12c5d1SDavid du Colombier case Twalk:
2783e12c5d1SDavid du Colombier SHORT(fid);
2793e12c5d1SDavid du Colombier STRING(name, sizeof(f->name));
2803e12c5d1SDavid du Colombier break;
2813e12c5d1SDavid du Colombier
2823e12c5d1SDavid du Colombier case Topen:
2833e12c5d1SDavid du Colombier SHORT(fid);
2843e12c5d1SDavid du Colombier CHAR(mode);
2853e12c5d1SDavid du Colombier break;
2863e12c5d1SDavid du Colombier
2873e12c5d1SDavid du Colombier case Tcreate:
2883e12c5d1SDavid du Colombier SHORT(fid);
2893e12c5d1SDavid du Colombier STRING(name, sizeof(f->name));
2903e12c5d1SDavid du Colombier LONG(perm);
2913e12c5d1SDavid du Colombier CHAR(mode);
2923e12c5d1SDavid du Colombier break;
2933e12c5d1SDavid du Colombier
2943e12c5d1SDavid du Colombier case Tread:
2953e12c5d1SDavid du Colombier SHORT(fid);
2963e12c5d1SDavid du Colombier VLONG(offset);
2973e12c5d1SDavid du Colombier SHORT(count);
2983e12c5d1SDavid du Colombier break;
2993e12c5d1SDavid du Colombier
3003e12c5d1SDavid du Colombier case Twrite:
3013e12c5d1SDavid du Colombier SHORT(fid);
3023e12c5d1SDavid du Colombier VLONG(offset);
3033e12c5d1SDavid du Colombier SHORT(count);
3043e12c5d1SDavid du Colombier p++; /* pad(1) */
3053e12c5d1SDavid du Colombier f->data = (char*)p; p += f->count;
3063e12c5d1SDavid du Colombier break;
3073e12c5d1SDavid du Colombier
3083e12c5d1SDavid du Colombier case Tclunk:
3093e12c5d1SDavid du Colombier SHORT(fid);
3103e12c5d1SDavid du Colombier break;
3113e12c5d1SDavid du Colombier
3123e12c5d1SDavid du Colombier case Tremove:
3133e12c5d1SDavid du Colombier SHORT(fid);
3143e12c5d1SDavid du Colombier break;
3153e12c5d1SDavid du Colombier
3163e12c5d1SDavid du Colombier case Tstat:
3173e12c5d1SDavid du Colombier SHORT(fid);
3183e12c5d1SDavid du Colombier break;
3193e12c5d1SDavid du Colombier
3203e12c5d1SDavid du Colombier case Twstat:
3213e12c5d1SDavid du Colombier SHORT(fid);
3223e12c5d1SDavid du Colombier STRING(stat, sizeof(f->stat));
3233e12c5d1SDavid du Colombier break;
3243e12c5d1SDavid du Colombier
3253e12c5d1SDavid du Colombier case Tclwalk:
3263e12c5d1SDavid du Colombier SHORT(fid);
3273e12c5d1SDavid du Colombier SHORT(newfid);
3283e12c5d1SDavid du Colombier STRING(name, sizeof(f->name));
3293e12c5d1SDavid du Colombier break;
3303e12c5d1SDavid du Colombier /*
3313e12c5d1SDavid du Colombier */
3323e12c5d1SDavid du Colombier case Rnop:
333*219b2ee8SDavid du Colombier case Rosession:
3343e12c5d1SDavid du Colombier break;
3353e12c5d1SDavid du Colombier
3363e12c5d1SDavid du Colombier case Rsession:
337*219b2ee8SDavid du Colombier STRING(chal, sizeof(f->chal));
338*219b2ee8SDavid du Colombier STRING(authid, sizeof(f->authid));
339*219b2ee8SDavid du Colombier STRING(authdom, sizeof(f->authdom));
3403e12c5d1SDavid du Colombier break;
3413e12c5d1SDavid du Colombier
3423e12c5d1SDavid du Colombier case Rerror:
3433e12c5d1SDavid du Colombier STRING(ename, sizeof(f->ename));
3443e12c5d1SDavid du Colombier break;
3453e12c5d1SDavid du Colombier
3463e12c5d1SDavid du Colombier case Rflush:
3473e12c5d1SDavid du Colombier break;
3483e12c5d1SDavid du Colombier
3493e12c5d1SDavid du Colombier case Rattach:
3503e12c5d1SDavid du Colombier SHORT(fid);
3513e12c5d1SDavid du Colombier LONG(qid.path);
3523e12c5d1SDavid du Colombier LONG(qid.vers);
353*219b2ee8SDavid du Colombier STRING(rauth, sizeof(f->rauth));
354*219b2ee8SDavid du Colombier break;
355*219b2ee8SDavid du Colombier
356*219b2ee8SDavid du Colombier case Roattach:
357*219b2ee8SDavid du Colombier SHORT(fid);
358*219b2ee8SDavid du Colombier LONG(qid.path);
359*219b2ee8SDavid du Colombier LONG(qid.vers);
3603e12c5d1SDavid du Colombier break;
3613e12c5d1SDavid du Colombier
3623e12c5d1SDavid du Colombier case Rauth:
3633e12c5d1SDavid du Colombier SHORT(fid);
364*219b2ee8SDavid du Colombier STRING(ticket, 8+8+7+7);
3653e12c5d1SDavid du Colombier break;
3663e12c5d1SDavid du Colombier
3673e12c5d1SDavid du Colombier case Rclone:
3683e12c5d1SDavid du Colombier SHORT(fid);
3693e12c5d1SDavid du Colombier break;
3703e12c5d1SDavid du Colombier
3713e12c5d1SDavid du Colombier case Rwalk:
3723e12c5d1SDavid du Colombier case Rclwalk:
3733e12c5d1SDavid du Colombier SHORT(fid);
3743e12c5d1SDavid du Colombier LONG(qid.path);
3753e12c5d1SDavid du Colombier LONG(qid.vers);
3763e12c5d1SDavid du Colombier break;
3773e12c5d1SDavid du Colombier
3783e12c5d1SDavid du Colombier case Ropen:
3793e12c5d1SDavid du Colombier SHORT(fid);
3803e12c5d1SDavid du Colombier LONG(qid.path);
3813e12c5d1SDavid du Colombier LONG(qid.vers);
3823e12c5d1SDavid du Colombier break;
3833e12c5d1SDavid du Colombier
3843e12c5d1SDavid du Colombier case Rcreate:
3853e12c5d1SDavid du Colombier SHORT(fid);
3863e12c5d1SDavid du Colombier LONG(qid.path);
3873e12c5d1SDavid du Colombier LONG(qid.vers);
3883e12c5d1SDavid du Colombier break;
3893e12c5d1SDavid du Colombier
3903e12c5d1SDavid du Colombier case Rread:
3913e12c5d1SDavid du Colombier SHORT(fid);
3923e12c5d1SDavid du Colombier SHORT(count);
3933e12c5d1SDavid du Colombier p++; /* pad(1) */
3943e12c5d1SDavid du Colombier f->data = (char*)p; p += f->count;
3953e12c5d1SDavid du Colombier break;
3963e12c5d1SDavid du Colombier
3973e12c5d1SDavid du Colombier case Rwrite:
3983e12c5d1SDavid du Colombier SHORT(fid);
3993e12c5d1SDavid du Colombier SHORT(count);
4003e12c5d1SDavid du Colombier break;
4013e12c5d1SDavid du Colombier
4023e12c5d1SDavid du Colombier case Rclunk:
4033e12c5d1SDavid du Colombier SHORT(fid);
4043e12c5d1SDavid du Colombier break;
4053e12c5d1SDavid du Colombier
4063e12c5d1SDavid du Colombier case Rremove:
4073e12c5d1SDavid du Colombier SHORT(fid);
4083e12c5d1SDavid du Colombier break;
4093e12c5d1SDavid du Colombier
4103e12c5d1SDavid du Colombier case Rstat:
4113e12c5d1SDavid du Colombier SHORT(fid);
4123e12c5d1SDavid du Colombier STRING(stat, sizeof(f->stat));
4133e12c5d1SDavid du Colombier break;
4143e12c5d1SDavid du Colombier
4153e12c5d1SDavid du Colombier case Rwstat:
4163e12c5d1SDavid du Colombier SHORT(fid);
4173e12c5d1SDavid du Colombier break;
4183e12c5d1SDavid du Colombier }
4193e12c5d1SDavid du Colombier if((uchar*)ap+n == p)
4203e12c5d1SDavid du Colombier return n;
4213e12c5d1SDavid du Colombier return 0;
4223e12c5d1SDavid du Colombier }
423