commit - 1190a7aa7a1dba5964688c4bb8ee09fc8930c488
commit + b5c7be2fd69c027f5de9772e117885cb1c89f907
blob - dc46cb570af12133d5ac7afba50ea8ced0ec4b70
blob + 58323b6ba1cdef0f07cada6e20d9062136512d63
--- include/fcall.h
+++ include/fcall.h
/* 9P2000.u extensions */
int errornum; /* Rerror */
+ char *extension; /* Tcreate */
} Fcall;
blob - 01a9f86dc9afae0af388ae0af98ab5999742f983
blob + 06c95f55387c6e287abefc28fa4f83dc4e93dc7b
--- src/cmd/9pserve.c
+++ src/cmd/9pserve.c
}
m->afid->ref++;
break;
+ case Tcreate:
+ if(dotu && !c->dotu && (m->tx.perm&(DMSYMLINK|DMDEVICE|DMNAMEDPIPE|DMSOCKET))){
+ err(m, "unsupported file type");
+ continue;
+ }
+ goto caseTopen;
case Topenfd:
if(m->tx.mode&~(OTRUNC|3)){
err(m, "bad openfd mode");
m->tx.type = Topen;
m->tpkt[4] = Topen;
/* fall through */
- case Tcreate:
+ caseTopen:
case Topen:
case Tclunk:
case Tread:
blob - 23b688ab36d98764716f4af4d75828493135e93d
blob + 3df83da2d38a93ca04a58e78258d4c69b8268d08
--- src/lib9/convM2S.c
+++ src/lib9/convM2S.c
p += BIT32SZ;
f->mode = GBIT8(p);
p += BIT8SZ;
+ if(dotu)
+ p = gstring(p, ep, &f->extension);
break;
case Tread:
blob - b59d95b4143700c700f29936839ba2aefc98fcc0
blob + b01a022165555faa63555defc0575a03e5bad9eb
--- src/lib9/convS2M.c
+++ src/lib9/convS2M.c
n += stringsz(f->name);
n += BIT32SZ;
n += BIT8SZ;
+ if(dotu)
+ n += stringsz(f->extension);
break;
case Tread:
p += BIT32SZ;
PBIT8(p, f->mode);
p += BIT8SZ;
+ if(dotu)
+ p = pstring(p, f->extension);
break;
case Tread: