From 6511490f21c165911949c1703a3969434264d31d Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Wed, 29 Mar 2017 01:20:52 +0000 Subject: [PATCH] Improve error reporting for dl functions --- runtime.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/runtime.c b/runtime.c index 56690a9c..b998c144 100644 --- a/runtime.c +++ b/runtime.c @@ -5629,23 +5629,24 @@ double MRG32k3a (double seed) /** Dynamic loading */ void Cyc_import_shared_object(void *data, object cont, object filename, object entry_pt_fnc) { + char buffer[256]; void *handle; function_type entry_pt; Cyc_check_str(data, filename); Cyc_check_str(data, entry_pt_fnc); handle = dlopen(string_str(filename), RTLD_GLOBAL | RTLD_LAZY); if (handle == NULL) { - //make_string(s, dlerror()); - fprintf(stderr, "%s\n", dlerror()); - Cyc_rt_raise2(data, "Unable to import library", filename); + snprintf(buffer, 256, "%s", dlerror()); + make_string(s, buffer); + Cyc_rt_raise2(data, "Unable to import library", &s); } dlerror(); /* Clear any existing error */ entry_pt = (function_type) dlsym(handle, string_str(entry_pt_fnc)); if (entry_pt == NULL) { - //make_string(s, dlerror()); - fprintf(stderr, "%s\n", dlerror()); - Cyc_rt_raise2(data, "Unable to load symbol", entry_pt_fnc); + snprintf(buffer, 256, "%s, %s, %s", string_str(filename), string_str(entry_pt_fnc), dlerror()); + make_string(s, buffer); + Cyc_rt_raise2(data, "Unable to load symbol", &s); } mclosure1(clo, entry_pt, cont); entry_pt(data, 0, &clo, &clo);