[Freeswitch-svn] [commit] r10215 - in freeswitch/trunk: src src/include w32/Library
Author: mikej Date: Fri Oct 31 17:53:07 2008 New Revision: 10215 Added: freeswitch/trunk/src/include/switch_dso.h freeswitch/trunk/src/switch_dso.c Modified: freeswitch/trunk/w32/Library/FreeSwitchCore.2008.vcproj Log: initial checkin of switch_dso. Added: freeswitch/trunk/src/include/switch_dso.h ============================================================================== --- (empty file) +++ freeswitch/trunk/src/include/switch_dso.h Fri Oct 31 17:53:07 2008 @@ -0,0 +1,53 @@ +/* + * Cross Platform dso/dll load abstraction + * Copyright(C) 2008 Michael Jerris + * + * You may opt to use, copy, modify, merge, publish, distribute and/or sell + * copies of the Software, and permit persons to whom the Software is + * furnished to do so. + * + * This work is provided under this license on an "as is" basis, without warranty of any kind, + * either expressed or implied, including, without limitation, warranties that the covered code + * is free of defects, merchantable, fit for a particular purpose or non-infringing. The entire + * risk as to the quality and performance of the covered code is with you. Should any covered + * code prove defective in any respect, you (not the initial developer or any other contributor) + * assume the cost of any necessary servicing, repair or correction. This disclaimer of warranty + * constitutes an essential part of this license. No use of any covered code is authorized hereunder + * except under this disclaimer. + * + */ + + +#ifndef _SWITCH_DSO_H +#define _SWITCH_DSO_H + +typedef void (*switch_func_ptr_t) (void); +#ifdef WIN32 +typedef HINSTANCE switch_dso_lib_t; +#else +typedef void * switch_dso_lib_t; +#endif +#ifdef WIN32 +typedef FARPROC switch_dso_func_t; +#else +typedef void * switch_dso_func_t; +#endif + +void switch_dso_destroy(switch_dso_lib_t *lib); +switch_dso_lib_t switch_dso_open(const char *path, int global, char **err); +switch_dso_func_t switch_dso_func_sym(switch_dso_lib_t lib, const char *sym, char **err); + + +#endif + +/* For Emacs: + * Local Variables: + * mode:c + * indent-tabs-mode:t + * tab-width:4 + * c-basic-offset:4 + * End: + * For VIM: + * vim:set softtabstop=4 shiftwidth=4 tabstop=4 + */ + Added: freeswitch/trunk/src/switch_dso.c ============================================================================== --- (empty file) +++ freeswitch/trunk/src/switch_dso.c Fri Oct 31 17:53:07 2008 @@ -0,0 +1,114 @@ +/* + * Cross Platform dso/dll load abstraction + * Copyright(C) 2008 Michael Jerris + * + * You may opt to use, copy, modify, merge, publish, distribute and/or sell + * copies of the Software, and permit persons to whom the Software is + * furnished to do so. + * + * This work is provided under this license on an "as is" basis, without warranty of any kind, + * either expressed or implied, including, without limitation, warranties that the covered code + * is free of defects, merchantable, fit for a particular purpose or non-infringing. The entire + * risk as to the quality and performance of the covered code is with you. Should any covered + * code prove defective in any respect, you (not the initial developer or any other contributor) + * assume the cost of any necessary servicing, repair or correction. This disclaimer of warranty + * constitutes an essential part of this license. No use of any covered code is authorized hereunder + * except under this disclaimer. + * + */ + +#include <switch.h> +#include "switch_dso.h" +#include <stdlib.h> +#include <string.h> + +#ifdef WIN32 + +void switch_dso_destroy(switch_dso_lib_t *lib) { + if (lib && *lib) { + FreeLibrary(*lib); + *lib = NULL; + } +} + +switch_dso_lib_t switch_dso_open(const char *path, int global, char **err) { + HINSTANCE lib; + + lib = LoadLibraryEx(path, NULL, 0); + + if (!lib) { + LoadLibraryEx(path, NULL, LOAD_WITH_ALTERED_SEARCH_PATH); + } + + if (!lib) { + DWORD error = GetLastError(); + *err = switch_mprintf("dll open error [%ul]\n", error); + } + + return lib; +} + +switch_dso_func_t switch_dso_func_sym(switch_dso_lib_t lib, const char *sym, char **err) { + FARPROC func = GetProcAddress(lib, sym); + if (!func) { + DWORD error = GetLastError(); + *err = switch_mprintf("dll sym error [%ul]\n", error); + } + return func; +} + +#else +/* +** {======================================================================== +** This is an implementation of loadlib based on the dlfcn interface. +** The dlfcn interface is available in Linux, SunOS, Solaris, IRIX, FreeBSD, +** NetBSD, AIX 4.2, HPUX 11, and probably most other Unix flavors, at least +** as an emulation layer on top of native functions. +** ========================================================================= +*/ + + +#include <dlfcn.h> + +void switch_dso_destroy(switch_dso_lib_t *lib) { + if (lib && *lib) { + dlclose(*lib); + *lib = NULL; + } +} + +switch_dso_lib_t switch_dso_open(const char *path, int global, char **err) { + void *lib; + + if (global) { + lib = dlopen(path, RTLD_NOW | RTLD_GLOBAL); + } else { + lib = dlopen(path, RTLD_NOW | RTLD_LOCAL); + } + + if (lib == NULL) { + *err = strdup(dlerror()); + } + return lib; +} + +void *switch_dso_func_sym(switch_dso_lib_t lib, const char *sym, char **err) { + void *func = dlsym(lib, sym); + if (!func) { + *err = strdup(dlerror()); + } + return func; +} +#endif +/* }====================================================== */ + +/* For Emacs: + * Local Variables: + * mode:c + * indent-tabs-mode:t + * tab-width:4 + * c-basic-offset:4 + * End: + * For VIM: + * vim:set softtabstop=4 shiftwidth=4 tabstop=4 + */ Modified: freeswitch/trunk/w32/Library/FreeSwitchCore.2008.vcproj ============================================================================== --- freeswitch/trunk/w32/Library/FreeSwitchCore.2008.vcproj (original) +++ freeswitch/trunk/w32/Library/FreeSwitchCore.2008.vcproj Fri Oct 31 17:53:07 2008 @@ -409,6 +409,10 @@ </FileConfiguration> </File> <File + RelativePath="..\..\src\switch_dso.c" + > + </File> + <File RelativePath="..\..\src\switch_event.c" > </File> @@ -571,6 +575,10 @@ > </File> <File + RelativePath="..\..\src\include\switch_dso.h" + > + </File> + <File RelativePath="..\..\src\include\switch_event.h" > </File>
participants (1)
-
Freeswitch SVN