Mercurial > octave
diff libinterp/corefcn/input.cc @ 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 | 00f796120a6d |
children | e201cf0c7360 |
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); } }