diff options
author | Emmanuel Leblond <emmanuel.leblond@gmail.com> | 2017-10-16 00:19:31 +0200 |
---|---|---|
committer | Emmanuel Leblond <emmanuel.leblond@gmail.com> | 2017-10-16 08:16:37 +0200 |
commit | 9c1f6c5db684715ac9f386398a454a282ceb6c3f (patch) | |
tree | facde35d234e8f71b6f95425439e02c480189128 /modules/gdnative/nativescript/nativescript.cpp | |
parent | 0d0cb01f3385d512de0f91b0d73706a3380ec063 (diff) |
[Nativescript] fix crash when loading a library with missing godot_nativescript_init
Diffstat (limited to 'modules/gdnative/nativescript/nativescript.cpp')
-rw-r--r-- | modules/gdnative/nativescript/nativescript.cpp | 18 |
1 files changed, 12 insertions, 6 deletions
diff --git a/modules/gdnative/nativescript/nativescript.cpp b/modules/gdnative/nativescript/nativescript.cpp index 52379560b3..0b522c944e 100644 --- a/modules/gdnative/nativescript/nativescript.cpp +++ b/modules/gdnative/nativescript/nativescript.cpp @@ -1011,10 +1011,13 @@ void NativeScriptLanguage::init_library(const Ref<GDNativeLibrary> &lib) { void *proc_ptr; - gdn->get_symbol(_init_call_name, proc_ptr); - - ((void (*)(godot_string *))proc_ptr)((godot_string *)&lib_path); + Error err = gdn->get_symbol(_init_call_name, proc_ptr); + if (err != OK) { + ERR_PRINT(String("No " + _init_call_name + " in \"" + lib_path + "\" found").utf8().get_data()); + } else { + ((void (*)(godot_string *))proc_ptr)((godot_string *)&lib_path); + } } else { // already initialized. Nice. } @@ -1138,9 +1141,12 @@ void NativeReloadNode::_notification(int p_what) { // here the library registers all the classes and stuff. void *proc_ptr; - L->get()->get_symbol("godot_nativescript_init", proc_ptr); - - ((void (*)(void *))proc_ptr)((void *)&L->key()); + Error err = L->get()->get_symbol("godot_nativescript_init", proc_ptr); + if (err != OK) { + ERR_PRINT(String("No godot_nativescript_init in \"" + L->key() + "\" found").utf8().get_data()); + } else { + ((void (*)(void *))proc_ptr)((void *)&L->key()); + } for (Map<String, Set<NativeScript *> >::Element *U = NSL->library_script_users.front(); U; U = U->next()) { for (Set<NativeScript *>::Element *S = U->get().front(); S; S = S->next()) { |