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