OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "base/native_library.h" | 5 #include "base/native_library.h" |
6 | 6 |
7 #include <dlfcn.h> | 7 #include <dlfcn.h> |
8 | 8 |
9 #include "base/files/file_path.h" | 9 #include "base/files/file_path.h" |
10 #include "base/logging.h" | 10 #include "base/logging.h" |
11 #include "base/strings/utf_string_conversions.h" | 11 #include "base/strings/utf_string_conversions.h" |
12 #include "base/threading/thread_restrictions.h" | 12 #include "base/threading/thread_restrictions.h" |
13 | 13 |
14 namespace base { | 14 namespace base { |
15 | 15 |
16 std::string NativeLibraryLoadError::ToString() const { | 16 std::string NativeLibraryLoadError::ToString() const { |
17 return message; | 17 return message; |
18 } | 18 } |
19 | 19 |
20 // static | 20 // static |
21 NativeLibrary LoadNativeLibrary(const FilePath& library_path, | 21 NativeLibrary LoadNativeLibrary(const FilePath& library_path, |
22 NativeLibraryLoadError* error) { | 22 NativeLibraryLoadError* error) { |
23 // dlopen() opens the file off disk. | 23 // dlopen() opens the file off disk. |
24 base::ThreadRestrictions::AssertIOAllowed(); | 24 ThreadRestrictions::AssertIOAllowed(); |
25 | 25 |
26 // We deliberately do not use RTLD_DEEPBIND. For the history why, please | 26 // We deliberately do not use RTLD_DEEPBIND. For the history why, please |
27 // refer to the bug tracker. Some useful bug reports to read include: | 27 // refer to the bug tracker. Some useful bug reports to read include: |
28 // http://crbug.com/17943, http://crbug.com/17557, http://crbug.com/36892, | 28 // http://crbug.com/17943, http://crbug.com/17557, http://crbug.com/36892, |
29 // and http://crbug.com/40794. | 29 // and http://crbug.com/40794. |
30 void* dl = dlopen(library_path.value().c_str(), RTLD_LAZY); | 30 void* dl = dlopen(library_path.value().c_str(), RTLD_LAZY); |
31 if (!dl && error) | 31 if (!dl && error) |
32 error->message = dlerror(); | 32 error->message = dlerror(); |
33 | 33 |
34 return dl; | 34 return dl; |
35 } | 35 } |
36 | 36 |
37 // static | 37 // static |
38 void UnloadNativeLibrary(NativeLibrary library) { | 38 void UnloadNativeLibrary(NativeLibrary library) { |
39 int ret = dlclose(library); | 39 int ret = dlclose(library); |
40 if (ret < 0) { | 40 if (ret < 0) { |
41 DLOG(ERROR) << "dlclose failed: " << dlerror(); | 41 DLOG(ERROR) << "dlclose failed: " << dlerror(); |
42 NOTREACHED(); | 42 NOTREACHED(); |
43 } | 43 } |
44 } | 44 } |
45 | 45 |
46 // static | 46 // static |
47 void* GetFunctionPointerFromNativeLibrary(NativeLibrary library, | 47 void* GetFunctionPointerFromNativeLibrary(NativeLibrary library, |
48 const char* name) { | 48 StringPiece name) { |
49 return dlsym(library, name); | 49 return dlsym(library, name.data()); |
50 } | 50 } |
51 | 51 |
52 // static | 52 // static |
53 string16 GetNativeLibraryName(const string16& name) { | 53 string16 GetNativeLibraryName(StringPiece16 name) { |
54 return ASCIIToUTF16("lib") + name + ASCIIToUTF16(".so"); | 54 return ASCIIToUTF16("lib") + name.as_string() + ASCIIToUTF16(".so"); |
55 } | 55 } |
56 | 56 |
57 } // namespace base | 57 } // namespace base |
OLD | NEW |