283 char **enabled_drivers_array = NULL;
284 uint32_t enabled_drivers_count = 0;
285 bool *enabled_drivers_found = NULL;
286 char *gdal_skip = NULL;
295 if (enabled_drivers == NULL)
298 elog(DEBUG4,
"Enabling GDAL drivers: %s", enabled_drivers);
302 GDALDestroyDriverManager();
303 CPLSetConfigOption(
"GDAL_SKIP", NULL);
308 enabled_drivers_array =
rtpg_strsplit(enabled_drivers,
" ", &enabled_drivers_count);
309 enabled_drivers_found = palloc(
sizeof(
bool) * enabled_drivers_count);
310 memset(enabled_drivers_found,
FALSE,
sizeof(
bool) * enabled_drivers_count);
316 for (i = 0; i < enabled_drivers_count; i++) {
318 enabled_drivers_found[i] =
TRUE;
324 for (i = 0; i < enabled_drivers_count; i++) {
326 enabled_drivers_found[i] =
TRUE;
331 else if (strstr(enabled_drivers,
GDAL_VSICURL) != NULL) {
332 for (i = 0; i < enabled_drivers_count; i++) {
333 if (strstr(enabled_drivers_array[i],
GDAL_VSICURL) != NULL) {
334 enabled_drivers_found[i] =
TRUE;
342 uint32_t drv_count = 0;
348 for (i = 0; i < drv_count; i++) {
353 if (strstr(enabled_drivers, drv_set[i].short_name) != NULL) {
355 for (j = 0; j < enabled_drivers_count; j++) {
357 if (strcmp(enabled_drivers_array[j], drv_set[i].short_name) == 0) {
358 enabled_drivers_found[j] =
TRUE;
370 if (gdal_skip == NULL) {
371 gdal_skip = palloc(
sizeof(
char) * (strlen(drv_set[i].short_name) + 1));
375 gdal_skip = repalloc(
378 strlen(gdal_skip) + 1 + strlen(drv_set[i].short_name) + 1
381 strcat(gdal_skip,
" ");
383 strcat(gdal_skip, drv_set[i].short_name);
386 for (i = 0; i < drv_count; i++) {
387 pfree(drv_set[i].short_name);
388 pfree(drv_set[i].long_name);
389 pfree(drv_set[i].create_options);
391 if (drv_count) pfree(drv_set);
395 for (i = 0; i < enabled_drivers_count; i++) {
396 if (enabled_drivers_found[i])
400 elog(WARNING,
"%s set. Ignoring GDAL driver: %s",
GDAL_DISABLE_ALL, enabled_drivers_array[i]);
402 elog(WARNING,
"%s set. Ignoring GDAL driver: %s",
GDAL_ENABLE_ALL, enabled_drivers_array[i]);
404 elog(WARNING,
"Unknown GDAL driver: %s", enabled_drivers_array[i]);
412 GDALDestroyDriverManager();
416 CPLSetConfigOption(
"GDAL_SKIP", gdal_skip);
417 if (gdal_skip != NULL) pfree(gdal_skip);
422 pfree(enabled_drivers_array);
423 pfree(enabled_drivers_found);
int rt_util_gdal_register_all(int force_register_all)
rt_gdaldriver rt_raster_gdal_drivers(uint32_t *drv_count, uint8_t cancc)
Returns a set of available GDAL drivers.
char ** rtpg_strsplit(const char *str, const char *delimiter, uint32_t *n)
#define POSTGIS_RT_DEBUGF(level, msg,...)