xref: /aosp_15_r20/external/cronet/base/scoped_native_library.cc (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1*6777b538SAndroid Build Coastguard Worker // Copyright 2011 The Chromium Authors
2*6777b538SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
3*6777b538SAndroid Build Coastguard Worker // found in the LICENSE file.
4*6777b538SAndroid Build Coastguard Worker 
5*6777b538SAndroid Build Coastguard Worker #include "base/scoped_native_library.h"
6*6777b538SAndroid Build Coastguard Worker 
7*6777b538SAndroid Build Coastguard Worker namespace base {
8*6777b538SAndroid Build Coastguard Worker 
Free(NativeLibrary library)9*6777b538SAndroid Build Coastguard Worker void NativeLibraryTraits::Free(NativeLibrary library) {
10*6777b538SAndroid Build Coastguard Worker   UnloadNativeLibrary(library);
11*6777b538SAndroid Build Coastguard Worker }
12*6777b538SAndroid Build Coastguard Worker 
13*6777b538SAndroid Build Coastguard Worker using BaseClass = ScopedGeneric<NativeLibrary, NativeLibraryTraits>;
14*6777b538SAndroid Build Coastguard Worker 
ScopedNativeLibrary()15*6777b538SAndroid Build Coastguard Worker ScopedNativeLibrary::ScopedNativeLibrary() : BaseClass(), error_() {}
16*6777b538SAndroid Build Coastguard Worker 
17*6777b538SAndroid Build Coastguard Worker ScopedNativeLibrary::~ScopedNativeLibrary() = default;
18*6777b538SAndroid Build Coastguard Worker 
ScopedNativeLibrary(NativeLibrary library)19*6777b538SAndroid Build Coastguard Worker ScopedNativeLibrary::ScopedNativeLibrary(NativeLibrary library)
20*6777b538SAndroid Build Coastguard Worker     : BaseClass(library), error_() {}
21*6777b538SAndroid Build Coastguard Worker 
ScopedNativeLibrary(const FilePath & library_path)22*6777b538SAndroid Build Coastguard Worker ScopedNativeLibrary::ScopedNativeLibrary(const FilePath& library_path)
23*6777b538SAndroid Build Coastguard Worker     : ScopedNativeLibrary() {
24*6777b538SAndroid Build Coastguard Worker   reset(LoadNativeLibrary(library_path, &error_));
25*6777b538SAndroid Build Coastguard Worker }
26*6777b538SAndroid Build Coastguard Worker 
ScopedNativeLibrary(ScopedNativeLibrary && scoped_library)27*6777b538SAndroid Build Coastguard Worker ScopedNativeLibrary::ScopedNativeLibrary(ScopedNativeLibrary&& scoped_library)
28*6777b538SAndroid Build Coastguard Worker     : BaseClass(scoped_library.release()), error_() {}
29*6777b538SAndroid Build Coastguard Worker 
GetFunctionPointer(const char * function_name) const30*6777b538SAndroid Build Coastguard Worker void* ScopedNativeLibrary::GetFunctionPointer(const char* function_name) const {
31*6777b538SAndroid Build Coastguard Worker   if (!is_valid())
32*6777b538SAndroid Build Coastguard Worker     return nullptr;
33*6777b538SAndroid Build Coastguard Worker   return GetFunctionPointerFromNativeLibrary(get(), function_name);
34*6777b538SAndroid Build Coastguard Worker }
35*6777b538SAndroid Build Coastguard Worker 
GetError() const36*6777b538SAndroid Build Coastguard Worker const NativeLibraryLoadError* ScopedNativeLibrary::GetError() const {
37*6777b538SAndroid Build Coastguard Worker   return &error_;
38*6777b538SAndroid Build Coastguard Worker }
39*6777b538SAndroid Build Coastguard Worker 
40*6777b538SAndroid Build Coastguard Worker }  // namespace base
41