+
+static int pipewclose(void *pdata)
+{
+ struct pipe *p = pdata;
+
+ if(p->closed & 1) {
+ freepipe(p);
+ } else {
+ p->closed |= 2;
+ if(p->r)
+ resume(p->r, 0);
+ }
+ return(0);
+}
+
+void mtiopipe(FILE **read, FILE **write)
+{
+ struct pipe *p;
+
+ omalloc(p);
+ p->bufmax = 4096;
+ *read = funstdio(p, piperead, NULL, NULL, piperclose);
+ *write = funstdio(p, NULL, pipewrite, NULL, pipewclose);
+}