From d021ddb220345dd93b251dc6ba50caf116c590c5 Mon Sep 17 00:00:00 2001 From: Kaz Kylheku Date: Sun, 27 May 2018 08:18:46 -0700 Subject: bugfix: fatal exception on missing .txr_history. The new abstraction layer used by linenoise throws exceptions, but linenoise excpects a null pointer when a file open fails. * parser.c (lino_open, lino_open8): Catch error exceptions and convert to null return, using new macros to reduce repetitive coding. * unwind.h (ignerr_begin, ignerr_end): New macros. --- parser.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) (limited to 'parser.c') diff --git a/parser.c b/parser.c index ddd72fd1..ca9fd3bc 100644 --- a/parser.c +++ b/parser.c @@ -1497,14 +1497,22 @@ static mem_t *lino_open(const wchar_t *name_in, lino_file_mode_t mode_in) { val name = string(name_in); val mode = static_str(lino_mode_str[mode_in]); - return coerce(mem_t *, open_file(name, mode)); + mem_t *ret = 0; + ignerr_begin; + ret = coerce(mem_t *, open_file(name, mode)); + ignerr_end; + return ret; } static mem_t *lino_open8(const char *name_in, lino_file_mode_t mode_in) { val name = string_utf8(name_in); val mode = static_str(lino_mode_str[mode_in]); - return coerce(mem_t *, open_file(name, mode)); + mem_t *ret = 0; + ignerr_begin; + ret = coerce(mem_t *, open_file(name, mode)); + ignerr_end; + return ret; } static mem_t *lino_fdopen(int fd, lino_file_mode_t mode_in) -- cgit v1.2.3