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