diff options
Diffstat (limited to 'src/backend/utils')
-rw-r--r-- | src/backend/utils/adt/pg_locale.c | 19 |
1 files changed, 13 insertions, 6 deletions
diff --git a/src/backend/utils/adt/pg_locale.c b/src/backend/utils/adt/pg_locale.c index 4a2fd28f475..7112dea0e1e 100644 --- a/src/backend/utils/adt/pg_locale.c +++ b/src/backend/utils/adt/pg_locale.c @@ -239,7 +239,9 @@ check_locale(int category, const char *value) /* set the locale with setlocale, to see if it accepts it. */ ret = (setlocale(category, value) != NULL); - setlocale(category, save); /* assume this won't fail */ + /* restore old value. */ + if (!setlocale(category, save)) + elog(WARNING, "failed to restore old locale"); pfree(save); return ret; @@ -499,13 +501,15 @@ PGLC_localeconv(void) /* Try to restore internal settings */ if (save_lc_monetary) { - setlocale(LC_MONETARY, save_lc_monetary); + if (!setlocale(LC_MONETARY, save_lc_monetary)) + elog(WARNING, "failed to restore old locale"); pfree(save_lc_monetary); } if (save_lc_numeric) { - setlocale(LC_NUMERIC, save_lc_numeric); + if (!setlocale(LC_NUMERIC, save_lc_numeric)) + elog(WARNING, "failed to restore old locale"); pfree(save_lc_numeric); } @@ -513,7 +517,8 @@ PGLC_localeconv(void) /* Try to restore internal ctype settings */ if (save_lc_ctype) { - setlocale(LC_CTYPE, save_lc_ctype); + if (!setlocale(LC_CTYPE, save_lc_ctype)) + elog(WARNING, "failed to restore old locale"); pfree(save_lc_ctype); } #endif @@ -674,7 +679,8 @@ cache_locale_time(void) /* try to restore internal settings */ if (save_lc_time) { - setlocale(LC_TIME, save_lc_time); + if (!setlocale(LC_TIME, save_lc_time)) + elog(WARNING, "failed to restore old locale"); pfree(save_lc_time); } @@ -682,7 +688,8 @@ cache_locale_time(void) /* try to restore internal ctype settings */ if (save_lc_ctype) { - setlocale(LC_CTYPE, save_lc_ctype); + if (!setlocale(LC_CTYPE, save_lc_ctype)) + elog(WARNING, "failed to restore old locale"); pfree(save_lc_ctype); } #endif |