1ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved. 24a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch// Use of this source code is governed by a BSD-style license that can be 34a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch// found in the LICENSE file. 44a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 5ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/memory/scoped_native_library.h" 64a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 74a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdochnamespace base { 84a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 94a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben MurdochScopedNativeLibrary::ScopedNativeLibrary() : library_(NULL) { 104a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch} 114a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 124a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben MurdochScopedNativeLibrary::ScopedNativeLibrary(NativeLibrary library) 134a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch : library_(library) { 144a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch} 154a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 164a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben MurdochScopedNativeLibrary::ScopedNativeLibrary(const FilePath& library_path) { 17ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen library_ = base::LoadNativeLibrary(library_path, NULL); 184a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch} 194a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 204a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben MurdochScopedNativeLibrary::~ScopedNativeLibrary() { 214a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch if (library_) 224a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch base::UnloadNativeLibrary(library_); 234a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch} 244a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 254a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdochvoid* ScopedNativeLibrary::GetFunctionPointer( 264a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch const char* function_name) const { 274a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch if (!library_) 284a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch return NULL; 294a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch return base::GetFunctionPointerFromNativeLibrary(library_, function_name); 304a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch} 314a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 324a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdochvoid ScopedNativeLibrary::Reset(NativeLibrary library) { 334a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch if (library_) 344a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch base::UnloadNativeLibrary(library_); 354a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch library_ = library; 364a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch} 374a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 384a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben MurdochNativeLibrary ScopedNativeLibrary::Release() { 394a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch NativeLibrary result = library_; 404a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch library_ = NULL; 414a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch return result; 424a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch} 434a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 444a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch} // namespace base 45