Annotation of researchv10no/ipc/mgrs/4.3gate/ipcproto.c, revision 1.1.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.