Index: gdal/ogr/ogrsf_frmts/geojson/ogrgeojsonwriter.cpp =================================================================== --- a/ogr/ogrsf_frmts/geojson/ogrgeojsonwriter.cpp (revision 41042) +++ b/ogr/ogrsf_frmts/geojson/ogrgeojsonwriter.cpp (revision 41043) @@ -28,4 +28,6 @@ ****************************************************************************/ +#define JSON_C_VER_013 (13 << 8) + #include "ogrgeojsonwriter.h" #include "ogrgeojsonutils.h" @@ -33,5 +35,9 @@ #include "ogrgeojsonreader.h" #include // JSON-C + +#if (!defined(JSON_C_VERSION_NUM)) || (JSON_C_VERSION_NUM < JSON_C_VER_013) #include +#endif + #include #include @@ -1382,11 +1388,15 @@ // TODO(schwehr): Explain this casting. const int nPrecision = +#if (!defined(JSON_C_VERSION_NUM)) || (JSON_C_VERSION_NUM < JSON_C_VER_013) static_cast(reinterpret_cast(jso->_userdata)); +#else + static_cast(reinterpret_cast(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(strlen(szBuffer))); @@ -1418,9 +1428,9 @@ 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) ) - { - if( jso->o.c_double > 0 ) + else if( CPLIsInf(json_object_get_double(jso)) ) + { + if( json_object_get_double(jso) > 0 ) nSize = CPLsnprintf(szBuffer, sizeof(szBuffer), "Infinity"); else @@ -1430,5 +1440,9 @@ { 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; @@ -1436,5 +1450,5 @@ "%%.%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(sizeof(szBuffer)) && @@ -1458,5 +1472,5 @@ "%%.%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 && @@ -1473,5 +1487,5 @@ "%%.%dg", nInitialSignificantFigures); nSize = CPLsnprintf(szBuffer, sizeof(szBuffer), - szFormatting, jso->o.c_double); + szFormatting, json_object_get_double(jso)); if( nSize+2 < static_cast(sizeof(szBuffer)) && strchr(szBuffer, '.') == NULL )