fix potential error misreporting on a file-open failure

This commit is contained in:
Matthew Flatt 2018-03-03 10:02:12 -07:00
parent ea7f973102
commit 77028b9c95

View File

@ -3681,9 +3681,19 @@ static void filename_exn(char *name, char *msg, char *filename, int maybe_module
if (maybe_module_errno && scheme_last_error_is_racket(maybe_module_errno)) { if (maybe_module_errno && scheme_last_error_is_racket(maybe_module_errno)) {
char buffer[256]; char buffer[256];
int errkind, errid;
scheme_sprintf(buffer, sizeof(buffer)-1, "%R"); scheme_sprintf(buffer, sizeof(buffer)-1, "%R");
buffer[sizeof(buffer)-1] = 0; buffer[sizeof(buffer)-1] = 0;
/* Save errors, in case we don't raise missing-module */
errkind = rktio_get_last_error_kind(scheme_rktio);
errid = rktio_get_last_error(scheme_rktio);
maybe_raise_missing_module(name, filename, pre, rel, post, buffer); maybe_raise_missing_module(name, filename, pre, rel, post, buffer);
/* Restore error, which might have been changed by a scheduler action */
rktio_set_last_error(scheme_rktio, errkind, errid);
} }
scheme_raise_exn(MZEXN_FAIL_FILESYSTEM, scheme_raise_exn(MZEXN_FAIL_FILESYSTEM,