Annotation of researchv10no/ipc/mgrs/4.3gate/ipcproto.c, revision 1.1

1.1     ! root        1: #include "ipc.h"
        !             2: 
        !             3: /*
        !             4:  *  Read the connection info.  If an error occurs, ip->reply and ip->conn are
        !             5:  *  closed.
        !             6:  */
        !             7: int
        !             8: _info_read(fd, ip)
        !             9:        int fd;
        !            10:        ipcinfo *ip;
        !            11: {
        !            12:        static char b[BUFLEN];
        !            13:        char *f[8];
        !            14:        int n;
        !            15: 
        !            16:        n=read(fd, b, sizeof(b));
        !            17:        if (n <= 0) 
        !            18:                return _ipcabort(errno, "error reading request", ip);
        !            19:        b[n] = '\0';
        !            20:        setfields("\n");
        !            21:        if (getfields(b, f, 8)!=8)
        !            22:                return _ipcabort(EINVAL, "protocol botch", ip);
        !            23:        ip->myname = f[0];
        !            24:        ip->name = f[1];
        !            25:        ip->param = f[2];
        !            26:        ip->machine = f[3];
        !            27:        ip->flags = atoi(f[5]);
        !            28: 
        !            29:        /* supply a system name */
        !            30:        if (ip->uid!=ROOTUID || ip->machine[0]=='\0')
        !            31:                ip->machine = "";
        !            32: 
        !            33:        /* supply a user name */
        !            34:        if (ip->uid==ROOTUID && *(f[4])!='\0')
        !            35:                ip->user = f[4];
        !            36: 
        !            37:        /* supply uid/gid cruft */
        !            38:        if (ip->uid==ROOTUID && atoi(f[6])!=-1) {
        !            39:                ip->uid = atoi(f[6]);
        !            40:                ip->gid = atoi(f[7]);
        !            41:        }
        !            42:        return 0;
        !            43: }
        !            44: 
        !            45: /*
        !            46:  *  Send a reply to a connection request
        !            47:  */
        !            48: _reply_write(fd, no, str)
        !            49:        int fd;
        !            50:        int no;
        !            51:        char *str;
        !            52: {
        !            53:        char b[BUFLEN];
        !            54:        int n;
        !            55: 
        !            56:        if (str==NULL)
        !            57:                str = "";
        !            58:        sprintf(b, "%d\n%s\n", no, str);
        !            59:        n = strlen(b);
        !            60:        if (write(fd, b, n)!=n)
        !            61:                return -1;
        !            62:        return 0;
        !            63: }
        !            64: 
        !            65: /*
        !            66:  *  Get a reply to a connection request.
        !            67:  */
        !            68: int
        !            69: _reply_read(fd)
        !            70:        int fd;
        !            71: {
        !            72:        static char b[BUFLEN];
        !            73:        char *f[2];
        !            74:        char *ptr;
        !            75:        int n;
        !            76: 
        !            77:        while((n=read(fd, b, sizeof(b)))<0 && errno==EINTR)
        !            78:                ;
        !            79:        if (n <= 0) 
        !            80:                return _ipcabort(errno, "error reading request", NULLINFO);
        !            81:        b[n] = '\0';
        !            82:        parselines(b, f, 2);
        !            83:        errno = atoi(f[0]);
        !            84:        if ((ptr=strchr(f[1], '\n'))!=NULL)
        !            85:                *ptr = '\0';
        !            86:        if (errno!=0)
        !            87:                errstr = f[1];
        !            88:        else
        !            89:                ipcname = f[1];
        !            90:        return 0;
        !            91: }

unix.superglobalmegacorp.com

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