summaryrefslogtreecommitdiff
path: root/src/unexsol.c
diff options
context:
space:
mode:
authorRichard M. Stallman <rms@gnu.org>2002-09-12 03:28:59 +0000
committerRichard M. Stallman <rms@gnu.org>2002-09-12 03:28:59 +0000
commitfdebad6415fe477394d2c0319e096ec623d33f8f (patch)
tree857c5fecfe6ab45e15764a7bf87407f2333b9062 /src/unexsol.c
parent75eb23f13fae2ba8fadc971abc4a06b37075f84c (diff)
downloademacs-fdebad6415fe477394d2c0319e096ec623d33f8f.tar.gz
Don't use report_file_error; do it by hand using dlerror.
Diffstat (limited to 'src/unexsol.c')
-rw-r--r--src/unexsol.c20
1 files changed, 17 insertions, 3 deletions
diff --git a/src/unexsol.c b/src/unexsol.c
index ff8a812f279..41ad95ef51c 100644
--- a/src/unexsol.c
+++ b/src/unexsol.c
@@ -10,8 +10,22 @@ 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);
+
+ /* System error messages are capitalized. Downcase the initial
+ unless it is followed by a slash. */
+ if (SREF (errstring, 1) != '/')
+ SSET (errstring, 0, DOWNCASE (SREF (errstring, 0)));
+
+ Fsignal (Qfile_error,
+ Fcons (build_string ("Cannot unexec"), Fcons (errstring, data)));
}