Use the locale's decimal separator for times as seconds and fraction.

We use it when printing *other* seconds-and-fraction values, as we're
just using %f, so we should use it consistently.  If you don't want
commas as decimal separators, you presumably don't want them anywhere;
if you want to standardize the way numbers are shown, set the locale to
the C locale.

This addresses one of the two problems mentioned in bug 12500; there may
be other places in the Wireshark suite where we should use the locale's
decimal separator in times.

Change-Id: I41f1c44d12ebf0f46ff678c977a955d09831b0cf
Ping-Bug: 12500
Reviewed-on: https://code.wireshark.org/review/15787
Reviewed-by: Guy Harris <guy@alum.mit.edu>
daniel/osmux
Guy Harris 2016-06-08 18:12:48 -07:00
parent 6ec6bebf7c
commit 078ab458a6
1 changed files with 34 additions and 15 deletions

View File

@ -225,6 +225,7 @@ typedef struct _capture_info {
GArray *idb_info_strings; /* array of IDB info strings */
} capture_info;
static char *decimal_point;
static void
enable_all_infos(void)
@ -323,36 +324,41 @@ absolute_time_string(nstime_t *timer, int tsprecision, capture_info *cf_info)
case WTAP_TSPREC_DSEC:
g_snprintf(time_string_buf, sizeof time_string_buf,
"%lu.%01d",
"%lu%s%01d",
(unsigned long)timer->secs,
decimal_point,
timer->nsecs / 100000000);
break;
case WTAP_TSPREC_CSEC:
g_snprintf(time_string_buf, sizeof time_string_buf,
"%lu.%02d",
"%lu%s%02d",
(unsigned long)timer->secs,
decimal_point,
timer->nsecs / 10000000);
break;
case WTAP_TSPREC_MSEC:
g_snprintf(time_string_buf, sizeof time_string_buf,
"%lu.%03d",
"%lu%s%03d",
(unsigned long)timer->secs,
decimal_point,
timer->nsecs / 1000000);
break;
case WTAP_TSPREC_USEC:
g_snprintf(time_string_buf, sizeof time_string_buf,
"%lu.%06d",
"%lu%s%06d",
(unsigned long)timer->secs,
decimal_point,
timer->nsecs / 1000);
break;
case WTAP_TSPREC_NSEC:
g_snprintf(time_string_buf, sizeof time_string_buf,
"%lu.%09d",
"%lu%s%09d",
(unsigned long)timer->secs,
decimal_point,
timer->nsecs);
break;
@ -384,61 +390,66 @@ absolute_time_string(nstime_t *timer, int tsprecision, capture_info *cf_info)
case WTAP_TSPREC_DSEC:
g_snprintf(time_string_buf, sizeof time_string_buf,
"%04d-%02d-%02d %02d:%02d:%02d.%01d",
"%04d-%02d-%02d %02d:%02d:%02d%s%01d",
ti_tm->tm_year + 1900,
ti_tm->tm_mon + 1,
ti_tm->tm_mday,
ti_tm->tm_hour,
ti_tm->tm_min,
ti_tm->tm_sec,
decimal_point,
timer->nsecs / 100000000);
break;
case WTAP_TSPREC_CSEC:
g_snprintf(time_string_buf, sizeof time_string_buf,
"%04d-%02d-%02d %02d:%02d:%02d.%02d",
"%04d-%02d-%02d %02d:%02d:%02d%s%02d",
ti_tm->tm_year + 1900,
ti_tm->tm_mon + 1,
ti_tm->tm_mday,
ti_tm->tm_hour,
ti_tm->tm_min,
ti_tm->tm_sec,
decimal_point,
timer->nsecs / 10000000);
break;
case WTAP_TSPREC_MSEC:
g_snprintf(time_string_buf, sizeof time_string_buf,
"%04d-%02d-%02d %02d:%02d:%02d.%03d",
"%04d-%02d-%02d %02d:%02d:%02d%s%03d",
ti_tm->tm_year + 1900,
ti_tm->tm_mon + 1,
ti_tm->tm_mday,
ti_tm->tm_hour,
ti_tm->tm_min,
ti_tm->tm_sec,
decimal_point,
timer->nsecs / 1000000);
break;
case WTAP_TSPREC_USEC:
g_snprintf(time_string_buf, sizeof time_string_buf,
"%04d-%02d-%02d %02d:%02d:%02d.%06d",
"%04d-%02d-%02d %02d:%02d:%02d%s%06d",
ti_tm->tm_year + 1900,
ti_tm->tm_mon + 1,
ti_tm->tm_mday,
ti_tm->tm_hour,
ti_tm->tm_min,
ti_tm->tm_sec,
decimal_point,
timer->nsecs / 1000);
break;
case WTAP_TSPREC_NSEC:
g_snprintf(time_string_buf, sizeof time_string_buf,
"%04d-%02d-%02d %02d:%02d:%02d.%09d",
"%04d-%02d-%02d %02d:%02d:%02d%s%09d",
ti_tm->tm_year + 1900,
ti_tm->tm_mon + 1,
ti_tm->tm_mday,
ti_tm->tm_hour,
ti_tm->tm_min,
ti_tm->tm_sec,
decimal_point,
timer->nsecs);
break;
@ -476,8 +487,9 @@ relative_time_string(nstime_t *timer, int tsprecision, capture_info *cf_info, gb
case WTAP_TSPREC_DSEC:
g_snprintf(time_string_buf, sizeof time_string_buf,
"%lu.%01d%s%s",
"%lu%s%01d%s%s",
(unsigned long)timer->secs,
decimal_point,
timer->nsecs / 100000000,
second,
(timer->secs == 1 && timer->nsecs == 0) ? "" : plural);
@ -485,8 +497,9 @@ relative_time_string(nstime_t *timer, int tsprecision, capture_info *cf_info, gb
case WTAP_TSPREC_CSEC:
g_snprintf(time_string_buf, sizeof time_string_buf,
"%lu.%02d%s%s",
"%lu%s%02d%s%s",
(unsigned long)timer->secs,
decimal_point,
timer->nsecs / 10000000,
second,
(timer->secs == 1 && timer->nsecs == 0) ? "" : plural);
@ -494,8 +507,9 @@ relative_time_string(nstime_t *timer, int tsprecision, capture_info *cf_info, gb
case WTAP_TSPREC_MSEC:
g_snprintf(time_string_buf, sizeof time_string_buf,
"%lu.%03d%s%s",
"%lu%s%03d%s%s",
(unsigned long)timer->secs,
decimal_point,
timer->nsecs / 1000000,
second,
(timer->secs == 1 && timer->nsecs == 0) ? "" : plural);
@ -503,8 +517,9 @@ relative_time_string(nstime_t *timer, int tsprecision, capture_info *cf_info, gb
case WTAP_TSPREC_USEC:
g_snprintf(time_string_buf, sizeof time_string_buf,
"%lu.%06d%s%s",
"%lu%s%06d%s%s",
(unsigned long)timer->secs,
decimal_point,
timer->nsecs / 1000,
second,
(timer->secs == 1 && timer->nsecs == 0) ? "" : plural);
@ -512,8 +527,9 @@ relative_time_string(nstime_t *timer, int tsprecision, capture_info *cf_info, gb
case WTAP_TSPREC_NSEC:
g_snprintf(time_string_buf, sizeof time_string_buf,
"%lu.%09d%s%s",
"%lu%s%09d%s%s",
(unsigned long)timer->secs,
decimal_point,
timer->nsecs,
second,
(timer->secs == 1 && timer->nsecs == 0) ? "" : plural);
@ -1400,6 +1416,9 @@ main(int argc, char *argv[])
/* Set the C-language locale to the native environment. */
setlocale(LC_ALL, "");
/* Get the decimal point. */
decimal_point = g_strdup(localeconv()->decimal_point);
/* Get the compile-time version information string */
comp_info_str = get_compiled_version_info(NULL, NULL);