@@ -1046,16 +1046,35 @@ show_archive_json(const char *instance_name, uint32 xlog_seg_size,
10461046 appendPQExpBuffer (buf , "%lu" , tlinfo -> size );
10471047
10481048 json_add_key (buf , "zratio" , json_level );
1049+
10491050 // forcing comma-based floating point representation
1050- locale_t newloc = newlocale (LC_NUMERIC_MASK , "POSIX" , (locale_t )0 );
1051- locale_t saveloc = uselocale (newloc );
1051+ locale_t saveloc ;
1052+ #ifdef HAVE_USELOCALE
1053+ locale_t newloc = newlocale (LC_NUMERIC_MASK , "C" , (locale_t )0 );
1054+ saveloc = uselocale (newloc );
1055+ #else
1056+ #ifdef HAVE__CONFIGTHREADLOCALE
1057+ locale_t oldthreadlocale = _configthreadlocale (_ENABLE_PER_THREAD_LOCALE );
1058+ #endif
1059+ saveloc = setlocale (LC_NUMERIC , NULL );
1060+ setlocale (LC_NUMERIC , "C" );
1061+ #endif
10521062 if (tlinfo -> size != 0 )
10531063 zratio = ((float )xlog_seg_size * tlinfo -> n_xlog_files ) / tlinfo -> size ;
10541064 appendPQExpBuffer (buf , "%.2f" , zratio );
1065+
10551066 // restoring previous locale
1067+ #ifdef HAVE_USELOCALE
10561068 if (saveloc != (locale_t )0 )
10571069 uselocale (saveloc );
10581070 freelocale (newloc );
1071+ #else
1072+ setlocale (LC_NUMERIC , saveloc );
1073+ #ifdef HAVE__CONFIGTHREADLOCALE
1074+ if (oldthreadlocale != -1 )
1075+ _configthreadlocale (oldthreadlocale );
1076+ #endif
1077+ #endif
10591078
10601079 if (tlinfo -> closest_backup != NULL )
10611080 snprintf (tmp_buf , lengthof (tmp_buf ), "%s" ,
0 commit comments