summarylogtreecommitdiffstats
path: root/0007-gdal-json-c-0-13.patch
blob: 6101b8c0fe5ec0af2e4801015e56d7d3db04b2d6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
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 )
                 {