Index: runtime/bin/extensions_macos.cc |
diff --git a/runtime/bin/extensions_macos.cc b/runtime/bin/extensions_macos.cc |
index d81e670eef10218fe7bc68228faa4d0d88a9083c..edecb86b6f57bdbb6fe00111d6abe92a576ff1ef 100644 |
--- a/runtime/bin/extensions_macos.cc |
+++ b/runtime/bin/extensions_macos.cc |
@@ -3,12 +3,18 @@ |
// BSD-style license that can be found in the LICENSE file. |
#include "bin/extensions.h" |
+#include <dlfcn.h> |
-#include "include/dart_api.h" |
-#include "platform/assert.h" |
+void* Extensions::LoadExtensionLibrary(const char* library_name) { |
+ const char* strings[4] = { "./", library_name, ".so", NULL }; |
+ char* library_path = Concatenate(strings); |
+ void* lib_handle = dlopen(library_path, RTLD_LAZY); |
+ free(library_path); |
+ return lib_handle; |
+} |
-Dart_Handle Extensions::LoadExtension(const char* extension_url, |
- Dart_Handle parent_library) { |
- UNIMPLEMENTED(); |
- return NULL; |
+void* Extensions::ResolveSymbol(void* lib_handle, const char* symbol) { |
+ void* result = dlsym(lib_handle, symbol); |
+ if (dlerror() != NULL) return NULL; |
+ return result; |
} |