]> code.delx.au - gnu-emacs/blobdiff - src/unexsol.c
MAINTAINERS: Add myself for ERC and tq.el
[gnu-emacs] / src / unexsol.c
index ff8a812f27948ab1d8f7f79d9263effdfd583a9a..9f919faedc0cbdf9befe6ea5a7ac419012747702 100644 (file)
@@ -5,13 +5,28 @@
 #include <dlfcn.h>
 
 #include "lisp.h"
+#include "buffer.h"
+#include "charset.h"
+#include "coding.h"
 
 int
 unexec (char *new_name, char *old_name, unsigned int data_start,
         unsigned int bss_start, unsigned int entry_address)
 {
-  if (dldump (0, new_name, RTLD_MEMORY))
-    report_file_error ("Cannot unexec", Fcons (build_string (new_name), Qnil));
+  Lisp_Object data;
+  Lisp_Object errstring;
 
-  return 0;
+  if (! dldump (0, new_name, RTLD_MEMORY))
+    return 0;
+
+  data = Fcons (build_string (new_name), Qnil);
+  synchronize_system_messages_locale ();
+  errstring = code_convert_string_norecord (build_string (dlerror ()),
+                                           Vlocale_coding_system, 0);
+
+  xsignal (Qfile_error,
+          Fcons (build_string ("Cannot unexec"), Fcons (errstring, data)));
 }
+
+/* arch-tag: d8ff72b3-8198-4011-8ef5-011b12027f59
+   (do not change this comment) */