OLD | NEW |
| (Empty) |
1 // Copyright 2010 The Native Client Authors. All rights reserved. | |
2 // Use of this source code is governed by a BSD-style license that can | |
3 // be found in the LICENSE file. | |
4 | |
5 #include "native_client/src/trusted/plugin/dylib_unittest.h" | |
6 | |
7 #include <stdio.h> | |
8 | |
9 #if NACL_WINDOWS | |
10 DylibHandle DylibOpen(const char* lib_path) { | |
11 return LoadLibrary(lib_path); | |
12 } | |
13 | |
14 bool DylibClose(DylibHandle dl_handle) { | |
15 return FreeLibrary(dl_handle) == TRUE; | |
16 } | |
17 | |
18 SymbolHandle GetSymbolHandle(DylibHandle dl_handle, const char* name) { | |
19 return reinterpret_cast<SymbolHandle>(GetProcAddress(dl_handle, name)); | |
20 } | |
21 #else | |
22 DylibHandle DylibOpen(const char* lib_path) { | |
23 // By using RTLD_NOW we check that all symbols are resolved before the | |
24 // dlopen completes, or it fails. | |
25 return dlopen(lib_path, RTLD_NOW | RTLD_LOCAL); | |
26 } | |
27 | |
28 bool DylibClose(DylibHandle dl_handle) { | |
29 return dlclose(dl_handle) == 0; | |
30 } | |
31 | |
32 SymbolHandle GetSymbolHandle(DylibHandle dl_handle, const char* name) { | |
33 void* sym_handle = dlsym(dl_handle, name); | |
34 char* error_string = dlerror(); | |
35 if (sym_handle == NULL || error_string != NULL) { | |
36 fprintf(stderr, "Couldn't get symbol %s: %s\n", name, error_string); | |
37 sym_handle = NULL; | |
38 } | |
39 return reinterpret_cast<SymbolHandle>(sym_handle); | |
40 } | |
41 #endif | |
OLD | NEW |