V10/ipc/libipc/ipcpath.c
#include "defs.h"
#include <signal.h>
#define CAT(x) if (x) for(cp=x;bp-buf<sizeof(buf)-1&&*cp;) *bp++=*cp++; *bp='\0'
/*
* Create an ipc path that starts in the /cs directory
*
* ipcpath("x", "d", "s") -> "/cs/d!x!s"
* ipcpath("x", "/d", "s") -> "/d!x!s"
* ipcpath("x!y", "d", "s") -> "/cs/x!y!s"
* ipcpath("x!y!z", "d", "s") -> "/cs/x!y!z"
* ipcpath("", "", "s") -> "/cs/s"
* ipcpath("x", "", "") -> "/cs/x"
*
* all other combinations are undefined
*/
char *
ipcpath(machine, defdialer, service)
char *machine;
char *defdialer;
char *service;
{
char buf[256];
static char buf2[sizeof(buf)+sizeof(CSROOT)];
char *bp, *bang1;
char *cp;
bp = buf;
if (machine!=NULL && *machine!='\0') {
if ((bang1=strchr(machine, '!'))==NULL){
if(defdialer!=NULL && *defdialer!='\0'){
CAT(defdialer);
CAT("!");
}
CAT(machine);
if (service!=NULL && *service!='\0') {
CAT("!");
CAT(service);
}
} else {
CAT(machine);
if (strchr(bang1+1, '!')==NULL && service!=NULL
&& *service!='\0') {
CAT("!");
CAT(service);
}
}
} else {
if (service!=NULL && *service!='\0') {
CAT(service);
}
}
if (*buf=='/')
*buf2 = '\0';
else
strcpy(buf2, CSROOT);
strcat(buf2, buf);
return buf2;
}