1 /** 2 * D header file for DragonFlyBSD 3 * 4 * Copyright: Copyright Martin Nowak 2012. 5 * License: $(WEB www.boost.org/LICENSE_1_0.txt, Boost License 1.0). 6 * Authors: Martin Nowak,Diederik de Groot(port:DragonFlyBSD) 7 * Copied: From core/sys/freebsd/sys 8 */ 9 module core.sys.dragonflybsd.dlfcn; 10 11 version (DragonFlyBSD): 12 13 public import core.sys.posix.dlfcn; 14 15 extern (C) nothrow @nogc @system: 16 17 /* 18 * Request arguments for dlinfo(). 19 */ 20 enum RTLD_DI_LINKMAP = 2; /* Obtain link map. */ 21 enum RTLD_DI_SERINFO = 4; /* Obtain search path info. */ 22 enum RTLD_DI_SERINFOSIZE = 5; /* ... query for required space. */ 23 enum RTLD_DI_ORIGIN = 6; /* Obtain object origin */ 24 enum RTLD_DI_MAX = RTLD_DI_ORIGIN; 25 26 /* 27 * Special handle arguments for dlsym()/dlinfo(). 28 */ 29 enum RTLD_NEXT = cast(void *)-1; /* Search subsequent objects. */ 30 enum RTLD_DEFAULT = cast(void *)-2; /* Use default search algorithm. */ 31 enum RTLD_SELF = cast(void *)-3; /* Search the caller itself. */ 32 33 /* 34 * Structures, returned by the RTLD_DI_SERINFO dlinfo() request. 35 */ 36 struct Dl_serpath { 37 char * dls_name; /* single search path entry */ 38 uint dls_flags; /* path information */ 39 } 40 41 struct Dl_serinfo { 42 size_t dls_size; /* total buffer size */ 43 uint dls_cnt; /* number of path entries */ 44 Dl_serpath[1] dls_serpath; /* there may be more than one */ 45 } 46 47 /*- 48 * The actual type declared by this typedef is immaterial, provided that 49 * it is a function pointer. Its purpose is to provide a return type for 50 * dlfunc() which can be cast to a function pointer type without depending 51 * on behavior undefined by the C standard, which might trigger a compiler 52 * diagnostic. We intentionally declare a unique type signature to force 53 * a diagnostic should the application not cast the return value of dlfunc() 54 * appropriately. 55 */ 56 struct __dlfunc_arg { 57 int __dlfunc_dummy; 58 } 59 60 alias dlfunc_t = void function(__dlfunc_arg); 61 62 /* XSI functions first. */ 63 extern(C) { 64 static assert(is(typeof(&dlclose) == int function(void*))); 65 static assert(is(typeof(&dlerror) == char* function())); 66 static assert(is(typeof(&dlopen) == void* function(const scope char*, int))); 67 static assert(is(typeof(&dlsym) == void* function(void*, const scope char*))); 68 } 69 70 void* fdlopen(int, int); 71 dlfunc_t dlfunc(void*, const(char)*); 72 int dlinfo(void*, int, void*); 73 /*void dllockinit(void* _context, 74 void* function(void* _context) _lock_create, 75 void function(void* _lock) _rlock_acquire, 76 void function(void* _lock) _wlock_acquire, 77 void function(void* _lock) _lock_release, 78 void function(void* _lock) _lock_destroy, 79 void function(void* _context) _context_destroy);*/ 80 void* dlvsym(void*, const(char)*, const(char)*);