# Shapelib Release Notes

To get notification of new releases of Shapelib subscribe to the project mailing list at https://lists.osgeo.org/pipermail/shapelib/.

Release 1.6.2:

- Nullify userdata also in SASetupUtf8Hooks
- Test suite enhancements
- CMake: no longer use CTest and add manual BUILD_TESTING option instead (default to OFF)
- Prefer tagged version of Google Benchmark
- dbfcreate: allow creation of Date and Logical fields #167 (#168)
- Fix cppcheck nullPointerOutOfMemory warnings
- DBFWriteAttribute(): return true when no precision loss occured when writing a double
- SHPCreateLL()/DBFCreate(): make error message contains full filename (in case it is very long)

Release 1.6.1:

- DBFIsValueNULL(): accept empty string as NULL Date (https://github.com/OSGeo/gdal/issues/10405)
- DBFIsValueNULL(): Accept string containing of width times "0" as NULL Date
- Only test for _WIN32 for Windows detection
- Windows: Fix UTF8 hook functions
- Various compiler warning fixes
- contrib/csv2shp.c: fix resource leaks (#86)
- Detect byte order at compile time
- shapefil.h: various const-correctness improvements
- shapefil.h: Remove SHPTreeRemoveShapeId not being implemented
- shapefil.h: Fix API call of SHPSearchDiskTreeEx
- Add API functions for read/write of date attributes: DBFReadDateAttribute/DBFWriteDateAttribute
- DBFWriteAttribute/DBFWriteLogicalAttribute: no longer silently accpets invalid input, but returns false
- DBFCloneEmpty: consider the SAHooks
- Move endian defines to shapefil_private.h (#99)
- Fix test execution by complete refactoring.
- Add C++ unit testing (#113)
- SBNOpenDiskTree(): make it work with node descriptors with non-increasing nBinStart Fixes https://github.com/OSGeo/shapelib/issues/106 / https://github.com/OSGeo/gdal/issues/9430
- sbnsearch.c: avoid potential integer overflows on corrupted files
- dbfdump: dump date and logical fields
- dbfinfo: print date and logical fields
- dbfcat: various fixes
- Fix -Werror=calloc-transposed-args with gcc 14
- SHPOpenLL(): avoid GDAL specific error message when .shx is missing (#129)
- CMake: generate pkg-config file (#135)
- CMake: Fix install interface include dir (#134)
- CMake: Make building executables optional with CMake (set BUILD_APPS to OFF) (#78)
- CMake: Remove duplicated shapefil.h installation in include_dir/shapelib (#80)
- CMake: Remove INSTALL_NAME_DIR from target (#49)
- CMake: Fix contrib.cmake
- CMake: (>= 3.21) Fix ctest paths for shared libs (MSVC and CygWin)
- CMake: Add GoogleTestAdapter (GTA) Run Settings

Release 1.6.0:

- shapefil.h: add SHAPELIB_VERSION_MAJOR/MINOR/MICRO, SHAPELIB_VERSION_NUMBER, and SHAPELIB_AT_LEAST macros
- Compiler warning fixes and various code cleanups
- SAHooks: add a void *pvUserData member. ABI change
- SAHooks.FOpen and FClose callbacks: add a void *pvUserData parameter. API and ABI change
- SAHooks.FWrite: make first parameter a const void*. API change
- Distribute LICENSE-LGPL and LICENSE-MIT files instead of COPYING file. Do not distribute INSTALL file
- Use standard integer data types
- Changes to allow building with cmake -DCMAKE_UNITY_BUILD=ON
- Polygon writing: avoid considering rings slightly overlapping as inner-outer rings of others (refs OSGeo/gdal#5315)
- Polygon writing: consider rings at non-constant Z as outer rings (fixes OSGeo/gdal#5315) As noted in code comments, this is an approximation of more complicated tests we'd likely have to do, that would take into account real co-planar testing, to allow detecting inner rings of outer rings in an oblique plane.
- shpopen.c: Communicate why the file size cannot be reached when appending features (OSGeo/gdal#4140) Clearly state why the file size cannot be reached. This is important in order to correctly inform the user and prevent him/her from looking for other reasons. Related to https://github.com/qgis/QGIS/issues/44202
- SHPWriteObject(): prevent potential overflows on 64-bit platforms on huge geometries
- SHPRestoreSHX: update SHX content length even if error occurred
- In creation, uses w+b file opening mode instead of wb followed by r+b, to support network file systems having sequential write only and when using CPL_VSIL_USE_TEMP_FILE_FOR_RANDOM_WRITE=YES (fixes OSGeo/gdal#7801)
- Fix adding features in a .dbf without columns (fixes qgis/qgis#51247)
- Have matching SOVERSION for CMake and autotools
- Code reformatting
- Enable contrib/csv2shp build with MSVC
- Build contributed utilities via CMake
- Use the the standard BUILD_TESTING CMake variable
- Remove double free() in contrib/shpsrt (CVE-2022-0699)
- SHPRestoreSHX: fix for (64 bit) big endian
- Add config-style support for find_package(shapefile)
- Prevent no-op FSeeks writing dbf & shp records for network filesystem performance

Release 1.5.0:

- Add FTDate entry in DBFFieldType (see GDAL Pull request 308)
- Remove PROJ.4 dependency and functionality, causing removal of SHPProject(), SHPSetProjection() and SHPFreeProjection() from contrib/shpgeo.h, and removal of the contrib shpproj utility.
- shpopen.c: avoid being dependent on correctness of file size field in .shp. Fixes https://lists.osgeo.org/pipermail/gdal-dev/2018-October/049218.html

Release 1.4.1:

- Fix a regression regarding re-writing the last shape of a file (GDAL #7031)

Release 1.4.0:

- Old Makefile build replaced by autoconf/automake (by Sandro Mani)
- CMake build system added (by Alan W. Irwin)
- Added read support for ESRI .sbn spatial index
- Resynchronization with GDAL's Shapefile driver. Mostly cleanups. SHPObject and DBFInfo structures extended with new members
- Add DBFSetLastModifiedDate() to modify the update date in the .dbf
- Add SHPSetFastModeReadObject() to read faster (but shapes got that way share state in the handle, so only one shape at a time can be used)
- Add SHPRestoreSHX() to recreate a missing .shx from the .shp and SHPOpenLLEx().
- Write DBF end-of-file character 0x1A by default. This behaviour can be controlled with the DBFSetWriteEndOfFileChar() function.

Release 1.3.0:

- Major rework to us application provided hooks for file io, and error reporting (SAHooks).
- Added contrib/Shape_PointInPoly.cpp from Marko Podgorsek.
- Added shapelib tools documentation from Eduardo Patto Kanegae.
- Added dbf deletion support.
- Added DBFAddNativeFieldType().
- Added DBFDeleteField(), DBFReorderFields() and DBFAlterFields() to rework DBF schema.
- likely a variety of other changes - it has been eight years since 1.2.10!

Release 1.2.10: Added SHPRewindObject() function, and shprewind utility program. Added FTLogical, DBFReadLogicalAttribute() and DBFWriteLogicalAttribute() (thanks to Olek Neyman).

Release 1.2.9: Good support for reading and writing NULL fields in .dbf files, good support for NULL shapes and addition of the DBFGetFieldIndex() functions (all contributed by Jim Matthews).

An upgraded shputils.c has been contributed by Bill Miller. Daniel Morissette contributed DBFGetNativeFieldType(). Better error checking for disk errors in dbfopen.c. Various other bug fixes and safety improvements.

Release 1.2.8: Added hacked libtool support (supplied by Jan) and "rpm ready" install logic.

Release 1.2.7: Fix record size (was 4 bytes too long). Modify SHPReadObject() to handle null shapes properly. Use atof() instead of sscanf(). Support .DBF as well as .dbf.

Release 1.2.6: Now available under old MIT style license, or at the users option, LGPL. Added the contrib directory of stuff from Carl Anderson and the shptree.c API for quadtree based spatial searches.

Release 1.2.5: SHPOpen() now forcibly uses "rb" or "r+b" access string to avoid common mistakes on Windows. Also fixed a serious bug with .dbf files with a 'F' field type.

Release 1.2.4: DBFOpen() will now automatically translate a .shp extension to .dbf for convenience. SHPOpen() will try datasets with lower and uppercase extension. DBFAddField() now returns the field number, not TRUE/FALSE.

Release 1.2.3: Disable writing measures to multi-patches as ArcView seems to puke on them (as reported by Monika Sester). Add white space trimming, and string/numeric attribute interchangability in DBF API as suggested by Steve Lime. Dbfdump was updated to include several reporting options.

Release 1.2.2: Added proper support for multipatch (reading and writing) - this release just for testing purposes.

Release 1.2 is mostly a rewrite of the .shp/.shx access API to account for ArcView 3.x 3D shapes, and to encapsulate the shapes in a structure. Existing code using the shapefile library will require substantial changes to use release 1.2.

Release V1.1 has been built on a number of platforms, and used by a number of people successfully. V1.1 is the first release with the xBase API documentation.