Annotation of lucent/sys/src/9/port/devdup.c, revision 1.1

1.1     ! root        1: #include       "u.h"
        !             2: #include       "../port/lib.h"
        !             3: #include       "mem.h"
        !             4: #include       "dat.h"
        !             5: #include       "fns.h"
        !             6: #include       "../port/error.h"
        !             7: 
        !             8: #include       "devtab.h"
        !             9: 
        !            10: 
        !            11: int
        !            12: dupgen(Chan *c, Dirtab *tab, int ntab, int s, Dir *dp)
        !            13: {
        !            14:        char buf[8];
        !            15:        Fgrp *fgrp = u->p->fgrp;
        !            16:        Chan *f;
        !            17:        static int perm[] = { 0400, 0200, 0600, 0 };
        !            18: 
        !            19:        USED(tab);
        !            20:        USED(ntab);
        !            21:        if(s >= NFD)
        !            22:                return -1;
        !            23:        if((f=fgrp->fd[s]) == 0)
        !            24:                return 0;
        !            25:        sprint(buf, "%ld", s);
        !            26:        devdir(c, (Qid){s, 0}, buf, 0, eve, perm[f->mode&3], dp);
        !            27:        return 1;
        !            28: }
        !            29: 
        !            30: void
        !            31: dupinit(void)
        !            32: {
        !            33: }
        !            34: 
        !            35: void
        !            36: dupreset(void)
        !            37: {
        !            38: }
        !            39: 
        !            40: Chan *
        !            41: dupattach(char *spec)
        !            42: {
        !            43:        return devattach('d', spec);
        !            44: }
        !            45: 
        !            46: Chan *
        !            47: dupclone(Chan *c, Chan *nc)
        !            48: {
        !            49:        return devclone(c, nc);
        !            50: }
        !            51: 
        !            52: int
        !            53: dupwalk(Chan *c, char *name)
        !            54: {
        !            55:        return devwalk(c, name, (Dirtab *)0, 0, dupgen);
        !            56: }
        !            57: 
        !            58: void
        !            59: dupstat(Chan *c, char *db)
        !            60: {
        !            61:        devstat(c, db, (Dirtab *)0, 0L, dupgen);
        !            62: }
        !            63: 
        !            64: Chan *
        !            65: dupopen(Chan *c, int omode)
        !            66: {
        !            67:        Chan *f;
        !            68: 
        !            69:        if(c->qid.path == CHDIR){
        !            70:                if(omode != 0)
        !            71:                        error(Eisdir);
        !            72:                c->mode = 0;
        !            73:                c->flag |= COPEN;
        !            74:                c->offset = 0;
        !            75:                return c;
        !            76:        }
        !            77:        fdtochan(c->qid.path, openmode(omode), 0, 0);   /* error check only */
        !            78:        f = u->p->fgrp->fd[c->qid.path];
        !            79:        close(c);
        !            80:        incref(f);
        !            81:        if(omode & OCEXEC)
        !            82:                f->flag |= CCEXEC;
        !            83:        return f;
        !            84: }
        !            85: 
        !            86: void
        !            87: dupcreate(Chan *c, char *name, int omode, ulong perm)
        !            88: {
        !            89:        USED(c, name, omode, perm);
        !            90:        error(Eperm);
        !            91: }
        !            92: 
        !            93: void
        !            94: dupremove(Chan *c)
        !            95: {
        !            96:        USED(c);
        !            97:        error(Eperm);
        !            98: }
        !            99: 
        !           100: void
        !           101: dupwstat(Chan *c, char *dp)
        !           102: {
        !           103:        USED(c);
        !           104:        USED(dp);
        !           105:        error(Egreg);
        !           106: }
        !           107: 
        !           108: void
        !           109: dupclose(Chan *c)
        !           110: {
        !           111:        USED(c);
        !           112: }
        !           113: 
        !           114: long
        !           115: dupread(Chan *c, void *va, long n, ulong offset)
        !           116: {
        !           117:        char *a = va;
        !           118: 
        !           119:        USED(offset);
        !           120:        if(c->qid.path != CHDIR)
        !           121:                panic("dupread");
        !           122:        return devdirread(c, a, n, (Dirtab *)0, 0L, dupgen);
        !           123: }
        !           124: 
        !           125: long
        !           126: dupwrite(Chan *c, void *va, long n, ulong offset)
        !           127: {
        !           128:        USED(c, va, n, offset);
        !           129:        panic("dupwrite");
        !           130:        return 0;               /* not reached */
        !           131: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.