summaryrefslogtreecommitdiff
path: root/src/emacs-module.c
diff options
context:
space:
mode:
authorPhilipp Stephani <phst@google.com>2017-06-04 19:28:50 +0200
committerPhilipp Stephani <phst@google.com>2017-06-04 19:50:51 +0200
commitd37201722e2151df1f6b6fa1e2f33b5f91e27e03 (patch)
tree57d9436130f86cf2cf1f81b9e70369ffd00a16fc /src/emacs-module.c
parent27445a82f04ff848993821de1596923441859838 (diff)
downloademacs-d37201722e2151df1f6b6fa1e2f33b5f91e27e03.tar.gz
Use more specific errors for module load failure
* src/emacs-module.c (syms_of_module): Add more specific error symbols. (Fmodule_load): Use them.
Diffstat (limited to 'src/emacs-module.c')
-rw-r--r--src/emacs-module.c36
1 files changed, 32 insertions, 4 deletions
diff --git a/src/emacs-module.c b/src/emacs-module.c
index 187a620cc08..f2efc83d257 100644
--- a/src/emacs-module.c
+++ b/src/emacs-module.c
@@ -626,15 +626,15 @@ DEFUN ("module-load", Fmodule_load, Smodule_load, 1, 1, 0,
CHECK_STRING (file);
handle = dynlib_open (SSDATA (file));
if (!handle)
- error ("Cannot load file %s: %s", SDATA (file), dynlib_error ());
+ xsignal2 (Qmodule_open_failed, file, build_string (dynlib_error ()));
gpl_sym = dynlib_sym (handle, "plugin_is_GPL_compatible");
if (!gpl_sym)
- error ("Module %s is not GPL compatible", SDATA (file));
+ xsignal1 (Qmodule_not_gpl_compatible, file);
module_init = (emacs_init_function) dynlib_func (handle, "emacs_module_init");
if (!module_init)
- error ("Module %s does not have an init function.", SDATA (file));
+ xsignal1 (Qmissing_module_init_function, file);
struct emacs_runtime_private rt; /* Includes the public emacs_env. */
struct emacs_env_private priv;
@@ -652,7 +652,7 @@ DEFUN ("module-load", Fmodule_load, Smodule_load, 1, 1, 0,
{
if (FIXNUM_OVERFLOW_P (r))
xsignal0 (Qoverflow_error);
- xsignal2 (Qmodule_load_failed, file, make_number (r));
+ xsignal2 (Qmodule_init_failed, file, make_number (r));
}
return Qt;
@@ -999,6 +999,34 @@ syms_of_module (void)
listn (CONSTYPE_PURE, 2, Qinvalid_module_call, Qerror));
Fput (Qinvalid_module_call, Qerror_message,
build_pure_c_string ("Invalid module call"));
+ DEFSYM (Qmodule_open_failed, "module-open-failed");
+ Fput (Qmodule_open_failed, Qerror_conditions,
+ listn (CONSTYPE_PURE, 3,
+ Qmodule_open_failed, Qmodule_load_failed, Qerror));
+ Fput (Qmodule_open_failed, Qerror_message,
+ build_pure_c_string ("Module could not be opened"));
+
+ DEFSYM (Qmodule_not_gpl_compatible, "module-not-gpl-compatible");
+ Fput (Qmodule_not_gpl_compatible, Qerror_conditions,
+ listn (CONSTYPE_PURE, 3,
+ Qmodule_not_gpl_compatible, Qmodule_load_failed, Qerror));
+ Fput (Qmodule_not_gpl_compatible, Qerror_message,
+ build_pure_c_string ("Module is not GPL compatible"));
+
+ DEFSYM (Qmissing_module_init_function, "missing-module-init-function");
+ Fput (Qmissing_module_init_function, Qerror_conditions,
+ listn (CONSTYPE_PURE, 3,
+ Qmissing_module_init_function, Qmodule_load_failed, Qerror));
+ Fput (Qmissing_module_init_function, Qerror_message,
+ build_pure_c_string ("Module does not export an "
+ "initialization function"));
+
+ DEFSYM (Qmodule_init_failed, "module-init-failed");
+ Fput (Qmodule_init_failed, Qerror_conditions,
+ listn (CONSTYPE_PURE, 3,
+ Qmodule_init_failed, Qmodule_load_failed, Qerror));
+ Fput (Qmodule_init_failed, Qerror_message,
+ build_pure_c_string ("Module initialization failed"));
DEFSYM (Qinvalid_arity, "invalid-arity");
Fput (Qinvalid_arity, Qerror_conditions,