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 */
9module core.sys.dragonflybsd.dlfcn;
10
11version (DragonFlyBSD):
12
13public import core.sys.posix.dlfcn;
14
15extern (C) nothrow @nogc @system:
16
17/*
18 * Request arguments for dlinfo().
19 */
20enum RTLD_DI_LINKMAP     = 2;    /* Obtain link map. */
21enum RTLD_DI_SERINFO     = 4;    /* Obtain search path info. */
22enum RTLD_DI_SERINFOSIZE = 5;    /*  ... query for required space. */
23enum RTLD_DI_ORIGIN      = 6;    /* Obtain object origin */
24enum RTLD_DI_MAX         = RTLD_DI_ORIGIN;
25
26/*
27 * Special handle arguments for dlsym()/dlinfo().
28 */
29enum RTLD_NEXT    = cast(void *)-1;    /* Search subsequent objects. */
30enum RTLD_DEFAULT = cast(void *)-2;    /* Use default search algorithm. */
31enum RTLD_SELF    = cast(void *)-3;    /* Search the caller itself. */
32
33/*
34 * Structures, returned by the RTLD_DI_SERINFO dlinfo() request.
35 */
36struct Dl_serpath {
37    char *          dls_name;       /* single search path entry */
38    uint            dls_flags;      /* path information */
39}
40
41struct 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 */
56struct __dlfunc_arg {
57    int     __dlfunc_dummy;
58}
59
60alias dlfunc_t = void function(__dlfunc_arg);
61
62/* XSI functions first. */
63extern(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
70void*    fdlopen(int, int);
71dlfunc_t dlfunc(void*, const(char)*);
72int      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);*/
80void*    dlvsym(void*, const(char)*, const(char)*);
81