Adds chaninfo()
[akaros.git] / kern / drivers / dev / pipe.c
index 5cb9ce3..46eaea4 100644 (file)
@@ -97,6 +97,7 @@ pipeattach(char *spec)
        memmove(p->pipedir, pipedir, sizeof(pipedir));
        kstrdup(&p->user, current->user);
        kref_init(&p->ref, pipe_release, 1);
+       qlock_init(&p->qlock);
 
        p->q[0] = qopen(pipealloc.pipeqsize, 0, 0, 0);
        if(p->q[0] == 0)
@@ -221,9 +222,9 @@ pipeopen(struct chan *c, int omode)
        Pipe *p;
 
        if(c->qid.type & QTDIR){
-               if(omode != OREAD)
-                       error(Ebadarg);
-               c->mode = omode;
+               if (!IS_RDONLY(omode))
+                       error("Can only open directories OREAD, mode is %o oct", omode);
+               c->mode = openmode(omode);
                c->flag |= COPEN;
                c->offset = 0;
                return c;
@@ -477,4 +478,6 @@ struct dev pipedevtab __devtab = {
        pipebwrite,
        devremove,
        pipewstat,
+       devpower,
+       devchaninfo,
 };