GEOSContextHandle_t init_GEOS() { void *pVoid; GEOSContextHandle_t handle = GEOS_init_r(); GEOSContext_setNoticeMessageHandler_r(handle, geos_notice_handler, pVoid); GEOSContext_setErrorMessageHandler_r(handle, geos_notice_handler, pVoid); return handle; }
/* definitely releasing the slot */ struct splite_connection *p = &(splite_connection_pool[i]); p->conn_ptr = NULL; } #endif /* END obsolete partially thread-safe mode */ #ifdef GEOS_REENTRANT /* reentrant (thread-safe) initialization */ static void * spatialite_alloc_reentrant () { /* * allocating and initializing an empty internal cache * fully reentrant (thread-safe) version requiring GEOS >= 3.5.0 */ struct splite_internal_cache *cache = NULL; gaiaOutBufferPtr out; int i; struct splite_geos_cache_item *p; struct splite_xmlSchema_cache_item *p_xmlSchema; /* attempting to implicitly initialize the library */ spatialite_initialize (); cache = malloc (sizeof (struct splite_internal_cache)); if (cache == NULL) goto done; cache->magic1 = SPATIALITE_CACHE_MAGIC1; cache->magic2 = SPATIALITE_CACHE_MAGIC2; cache->gpkg_mode = 0; cache->gpkg_amphibious_mode = 0; cache->decimal_precision = -1; cache->GEOS_handle = NULL; cache->PROJ_handle = NULL; cache->cutterMessage = NULL; cache->pool_index = -1; cache->gaia_geos_error_msg = NULL; cache->gaia_geos_warning_msg = NULL; cache->gaia_geosaux_error_msg = NULL; /* initializing an empty linked list of Topologies */ cache->firstTopology = NULL; cache->lastTopology = NULL; cache->next_topo_savepoint = 0; cache->topo_savepoint_name = NULL; cache->firstNetwork = NULL; cache->lastNetwork = NULL; cache->next_network_savepoint = 0; cache->network_savepoint_name = NULL; /* initializing the XML error buffers */ out = malloc (sizeof (gaiaOutBuffer)); gaiaOutBufferInitialize (out); cache->xmlParsingErrors = out; out = malloc (sizeof (gaiaOutBuffer)); gaiaOutBufferInitialize (out); cache->xmlSchemaValidationErrors = out; out = malloc (sizeof (gaiaOutBuffer)); gaiaOutBufferInitialize (out); cache->xmlXPathErrors = out; /* initializing the GEOS cache */ p = &(cache->cacheItem1); memset (p->gaiaBlob, '\0', 64); p->gaiaBlobSize = 0; p->crc32 = 0; p->geosGeom = NULL; p->preparedGeosGeom = NULL; p = &(cache->cacheItem2); memset (p->gaiaBlob, '\0', 64); p->gaiaBlobSize = 0; p->crc32 = 0; p->geosGeom = NULL; p->preparedGeosGeom = NULL; for (i = 0; i < MAX_XMLSCHEMA_CACHE; i++) { /* initializing the XmlSchema cache */ p_xmlSchema = &(cache->xmlSchemaCache[i]); p_xmlSchema->timestamp = 0; p_xmlSchema->schemaURI = NULL; p_xmlSchema->schemaDoc = NULL; p_xmlSchema->parserCtxt = NULL; p_xmlSchema->schema = NULL; } /* initializing GEOS and PROJ.4 handles */ #ifndef OMIT_GEOS /* initializing GEOS */ cache->GEOS_handle = initGEOS_r (NULL, NULL); GEOSContext_setNoticeMessageHandler_r (cache->GEOS_handle, conn_geos_warning, cache); GEOSContext_setErrorMessageHandler_r (cache->GEOS_handle, conn_geos_error, cache); #endif /* end GEOS */ #ifndef OMIT_PROJ /* initializing the PROJ.4 context */ cache->PROJ_handle = pj_ctx_alloc (); #endif /* end PROJ.4 */ done: return cache; }