Evan,
On 1/30/2024 3:26 AM, Even Rouault wrote:
Ray,
Le 30/01/2024 à 05:43, Ray at Daylon via gdal-dev a écrit :
I was tracing through the TIGER/Line OGR driver and noticed that
it calls OGRTigerDataSource::Open with the bTestOpen parameter
set to TRUE, causing that function to skip calling CPLError
and only return FALSE if an error happens.
This causes an interesting situation: an app can have the TIGER driver
fail, but not be told why. Calling CPLGetLastErrorXXX doesn't help
because no error condition was formally reported.
Is there a reason why bTestOpen is set to TRUE? Shouldn't
full error reporting be the default? If this parameter is
important, shouldn't it be part of the driver API so an app
can set it to get errors described?
I presume this is mostly a copy&paste pattern borrowed from the
Shapefile driver. Basically the reason to be silent in most situations
is that the Tiger driver opens a directory, and there's no easy way to
know in advance if a directory belongs to the Tiger driver, or the
Shapefile one, or the MITAB one, or etc.. than iterating over its files
and checking if they have extensions that look like a Tiger dataset. So
failure of finding such file shouldn't trigger a verbose error,
otherwise this would prevent other drivers to also try checking if they
recognize the content of the directory.
And congratulations: you're the first user in recent times I'm aware of
to have interest in that driver ;-) Or perhaps that was just accidental?
Even
Thanks. My interest was that TIGER is a supported format in Leveller, so
I need to ensure the user experience for error reporting is valid. What
happened was that when Leveller starts, it loads up some UI textures
that are in TIFF format, but because those files have unsorted tags, the
TIFF driver calls CPLError with a warning about unsorted TIFF directories.
Then, when one goes to import a TIGER dataset and there's a read error,
the TIGER driver returns FALSE w/o calling CPLError, and Leveller calls
CPLGetLastError which returns the earlier TIFF warning, which is of
course of no help at this point. If the TIFF textures had been okay,
then there'd be no error text at all, which would be equally unhelpful.
From what you explained, it seems like the TIGER (and NTF) dataset open
logic tried to solve a problem at the wrong place -- it is nice to have
apps that can try different drivers to figure out a dataset format on
their own, but the driver shouldn't hide error messages on the app's
behalf, and it shouldn't output error messages (to console, e.g.) on its
behalf either. The latter can be fixed using the existing hook API, but
the message hiding still needs to be addressed. Maybe add a "Hide errors
when opening" driver API and default it to true in the TIGER and NTF
drivers to preserve the existing behavior?
(There may be other drivers with the same problem; I haven't had time to
do an exhaustive check).
Ray
_______________________________________________
gdal-dev mailing list
gdal-dev@lists.osgeo.org
https://lists.osgeo.org/mailman/listinfo/gdal-dev