/* $CoreSDI: modarch.c,v 1.18 2001/10/13 00:49:22 claudio Exp $ */ /* * Copyright (c) 2000, 2001, Core SDI S.A., Argentina * All rights reserved * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. Neither name of the Core SDI S.A. nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef WIN32 #include #endif #ifdef __linux__ #include #endif #ifndef WIN32 #include #endif #include #include #include #include #include "sysdep.h" #include "log.h" #include "packet.h" #include "resource.h" #include "modtypes.h" #include "modules.h" /* * load_module(): * Load dynamic library (.so or .dll) and return a handle to it; * on error NULL is returned and message logged. */ void * load_module(const char *modname) { void *mod; #ifndef WIN32 mod = dlopen(modname, RTLD_LAZY); if (mod == NULL) log_err("Can't load module: %s.", dlerror()); #else mod = LoadLibrary(modname); if (mod == NULL) log_err("Can't load '%s': %d.", modname, GetLastError()); #endif /* WIN32 */ return (mod); } /* * load_function(): * Load symbol from specified library; * on error NULL is returned and, if printerr != 0, message is logged. */ void * load_function(void *handle, const char *name, int printerr) { void *symbol; if (handle == NULL) log_err("Can't load symbol '%s': %s.", name, strerror(EINVAL)); else { #ifndef WIN32 symbol = dlsym(handle, name); if (symbol != NULL || !printerr) return (symbol); log_err("Can't load symbol '%s': %s.", name, dlerror()); #else symbol = GetProcAddress(handle, name); if (symbol != NULL || !printerr) return (symbol); log_err("Can't load symbol '%s': %d.", name, GetLastError()); #endif /* WIN32 */ } return (NULL); }