Mercurial > octave
changeset 26880:6c25c714bec4 stable
Improve error checking for iconv_open.
* inputcc (input_system::mfile_encoding): Check return value of iconv_open
before checking errno.
author | Markus Mützel <markus.muetzel@gmx.de> |
---|---|
date | Mon, 11 Mar 2019 20:48:07 +0100 |
parents | 3c7c5b7c3044 |
children | 4af9840f9ce5 |
files | libinterp/corefcn/input.cc |
diffstat | 1 files changed, 12 insertions(+), 9 deletions(-) [+] |
line wrap: on
line diff
--- a/libinterp/corefcn/input.cc Mon Mar 11 11:48:47 2019 -0700 +++ b/libinterp/corefcn/input.cc Mon Mar 11 20:48:07 2019 +0100 @@ -517,22 +517,25 @@ m_mfile_encoding.end (), m_mfile_encoding.begin (), ::tolower); - std::string codepage = (m_mfile_encoding.compare ("system") == 0) + std::string encoding = (m_mfile_encoding.compare ("system") == 0) ? octave_locale_charset_wrapper () : m_mfile_encoding; - // Check for valid codepage. + // Check for valid encoding name. void *codec - = octave_iconv_open_wrapper (codepage.c_str (), "utf-8"); + = octave_iconv_open_wrapper (encoding.c_str (), "utf-8"); - if (errno == EINVAL) + if (codec == reinterpret_cast<void *> (-1)) { m_mfile_encoding = saved_encoding; - - error ("__mfile_encoding__: conversion from codepage '%s' not supported", - codepage.c_str ()); + if (errno == EINVAL) + error ("__mfile_encoding__: conversion from encoding '%s' " + "not supported", encoding.c_str ()); + else + error ("__mfile_encoding__: error %d opening encoding '%s'.", + errno, encoding.c_str ()); } - - octave_iconv_close_wrapper (codec); + else + octave_iconv_close_wrapper (codec); } }