json_dumper: add json_dumper_value_double
Add locale-independent version that replaces json_dumper_value_anyf for floating-point numbers. NaN and -/+Infinity are mapped to null. Change-Id: I8e7856de480b7bcafe77ddd015239e1257768ced Reviewed-on: https://code.wireshark.org/review/31948 Reviewed-by: Peter Wu <peter@lekensteyn.nl> Petri-Dish: Peter Wu <peter@lekensteyn.nl> Tested-by: Petri Dish Buildbot Reviewed-by: Jakub Zawadzki <jbwzawadzki@gmail.com> Reviewed-by: Anders Broman <a.broman58@gmail.com>
This commit is contained in:
parent
0ca65a66f4
commit
7cc5941f95
|
@ -102,6 +102,7 @@ libwsutil.so.0 libwsutil0 #MINVER#
|
|||
json_dumper_finish@Base 2.9.0
|
||||
json_dumper_set_member_name@Base 2.9.0
|
||||
json_dumper_value_anyf@Base 2.9.0
|
||||
json_dumper_value_double@Base 3.0.0
|
||||
json_dumper_value_string@Base 2.9.0
|
||||
json_dumper_value_va_list@Base 2.9.1
|
||||
json_dumper_write_base64@Base 2.9.1
|
||||
|
|
|
@ -13,6 +13,8 @@
|
|||
|
||||
#include "json_dumper.h"
|
||||
|
||||
#include <math.h>
|
||||
|
||||
/*
|
||||
* json_dumper.state[current_depth] describes a nested element:
|
||||
* - type: none/object/array/value
|
||||
|
@ -305,6 +307,24 @@ json_dumper_value_string(json_dumper *dumper, const char *value)
|
|||
dumper->state[dumper->current_depth] = JSON_DUMPER_TYPE_VALUE;
|
||||
}
|
||||
|
||||
void
|
||||
json_dumper_value_double(json_dumper *dumper, double value)
|
||||
{
|
||||
if (!json_dumper_check_state(dumper, JSON_DUMPER_SET_VALUE, JSON_DUMPER_TYPE_VALUE)) {
|
||||
return;
|
||||
}
|
||||
|
||||
prepare_token(dumper);
|
||||
gchar buffer[G_ASCII_DTOSTR_BUF_SIZE] = { 0 };
|
||||
if (isfinite(value) && g_ascii_dtostr(buffer, G_ASCII_DTOSTR_BUF_SIZE, value) && buffer[0]) {
|
||||
fputs(buffer, dumper->output_file);
|
||||
} else {
|
||||
fputs("null", dumper->output_file);
|
||||
}
|
||||
|
||||
dumper->state[dumper->current_depth] = JSON_DUMPER_TYPE_VALUE;
|
||||
}
|
||||
|
||||
void
|
||||
json_dumper_value_va_list(json_dumper *dumper, const char *format, va_list ap)
|
||||
{
|
||||
|
|
|
@ -34,7 +34,7 @@ extern "C" {
|
|||
* json_dumper_set_member_name(&dumper, "array");
|
||||
* json_dumper_begin_array(&dumper);
|
||||
* json_dumper_value_anyf(&dumper, "true");
|
||||
* json_dumper_value_anyf(&dumper, "1.0");
|
||||
* json_dumper_value_double(&dumper, 1.0);
|
||||
* json_dumper_begin_base64(&dumper);
|
||||
* json_dumper_write_base64(&dumper, (const guchar *)"abcd", 4);
|
||||
* json_dumper_write_base64(&dumper, (const guchar *)"1234", 4);
|
||||
|
@ -80,6 +80,9 @@ json_dumper_end_array(json_dumper *dumper);
|
|||
WS_DLL_PUBLIC void
|
||||
json_dumper_value_string(json_dumper *dumper, const char *value);
|
||||
|
||||
WS_DLL_PUBLIC void
|
||||
json_dumper_value_double(json_dumper *dumper, double value);
|
||||
|
||||
/**
|
||||
* Dump number, "true", "false" or "null" values.
|
||||
*/
|
||||
|
|
Loading…
Reference in New Issue