Avi Drissman | e4622aa | 2022-09-08 20:36:06 | [diff] [blame] | 1 | // Copyright 2011 The Chromium Authors |
[email protected] | 709a847e | 2010-11-10 01:16:11 | [diff] [blame] | 2 | // Use of this source code is governed by a BSD-style license that can be |
3 | // found in the LICENSE file. | ||||
4 | |||||
[email protected] | e078590 | 2011-05-19 23:34:17 | [diff] [blame] | 5 | #include "base/scoped_native_library.h" |
[email protected] | 709a847e | 2010-11-10 01:16:11 | [diff] [blame] | 6 | |
7 | namespace base { | ||||
8 | |||||
Cliff Smolinsky | f395bef | 2019-04-12 23:45:44 | [diff] [blame] | 9 | void NativeLibraryTraits::Free(NativeLibrary library) { |
10 | UnloadNativeLibrary(library); | ||||
11 | } | ||||
12 | |||||
13 | using BaseClass = ScopedGeneric<NativeLibrary, NativeLibraryTraits>; | ||||
14 | |||||
Peter Kasting | 811504a7 | 2025-01-09 03:18:50 | [diff] [blame] | 15 | ScopedNativeLibrary::ScopedNativeLibrary() = default; |
Cliff Smolinsky | f395bef | 2019-04-12 23:45:44 | [diff] [blame] | 16 | |
17 | ScopedNativeLibrary::~ScopedNativeLibrary() = default; | ||||
[email protected] | 709a847e | 2010-11-10 01:16:11 | [diff] [blame] | 18 | |
19 | ScopedNativeLibrary::ScopedNativeLibrary(NativeLibrary library) | ||||
Peter Kasting | 811504a7 | 2025-01-09 03:18:50 | [diff] [blame] | 20 | : BaseClass(library) {} |
Cliff Smolinsky | f395bef | 2019-04-12 23:45:44 | [diff] [blame] | 21 | |
22 | ScopedNativeLibrary::ScopedNativeLibrary(const FilePath& library_path) | ||||
23 | : ScopedNativeLibrary() { | ||||
24 | reset(LoadNativeLibrary(library_path, &error_)); | ||||
[email protected] | 709a847e | 2010-11-10 01:16:11 | [diff] [blame] | 25 | } |
26 | |||||
Cliff Smolinsky | f395bef | 2019-04-12 23:45:44 | [diff] [blame] | 27 | ScopedNativeLibrary::ScopedNativeLibrary(ScopedNativeLibrary&& scoped_library) |
Peter Kasting | 811504a7 | 2025-01-09 03:18:50 | [diff] [blame] | 28 | : BaseClass(scoped_library.release()) {} |
[email protected] | 709a847e | 2010-11-10 01:16:11 | [diff] [blame] | 29 | |
Cliff Smolinsky | f395bef | 2019-04-12 23:45:44 | [diff] [blame] | 30 | void* ScopedNativeLibrary::GetFunctionPointer(const char* function_name) const { |
Peter Kasting | 134ef9af | 2024-12-28 02:30:09 | [diff] [blame] | 31 | if (!is_valid()) { |
Ivan Kotenkov | a16212a5 | 2017-11-08 12:37:33 | [diff] [blame] | 32 | return nullptr; |
Peter Kasting | 134ef9af | 2024-12-28 02:30:09 | [diff] [blame] | 33 | } |
Cliff Smolinsky | f395bef | 2019-04-12 23:45:44 | [diff] [blame] | 34 | return GetFunctionPointerFromNativeLibrary(get(), function_name); |
[email protected] | 709a847e | 2010-11-10 01:16:11 | [diff] [blame] | 35 | } |
36 | |||||
Cliff Smolinsky | f395bef | 2019-04-12 23:45:44 | [diff] [blame] | 37 | const NativeLibraryLoadError* ScopedNativeLibrary::GetError() const { |
38 | return &error_; | ||||
[email protected] | 709a847e | 2010-11-10 01:16:11 | [diff] [blame] | 39 | } |
40 | |||||
41 | } // namespace base |