mirror of
https://github.com/archlinuxarm/PKGBUILDs.git
synced 2024-11-28 22:57:37 +00:00
112 lines
5.2 KiB
Diff
112 lines
5.2 KiB
Diff
|
From 05a1fd773c8f418ee9765465fc4863c1d6472a4c Mon Sep 17 00:00:00 2001
|
||
|
From: Even Rouault <even.rouault@mines-paris.org>
|
||
|
Date: Fri, 5 Jan 2018 18:08:49 +0000
|
||
|
Subject: [PATCH] =?UTF-8?q?Add=20support=20for=20json-c=20v0.13=20(patch?=
|
||
|
=?UTF-8?q?=20by=20Bj=C3=B6rn=20Esser,=20fixes=20=E2=80=8Bhttps://github.c?=
|
||
|
=?UTF-8?q?om/OSGeo/gdal/pull/277,=20backport=20of=20r41043,=20fixes=20#71?=
|
||
|
=?UTF-8?q?95)?=
|
||
|
MIME-Version: 1.0
|
||
|
Content-Type: text/plain; charset=UTF-8
|
||
|
Content-Transfer-Encoding: 8bit
|
||
|
|
||
|
git-svn-id: https://svn.osgeo.org/gdal/branches/2.2@41200 f0d54148-0727-0410-94bb-9a71ac55c965
|
||
|
---
|
||
|
gdal/ogr/ogrsf_frmts/geojson/ogrgeojsonwriter.cpp | 30 +++++++++++++++++------
|
||
|
1 file changed, 22 insertions(+), 8 deletions(-)
|
||
|
|
||
|
diff --git a/gdal/ogr/ogrsf_frmts/geojson/ogrgeojsonwriter.cpp b/gdal/ogr/ogrsf_frmts/geojson/ogrgeojsonwriter.cpp
|
||
|
index fdf4b77b459..f8937885c76 100644
|
||
|
--- a/gdal/ogr/ogrsf_frmts/geojson/ogrgeojsonwriter.cpp
|
||
|
+++ b/gdal/ogr/ogrsf_frmts/geojson/ogrgeojsonwriter.cpp
|
||
|
@@ -27,12 +27,18 @@
|
||
|
* DEALINGS IN THE SOFTWARE.
|
||
|
****************************************************************************/
|
||
|
|
||
|
+#define JSON_C_VER_013 (13 << 8)
|
||
|
+
|
||
|
#include "ogrgeojsonwriter.h"
|
||
|
#include "ogrgeojsonutils.h"
|
||
|
#include "ogr_geojson.h"
|
||
|
#include "ogrgeojsonreader.h"
|
||
|
#include <json.h> // JSON-C
|
||
|
+
|
||
|
+#if (!defined(JSON_C_VERSION_NUM)) || (JSON_C_VERSION_NUM < JSON_C_VER_013)
|
||
|
#include <json_object_private.h>
|
||
|
+#endif
|
||
|
+
|
||
|
#include <printbuf.h>
|
||
|
#include <ogr_api.h>
|
||
|
#include <ogr_p.h>
|
||
|
@@ -1381,13 +1387,17 @@ static int OGR_json_double_with_precision_to_string( struct json_object *jso,
|
||
|
{
|
||
|
// TODO(schwehr): Explain this casting.
|
||
|
const int nPrecision =
|
||
|
+#if (!defined(JSON_C_VERSION_NUM)) || (JSON_C_VERSION_NUM < JSON_C_VER_013)
|
||
|
static_cast<int>(reinterpret_cast<GUIntptr_t>(jso->_userdata));
|
||
|
+#else
|
||
|
+ static_cast<int>(reinterpret_cast<GUIntptr_t>(json_object_get_userdata(jso)));
|
||
|
+#endif
|
||
|
char szBuffer[75] = {};
|
||
|
- OGRFormatDouble( szBuffer, sizeof(szBuffer), jso->o.c_double, '.',
|
||
|
+ OGRFormatDouble( szBuffer, sizeof(szBuffer), json_object_get_double(jso), '.',
|
||
|
(nPrecision < 0) ? 15 : nPrecision );
|
||
|
if( szBuffer[0] == 't' /*oobig */ )
|
||
|
{
|
||
|
- CPLsnprintf(szBuffer, sizeof(szBuffer), "%.18g", jso->o.c_double);
|
||
|
+ CPLsnprintf(szBuffer, sizeof(szBuffer), "%.18g", json_object_get_double(jso));
|
||
|
}
|
||
|
return printbuf_memappend(pb, szBuffer, static_cast<int>(strlen(szBuffer)));
|
||
|
}
|
||
|
@@ -1417,11 +1427,11 @@ OGR_json_double_with_significant_figures_to_string( struct json_object *jso,
|
||
|
{
|
||
|
char szBuffer[75] = {};
|
||
|
int nSize = 0;
|
||
|
- if( CPLIsNan(jso->o.c_double))
|
||
|
+ if( CPLIsNan(json_object_get_double(jso)))
|
||
|
nSize = CPLsnprintf(szBuffer, sizeof(szBuffer), "NaN");
|
||
|
- else if( CPLIsInf(jso->o.c_double) )
|
||
|
+ else if( CPLIsInf(json_object_get_double(jso)) )
|
||
|
{
|
||
|
- if( jso->o.c_double > 0 )
|
||
|
+ if( json_object_get_double(jso) > 0 )
|
||
|
nSize = CPLsnprintf(szBuffer, sizeof(szBuffer), "Infinity");
|
||
|
else
|
||
|
nSize = CPLsnprintf(szBuffer, sizeof(szBuffer), "-Infinity");
|
||
|
@@ -1429,13 +1439,17 @@ OGR_json_double_with_significant_figures_to_string( struct json_object *jso,
|
||
|
else
|
||
|
{
|
||
|
char szFormatting[32] = {};
|
||
|
+#if (!defined(JSON_C_VERSION_NUM)) || (JSON_C_VERSION_NUM < JSON_C_VER_013)
|
||
|
const int nSignificantFigures = (int) (GUIntptr_t) jso->_userdata;
|
||
|
+#else
|
||
|
+ const int nSignificantFigures = (int) (GUIntptr_t) json_object_get_userdata(jso);
|
||
|
+#endif
|
||
|
const int nInitialSignificantFigures =
|
||
|
nSignificantFigures >= 0 ? nSignificantFigures : 17;
|
||
|
CPLsnprintf(szFormatting, sizeof(szFormatting),
|
||
|
"%%.%dg", nInitialSignificantFigures);
|
||
|
nSize = CPLsnprintf(szBuffer, sizeof(szBuffer),
|
||
|
- szFormatting, jso->o.c_double);
|
||
|
+ szFormatting, json_object_get_double(jso));
|
||
|
const char* pszDot = NULL;
|
||
|
if( nSize+2 < static_cast<int>(sizeof(szBuffer)) &&
|
||
|
(pszDot = strchr(szBuffer, '.')) == NULL )
|
||
|
@@ -1457,7 +1471,7 @@ OGR_json_double_with_significant_figures_to_string( struct json_object *jso,
|
||
|
CPLsnprintf(szFormatting, sizeof(szFormatting),
|
||
|
"%%.%dg", nInitialSignificantFigures- i);
|
||
|
nSize = CPLsnprintf(szBuffer, sizeof(szBuffer),
|
||
|
- szFormatting, jso->o.c_double);
|
||
|
+ szFormatting, json_object_get_double(jso));
|
||
|
pszDot = strchr(szBuffer, '.');
|
||
|
if( pszDot != NULL &&
|
||
|
strstr(pszDot, "999999") == NULL &&
|
||
|
@@ -1472,7 +1486,7 @@ OGR_json_double_with_significant_figures_to_string( struct json_object *jso,
|
||
|
CPLsnprintf(szFormatting, sizeof(szFormatting),
|
||
|
"%%.%dg", nInitialSignificantFigures);
|
||
|
nSize = CPLsnprintf(szBuffer, sizeof(szBuffer),
|
||
|
- szFormatting, jso->o.c_double);
|
||
|
+ szFormatting, json_object_get_double(jso));
|
||
|
if( nSize+2 < static_cast<int>(sizeof(szBuffer)) &&
|
||
|
strchr(szBuffer, '.') == NULL )
|
||
|
{
|