mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-05-20 19:50:24 +02:00
Fix error reporting in 'load-thunk-from-memory'.
Previously 'load-thunk-from-memory' would often throw to 'system-error' based on a stale value in 'errno', leading to incorrect error messages. * libguile/loader.c (load_thunk_from_memory): Set 'errno' to 0 before jumping to cleanup in the ABORT preprocessor macro, and also in the case when 'process_dynamic_segment' reports an error.
This commit is contained in:
parent
ff2adb04cb
commit
9fbb367256
1 changed files with 6 additions and 3 deletions
|
@ -1,5 +1,5 @@
|
|||
/* Copyright (C) 2001, 2009, 2010, 2011, 2012
|
||||
* 2013, 2014, 2015, 2017 Free Software Foundation, Inc.
|
||||
* 2013, 2014, 2015, 2017, 2018 Free Software Foundation, Inc.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public License
|
||||
|
@ -341,7 +341,7 @@ process_dynamic_segment (char *base, Elf_Phdr *dyn_phdr,
|
|||
return NULL;
|
||||
}
|
||||
|
||||
#define ABORT(msg) do { err_msg = msg; goto cleanup; } while (0)
|
||||
#define ABORT(msg) do { err_msg = msg; errno = 0; goto cleanup; } while (0)
|
||||
|
||||
static SCM
|
||||
load_thunk_from_memory (char *data, size_t len, int is_read_only)
|
||||
|
@ -460,7 +460,10 @@ load_thunk_from_memory (char *data, size_t len, int is_read_only)
|
|||
|
||||
if ((err_msg = process_dynamic_segment (data, &ph[dynamic_segment],
|
||||
&init, &entry, &frame_maps)))
|
||||
{
|
||||
errno = 0; /* not an OS error */
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
if (scm_is_true (init))
|
||||
scm_call_0 (init);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue