#include <XrdSysPlugin.hh>
Collaboration diagram for XrdSysPlugin:
Public Member Functions | |
void * | getPlugin (const char *pname, int optional=0) |
void * | getPlugin (const char *pname, int optional, bool global) |
void * | Persist () |
XrdSysPlugin (XrdSysError *erp, const char *path) | |
XrdSysPlugin (XrdSysError *erp, const char *path, const char *lname, XrdVersionInfo *vinf=0, int msgNum=-1) | |
XrdSysPlugin (char *ebuff, int eblen, const char *path, const char *lname, XrdVersionInfo *vinf=0, int msgNum=-1) | |
~XrdSysPlugin () | |
Destructor. | |
Static Public Member Functions | |
static bool | Preload (const char *path, char *ebuff=0, int eblen=0) |
static bool | VerCmp (XrdVersionInfo &vInf1, XrdVersionInfo &vInf2, bool noMsg=false) |
Private Types | |
cvBad = 0 | |
cvNone | |
cvMissing | |
cvClean | |
cvDirty | |
enum | cvResult { cvBad = 0, cvNone, cvMissing, cvClean, cvDirty } |
Private Member Functions | |
cvResult | badVersion (XrdVersionInfo &urInfo, char mmv, int majv, int minv) |
cvResult | chkVersion (XrdVersionInfo &urInfo, const char *pname, void *lh) |
void | Inform (const char *txt1, const char *txt2=0, const char *txt3=0, const char *txt4=0, const char *txt5=0, int noHush=0) |
cvResult | libMsg (const char *txt1, const char *txt2, const char *mSym=0) |
const char * | msgSuffix (const char *Word, char *buff, int bsz) |
Static Private Member Functions | |
static int | DLflags () |
static void * | Find (const char *libname) |
Private Attributes | |
XrdSysError * | eDest |
const char * | libName |
char * | libPath |
void * | libHandle |
XrdVersionInfo * | myInfo |
char * | eBuff |
int | eBLen |
int | msgCnt |
Static Private Attributes | |
static PLlist * | plList |
Classes | |
struct | PLlist |
enum XrdSysPlugin::cvResult [private] |
XrdSysPlugin::XrdSysPlugin | ( | XrdSysError * | erp, | |
const char * | path | |||
) | [inline] |
Constructor #1 (version number checking is not to be performed)
erp | -> error message object to display error messages. | |
path | -> path to the shared library containing a plug-in. If NULL the the executable image is searched for the plug-in. Storage must persist while this object is alive. |
XrdSysPlugin::XrdSysPlugin | ( | XrdSysError * | erp, | |
const char * | path, | |||
const char * | lname, | |||
XrdVersionInfo * | vinf = 0 , |
|||
int | msgNum = -1 | |||
) | [inline] |
Constructor #2 (version number checking may be performed)
erp | -> error message object to display error messages. | |
path | -> path to the shared library containing a plug-in. If NULL the the executable image is searched for the plug-in. Storage must persist while this object is alive. | |
lname | -> logical name of the plugin library (e.g. osslib) to be used in any error messages. Storage must persist while this object is alive. | |
vinf | -> permanent version information of the plug-in loader. If zero, then no version checking is performed. | |
msgNum | -> Number of times getPlugin() is to produce a version message for a loaded plugin. The default is always. |
XrdSysPlugin::XrdSysPlugin | ( | char * | ebuff, | |
int | eblen, | |||
const char * | path, | |||
const char * | lname, | |||
XrdVersionInfo * | vinf = 0 , |
|||
int | msgNum = -1 | |||
) | [inline] |
Constructor #3 (version number checking may be performed and any error is returned in a supplied buffer)
ebuff | -> buffer where eror message is to be placed. The mesage will always end with a null byte. | |
eblen | -> length of the supplied buffer, eBuff. | |
path | -> path to the shared library containing a plug-in. If NULL the the executable image is searched for the plug-in. Storage must persist while this object is alive. | |
lname | -> logical name of the plugin library (e.g. osslib) to be used in any error messages. Storage must persist while this object is alive. | |
vinf | -> permanent version information of the plug-in loader. If Zero, then no version checking is performed. | |
msgNum | -> Number of times getPlugin() is to produce a version message for a loaded plugin. The default is always. |
XrdSysPlugin::~XrdSysPlugin | ( | ) |
Destructor.
cvResult XrdSysPlugin::badVersion | ( | XrdVersionInfo & | urInfo, | |
char | mmv, | |||
int | majv, | |||
int | minv | |||
) | [private] |
cvResult XrdSysPlugin::chkVersion | ( | XrdVersionInfo & | urInfo, | |
const char * | pname, | |||
void * | lh | |||
) | [private] |
static int XrdSysPlugin::DLflags | ( | ) | [static, private] |
static void* XrdSysPlugin::Find | ( | const char * | libname | ) | [static, private] |
void* XrdSysPlugin::getPlugin | ( | const char * | pname, | |
int | optional, | |||
bool | global | |||
) |
Get the address of a plugin from a shared library, opening the plug-in shared library if not already open and optionally make the symbols global.
pname | the plug-in extern "C" symbolic name | |
optional | when 0 then issue error message when symbol isn't found. Otherwise, the mising symbol is treated as an error. When optional is greater than 1, the load message is suppressed. | |
global | when !0 then the symbols defined in the plug-in shared library are made available for symbol resolution of subsequently loaded libraries. |
void* XrdSysPlugin::getPlugin | ( | const char * | pname, | |
int | optional = 0 | |||
) |
Get the address of a plugin from a shared library, opening the plug-in shared library if not already open. Symbols in the library are local.
pname | the plug-in extern "C" symbolic name | |
optional | when 0 then issue error message when symbol isn't found. Otherwise, the mising symbol is treated as an error. |
void XrdSysPlugin::Inform | ( | const char * | txt1, | |
const char * | txt2 = 0 , |
|||
const char * | txt3 = 0 , |
|||
const char * | txt4 = 0 , |
|||
const char * | txt5 = 0 , |
|||
int | noHush = 0 | |||
) | [private] |
cvResult XrdSysPlugin::libMsg | ( | const char * | txt1, | |
const char * | txt2, | |||
const char * | mSym = 0 | |||
) | [private] |
const char* XrdSysPlugin::msgSuffix | ( | const char * | Word, | |
char * | buff, | |||
int | bsz | |||
) | [private] |
void* XrdSysPlugin::Persist | ( | ) | [inline] |
Make library persistent even when the plugin object is deleted. Note that if getPlugin() is called afterwards, the library will be re-opened!
static bool XrdSysPlugin::Preload | ( | const char * | path, | |
char * | ebuff = 0 , |
|||
int | eblen = 0 | |||
) | [static] |
Preload a shared library. This method is meant for those threading models that require libraries to be opened in the main thread (e.g. MacOS). This method is meant to be called before therads start and is not thread-safe.
path | -> to the library path, typically this should just be the library filename so that LD_LIBRARY_PATH is used to discover the directory path. This allows getPlugin() to properly match preloaded libraries. | |
ebuff | -> buffer where eror message is to be placed. The mesage will always end with a null byte. If no error buffer is supplied, any error messages are discarded. | |
eblen | -> length of the supplied buffer, eBuff. |
static bool XrdSysPlugin::VerCmp | ( | XrdVersionInfo & | vInf1, | |
XrdVersionInfo & | vInf2, | |||
bool | noMsg = false | |||
) | [static] |
Compare two versions for compatability, optionally printing a warning.
vInf1 | -> Version information for source. | |
vInf2 | -> Version information for target. | |
noMsg | -> If true, no error messages are written to stderr. |
int XrdSysPlugin::eBLen [private] |
char* XrdSysPlugin::eBuff [private] |
XrdSysError* XrdSysPlugin::eDest [private] |
void* XrdSysPlugin::libHandle [private] |
const char* XrdSysPlugin::libName [private] |
char* XrdSysPlugin::libPath [private] |
int XrdSysPlugin::msgCnt [private] |
XrdVersionInfo* XrdSysPlugin::myInfo [private] |
PLlist* XrdSysPlugin::plList [static, private] |