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 */
10module core.sys.netbsd.dlfcn;
11
12public import core.sys.posix.dlfcn;
13
14version (NetBSD):
15extern (C):
16nothrow:
17@nogc:
18
19enum __BSD_VISIBLE = true;
20
21/*
22 * Request arguments for dlinfo().
23 */
24enum RTLD_DI_LINKMAP     = 3;    /* Obtain link map. */
25enum RTLD_DI_SERINFO     = 5;    /* Obtain search path info. */
26enum RTLD_DI_SERINFOSIZE = 6;    /*  ... query for required space. */
27enum RTLD_DI_ORIGIN      = 7;    /* Obtain object origin */
28enum RTLD_DI_MAX         = RTLD_DI_ORIGIN;
29
30/*
31 * Special handle arguments for dlsym()/dlinfo().
32 */
33enum RTLD_NEXT    = cast(void *)-1;    /* Search subsequent objects. */
34enum RTLD_DEFAULT = cast(void *)-2;    /* Use default search algorithm. */
35enum RTLD_SELF    = cast(void *)-3;    /* Search the caller itself. */
36
37static 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. */
70extern(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
77static if (__BSD_VISIBLE)
78{
79    int      dlinfo(void*, int, void*);
80    void*    dlvsym(void*, const(char)*, const(char)*);
81}
82