From 51926fab48d0fe68ce11dbca0fb58722e8a216c1 Mon Sep 17 00:00:00 2001 From: Janne Blomqvist Date: Wed, 2 Sep 2015 18:13:35 +0300 Subject: [PATCH] PR 67414 Handle newlocale failure 2015-09-02 Janne Blomqvist PR libfortran/67414 * runtime/error.c (gf_strerror): Handle newlocale() failure. From-SVN: r227406 --- libgfortran/ChangeLog | 5 +++++ libgfortran/runtime/error.c | 12 ++++++++++-- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/libgfortran/ChangeLog b/libgfortran/ChangeLog index a2ae060921d7..6c0e98b81c1a 100644 --- a/libgfortran/ChangeLog +++ b/libgfortran/ChangeLog @@ -1,3 +1,8 @@ +2015-09-02 Janne Blomqvist + + PR libfortran/67414 + * runtime/error.c (gf_strerror): Handle newlocale() failure. + 2015-08-28 James Greenhalgh * configure.ac: Define HAVE_FTRUNCATE for ARM/AArch64/SH newlib diff --git a/libgfortran/runtime/error.c b/libgfortran/runtime/error.c index 098231916aa2..92bd11819e63 100644 --- a/libgfortran/runtime/error.c +++ b/libgfortran/runtime/error.c @@ -221,8 +221,16 @@ gf_strerror (int errnum, #ifdef HAVE_STRERROR_L locale_t myloc = newlocale (LC_CTYPE_MASK | LC_MESSAGES_MASK, "", (locale_t) 0); - char *p = strerror_l (errnum, myloc); - freelocale (myloc); + char *p; + if (myloc) + { + p = strerror_l (errnum, myloc); + freelocale (myloc); + } + else + /* newlocale might fail e.g. due to running out of memory, fall + back to the simpler strerror. */ + p = strerror (errnum); return p; #elif defined(HAVE_STRERROR_R) #ifdef HAVE_USELOCALE