Annotation of researchv10no/ipc/libipc/ipcpath.c, revision 1.1

1.1     ! root        1: #include "defs.h"
        !             2: #include <signal.h>
        !             3: 
        !             4: #define CAT(x) if (x) for(cp=x;bp-buf<sizeof(buf)-1&&*cp;) *bp++=*cp++; *bp='\0'
        !             5: 
        !             6: /*
        !             7:  *     Create an ipc path that starts in the /cs directory
        !             8:  *
        !             9:  *     ipcpath("x", "d", "s") -> "/cs/d!x!s"
        !            10:  *     ipcpath("x", "/d", "s") -> "/d!x!s"
        !            11:  *     ipcpath("x!y", "d", "s") -> "/cs/x!y!s"
        !            12:  *     ipcpath("x!y!z", "d", "s") -> "/cs/x!y!z"
        !            13:  *     ipcpath("", "", "s") -> "/cs/s"
        !            14:  *     ipcpath("x", "", "") -> "/cs/x"
        !            15:  *
        !            16:  *     all other combinations are undefined
        !            17:  */
        !            18: char *
        !            19: ipcpath(machine, defdialer, service)
        !            20:        char *machine;
        !            21:        char *defdialer;
        !            22:        char *service;
        !            23: {
        !            24:        char buf[256];
        !            25:        static char buf2[sizeof(buf)+sizeof(CSROOT)];
        !            26:        char *bp, *bang1;
        !            27:        char *cp;
        !            28: 
        !            29:        bp = buf;
        !            30:        if (machine!=NULL && *machine!='\0') {
        !            31:                if ((bang1=strchr(machine, '!'))==NULL){
        !            32:                        if(defdialer!=NULL && *defdialer!='\0'){
        !            33:                                CAT(defdialer);
        !            34:                                CAT("!");
        !            35:                        }
        !            36:                        CAT(machine);
        !            37:                        if (service!=NULL && *service!='\0') {
        !            38:                                CAT("!");
        !            39:                                CAT(service);
        !            40:                        }
        !            41:                } else {
        !            42:                        CAT(machine);
        !            43:                        if (strchr(bang1+1, '!')==NULL && service!=NULL
        !            44:                        && *service!='\0') {
        !            45:                                CAT("!");
        !            46:                                CAT(service);
        !            47:                        }
        !            48:                }
        !            49:        } else {
        !            50:                if (service!=NULL && *service!='\0') {
        !            51:                        CAT(service);
        !            52:                }
        !            53:        }
        !            54:        if (*buf=='/')
        !            55:                *buf2 = '\0';
        !            56:        else
        !            57:                strcpy(buf2, CSROOT);
        !            58:        strcat(buf2, buf);
        !            59:        return buf2;
        !            60: }

unix.superglobalmegacorp.com

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