-
Notifications
You must be signed in to change notification settings - Fork 18
Expand file tree
/
Copy pathdlfcn_compat.h
More file actions
37 lines (34 loc) · 1.64 KB
/
dlfcn_compat.h
File metadata and controls
37 lines (34 loc) · 1.64 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
/*
* Copyright (C) 2021 Stefano Moioli <smxdev4@gmail.com>
* This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software.
* Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions:
* 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
* 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
* 3. This notice may not be removed or altered from any source distribution.
*/
#ifndef __DLFCN_COMPAT_H
#define __DLFCN_COMPAT_H
#include "config.h"
#include "ezinject_util.h"
#if defined(EZ_TARGET_WINDOWS)
# include <windows.h>
# define LIB_HANDLE HMODULE
# define LIB_OPEN(path) LoadLibraryA(path)
# define LIB_GETSYM(handle, sym) (void *)GetProcAddress(handle, sym)
# define LIB_CLOSE(handle) FreeLibrary(handle)
# define LIB_ERROR() "dlopen failure"
# define RTLD_LAZY 0
# define RTLD_NOW 0
# define RTLD_GLOBAL 0
// $TODO
#elif defined(EZ_TARGET_POSIX)
# include <dlfcn.h>
# define LIB_HANDLE void *
# define LIB_OPEN(path) dlopen(path, RTLD_LAZY | RTLD_GLOBAL)
# define LIB_GETSYM(handle, sym) code_data(dlsym(handle, sym), CODE_DATA_DEREF)
# define LIB_CLOSE(handle) dlclose(handle)
# define LIB_ERROR() dlerror()
#else
#error "Unsupported platform"
#endif
#endif