/* ******************************************************************************* * Copyright (c) 1996 Martin Poole * ******************************************************************************* ** ** WARNING !! WARNING !! WARNING !! WARNING !! WARNING !! WARNING !! ** ** Any changes to be made to this file should first be checked with ** mplib1 source control for library integrity. ** ** mplib1 source control can be reached at mplib1@quatermass.co.uk ** * * $Source: /home/cvs/cvsroot/onelan/onelan/src/mplib1/libsrc/bpo_attach.c,v $ * $Author: mpoole $ * $Date: 2002/10/07 09:37:36 $ * $Revision: 1.2 $ * ******************************************************************************* * * Change History * * $Log: bpo_attach.c,v $ * Revision 1.2 2002/10/07 09:37:36 mpoole * Initial checkin of mplib1-3.1.0 * * Revision 1.1 2002/10/07 09:36:52 mpoole * Initial checkin of mplib1-3.1.0 * * ******************************************************************************* */ #ident "$Header: /home/cvs/cvsroot/onelan/onelan/src/mplib1/libsrc/bpo_attach.c,v 1.2 2002/10/07 09:37:36 mpoole Exp $" /* ------------------------------------------------------------------ Include files ------------------------------------------------------------------ */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include /* ------------------------------------------------------------------ defines ------------------------------------------------------------------ */ static void *comms_hint=NULL; static int do_mmap=0; /* ------------------------------------------------------------------ Code starts here ------------------------------------------------------------------ */ void * get_comms_hint( void ) { return(comms_hint); } void * comms_shm_attach( const char *config_name, int flags ) { void *rv=NULL; mode_t priv; size_t msize; char *cfname,*cuname; if (flags & SODB_READ_CONFIG) { read_private_file( config_name, config_name ); } /* Now collect the variables needed to find everything */ do_mmap = get_private_flag( config_name, "COMMS_DO_MMAP" ); priv = (mode_t)get_private_int( config_name, "COMMS_PRIV" ); priv &= 0666; priv |= 0600; msize = (size_t)get_private_int( config_name, "COMMS_SIZE" ); if (msize<(size_t)32768) msize=(size_t)2000000; cfname = eval_private_default( config_name, "COMMS_FILENAME", NULL ); if (cfname==NULL || *cfname=='\0') return(rv); cuname = eval_private_default( config_name, "COMMS_USE_NAME", NULL ); if (cuname==NULL || *cuname=='\0') cuname = cfname; /* Now attach */ if (do_mmap) rv = Create_SODB_mmap_priv( cuname, cfname, msize, 0, SODB_USE_SHALLOC, priv ); else rv = Create_SODB_shm_priv( cuname, cfname, '\001', msize, SODB_USE_SHALLOC, priv ); comms_hint = rv; return(rv); } void comms_shm_detach( void ) { if (comms_hint) { if (do_mmap) Detach_SODB_mmap( comms_hint ); else Detach_SODB_shm( comms_hint ); comms_hint=NULL; } return; } /* -- End of File -- */