/*----------------------------------------------------------------------+*/ SPC_Setup_Synchronous_Terminator(void) /*----------------------------------------------------------------------+*/ { int pipes[2]; _DtSvcProcessLock(); if(write_terminator) { _DtSvcProcessUnlock(); return(TRUE); } if(pipe(pipes)<0) { SPC_Error(SPC_No_Pipe); _DtSvcProcessUnlock(); return(SPC_ERROR); } if((write_terminator=SPC_Alloc_Connection())==SPC_ERROR) { _DtSvcProcessUnlock(); return(SPC_ERROR); } SPC_Add_Connection(write_terminator); if((read_terminator=SPC_Alloc_Connection())==SPC_ERROR) { _DtSvcProcessUnlock(); return(SPC_ERROR); } SPC_Add_Connection(read_terminator); write_terminator->sid=pipes[WRITE_SIDE]; write_terminator->connected=TRUE; read_terminator->sid=pipes[READ_SIDE]; read_terminator->connected=TRUE; SPC_XtAddInput(NULL, &read_terminator->termination_id, read_terminator->sid, SPC_Conditional_Packet_Handler, SPC_Terminator); _DtSvcProcessUnlock(); return(TRUE); }
/*----------------------------------------------------------------------+*/ SPC_Connection_Ptr SPC_Make_Connection(XeString hostname) /*----------------------------------------------------------------------+*/ { /* Search for a connection to hostname, create one if none exists */ SPC_Connection_Ptr conn; /* Searching for connected host maintains only one connection per remote */ if(hostname && (conn=SPC_Lookup_Connection(hostname))) return(conn); /* Not found, so make one */ if((conn = SPC_Alloc_Connection())==SPC_ERROR) return(SPC_ERROR); if(hostname) strcpy(conn->hostname, hostname); SPC_Add_Connection(conn); return(conn); }