aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/fcall.h1
-rw-r--r--src/cmd/9pserve.c8
-rw-r--r--src/lib9/convM2S.c2
-rw-r--r--src/lib9/convS2M.c4
4 files changed, 14 insertions, 1 deletions
diff --git a/include/fcall.h b/include/fcall.h
index dc46cb57..58323b6b 100644
--- a/include/fcall.h
+++ b/include/fcall.h
@@ -44,6 +44,7 @@ struct Fcall
/* 9P2000.u extensions */
int errornum; /* Rerror */
+ char *extension; /* Tcreate */
} Fcall;
diff --git a/src/cmd/9pserve.c b/src/cmd/9pserve.c
index 01a9f86d..06c95f55 100644
--- a/src/cmd/9pserve.c
+++ b/src/cmd/9pserve.c
@@ -449,6 +449,12 @@ connthread(void *arg)
}
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");
@@ -458,7 +464,7 @@ connthread(void *arg)
m->tx.type = Topen;
m->tpkt[4] = Topen;
/* fall through */
- case Tcreate:
+ caseTopen:
case Topen:
case Tclunk:
case Tread:
diff --git a/src/lib9/convM2S.c b/src/lib9/convM2S.c
index 23b688ab..3df83da2 100644
--- a/src/lib9/convM2S.c
+++ b/src/lib9/convM2S.c
@@ -161,6 +161,8 @@ convM2Su(uchar *ap, uint nap, Fcall *f, int dotu)
p += BIT32SZ;
f->mode = GBIT8(p);
p += BIT8SZ;
+ if(dotu)
+ p = gstring(p, ep, &f->extension);
break;
case Tread:
diff --git a/src/lib9/convS2M.c b/src/lib9/convS2M.c
index b59d95b4..b01a0221 100644
--- a/src/lib9/convS2M.c
+++ b/src/lib9/convS2M.c
@@ -102,6 +102,8 @@ sizeS2Mu(Fcall *f, int dotu)
n += stringsz(f->name);
n += BIT32SZ;
n += BIT8SZ;
+ if(dotu)
+ n += stringsz(f->extension);
break;
case Tread:
@@ -287,6 +289,8 @@ convS2Mu(Fcall *f, uchar *ap, uint nap, int dotu)
p += BIT32SZ;
PBIT8(p, f->mode);
p += BIT8SZ;
+ if(dotu)
+ p = pstring(p, f->extension);
break;
case Tread: