mirror of
https://github.com/felt/tippecanoe.git
synced 2026-10-06 02:15:41 +02:00
Throw instead of exiting from the tile clipping and overzooming code
The code reachable from overzooming a tile no longer calls exit(). It reports errors by throwing tippecanoe_error, and owns its FILE * and json_pull * handles through RAII wrappers so that nothing leaks when an error unwinds the stack. New files: * errors.hpp/errors.cpp: the tippecanoe_error exception class, plus throw_tippecanoe_error() and throw_perror() helpers. * raii.hpp: unique_file and unique_json_pull, both std::unique_ptr aliases, for FILE * and json_pull *. exit() becomes throw in clip.cpp, mvt.cpp, mvt.hpp, read_json.cpp, evaluator.cpp, text.cpp, geometry.cpp, attribute.cpp, and write_json.hpp. Each tool's main() is now a try/catch around an inner_main(), so the command-line tools exit with the status they always did. Along the way this fixes a z_stream leaked when compress() failed, an exit() that could run from json_writer's destructor during unwinding, and an exit() in mvt_value's hash function. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DuCSVGssWNUCpVEE8Yp5HT
This commit is contained in:
@@ -1,5 +1,13 @@
|
||||
# 2.81.0
|
||||
|
||||
* Report errors from the tile clipping and overzooming code by throwing a
|
||||
`tippecanoe_error` rather than by calling `exit()`, and give that code
|
||||
RAII ownership of its `FILE *` and `json_pull *` handles so that nothing
|
||||
leaks when an error unwinds the stack. Each command-line tool catches the
|
||||
exception in `main()` and exits with the same status it would have
|
||||
before. Along the way this fixes a leaked `z_stream` when `compress()`
|
||||
failed and two `exit()` calls that could run from a destructor or from
|
||||
`mvt_value`'s hash function.
|
||||
* Add `--drop-by-attribute-as-needed=`*attribute* to drop the features with
|
||||
the lowest values of a numeric attribute from oversized tiles, and
|
||||
`--drop-by-attribute-order=desc` to drop the highest values instead.
|
||||
|
||||
Reference in New Issue
Block a user