
1: /* 2: * dl_dlopen.c - dlopen() interface 3: * 4: * Copyright (c) 2000-2007 Shiro Kawai <shiro@acm.org> 5: * 6: * Redistribution and use in source and binary forms, with or without 7: * modification, are permitted provided that the following conditions 8: * are met: 9: * 10: * 1. Redistributions of source code must retain the above copyright 11: * notice, this list of conditions and the following disclaimer. 12: * 13: * 2. Redistributions in binary form must reproduce the above copyright 14: * notice, this list of conditions and the following disclaimer in the 15: * documentation and/or other materials provided with the distribution. 16: * 17: * 3. Neither the name of the authors nor the names of its contributors 18: * may be used to endorse or promote products derived from this 19: * software without specific prior written permission. 20: * 21: * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 22: * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 23: * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 24: * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 25: * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 26: * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED 27: * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 28: * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 29: * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 30: * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 31: * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 32: * 33: * $Id: dl_dlopen.c,v 1.3 2007/03/02 07:39:13 shirok Exp $ 34: */ 35: 36: /* This file is included in load.c */ 37: 38: #include <dlfcn.h> 39: 40: static void *dl_open(const char *path) 41: { 42: int flags = RTLD_NOW|RTLD_GLOBAL; 43: return dlopen(path, flags); 44: } 45: 46: static const char *dl_error(void) 47: { 48: return dlerror(); 49: } 50: 51: static ScmDynLoadInitFn dl_sym(void *handle, const char *name) 52: { 53: return (ScmDynLoadInitFn)dlsym(handle, name); 54: } 55: 56: static void dl_close(void *handle) 57: { 58: dlclose(handle); 59: }