Bug 1442275 - Implement a path charset agnostic wrapper for PR_LoadLibraryWithFlags. r?froydnj draft
authorMasatoshi Kimura <VYV03354@nifty.ne.jp>
Tue, 24 Apr 2018 00:31:53 +0900
changeset 791080 b16cf6543c2fc4bdcb688479563a75d048451d78
parent 791070 ce588e44f41599808a830db23d190d1ca474a781
child 791081 9155cc62101da835424735c2f18f59f6cac5ddb6
push id108682
push userVYV03354@nifty.ne.jp
push dateThu, 03 May 2018 12:46:41 +0000
reviewersfroydnj
bugs1442275
milestone61.0a1
Bug 1442275 - Implement a path charset agnostic wrapper for PR_LoadLibraryWithFlags. r?froydnj MozReview-Commit-ID: 5rjmcv4kz9x
mfbt/SharedLibrary.h
mfbt/moz.build
new file mode 100644
--- /dev/null
+++ b/mfbt/SharedLibrary.h
@@ -0,0 +1,47 @@
+/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* vim: set ts=8 sts=2 et sw=2 tw=80: */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+/* Path charset agnostic wrappers for prlink.h. */
+
+#ifndef mozilla_SharedLibrary_h
+#define mozilla_SharedLibrary_h
+
+#ifdef MOZILLA_INTERNAL_API
+
+#include "prlink.h"
+#include "mozilla/Char16.h"
+
+namespace mozilla {
+
+//
+// Load the specified library.
+//
+// @param aPath  path to the library
+// @param aFlags takes PR_LD_* flags (see prlink.h)
+//
+inline PRLibrary*
+#ifdef XP_WIN
+LoadLibraryWithFlags(char16ptr_t aPath, PRUint32 aFlags = 0)
+#else
+LoadLibraryWithFlags(const char* aPath, PRUint32 aFlags = 0)
+#endif
+{
+  PRLibSpec libSpec;
+#ifdef XP_WIN
+  libSpec.type = PR_LibSpec_PathnameU;
+  libSpec.value.pathname_u = aPath;
+#else
+  libSpec.type = PR_LibSpec_Pathname;
+  libSpec.value.pathname = aPath;
+#endif
+  return PR_LoadLibraryWithFlags(libSpec, aFlags);
+}
+
+}  /* namespace mozilla */
+
+#endif /* MOZILLA_INTERNAL_API */
+
+#endif /* mozilla_SharedLibrary_h */
--- a/mfbt/moz.build
+++ b/mfbt/moz.build
@@ -77,16 +77,17 @@ EXPORTS.mozilla = [
     'ResultExtensions.h',
     'ReverseIterator.h',
     'RollingMean.h',
     'Saturate.h',
     'Scoped.h',
     'ScopeExit.h',
     'SegmentedVector.h',
     'SHA1.h',
+    'SharedLibrary.h',
     'SmallPointerArray.h',
     'Span.h',
     'SplayTree.h',
     'Sprintf.h',
     'StaticAnalysisFunctions.h',
     'TaggedAnonymousMemory.h',
     'TemplateLib.h',
     'TextUtils.h',