From 0a78a05db33e9b0f90b9bb923ff1e2dc92a570d7 Mon Sep 17 00:00:00 2001 From: Thomas Beutlich Date: Mon, 29 Jan 2024 21:43:16 +0100 Subject: [PATCH] Must not swap double type --- sbnsearch.c | 14 +++++++------- shptree.c | 26 +++++++++++++++----------- 2 files changed, 22 insertions(+), 18 deletions(-) diff --git a/sbnsearch.c b/sbnsearch.c index 061d0ac..9b5ec7b 100644 --- a/sbnsearch.c +++ b/sbnsearch.c @@ -142,18 +142,18 @@ SBNSearchHandle SBNOpenDiskTree(const char *pszSBNFilename, /* Read shapes bounding box. */ /* -------------------------------------------------------------------- */ +#if !defined(SHP_BIG_ENDIAN) + SHP_SWAP64(abyHeader + 32); + SHP_SWAP64(abyHeader + 40); + SHP_SWAP64(abyHeader + 48); + SHP_SWAP64(abyHeader + 56); +#endif + memcpy(&hSBN->dfMinX, abyHeader + 32, 8); memcpy(&hSBN->dfMinY, abyHeader + 40, 8); memcpy(&hSBN->dfMaxX, abyHeader + 48, 8); memcpy(&hSBN->dfMaxY, abyHeader + 56, 8); -#if !defined(SHP_BIG_ENDIAN) - SHP_SWAP64(&hSBN->dfMinX); - SHP_SWAP64(&hSBN->dfMinY); - SHP_SWAP64(&hSBN->dfMaxX); - SHP_SWAP64(&hSBN->dfMaxY); -#endif - if (hSBN->dfMinX > hSBN->dfMaxX || hSBN->dfMinY > hSBN->dfMaxY) { hSBN->sHooks.Error("Invalid extent in .sbn file."); diff --git a/shptree.c b/shptree.c index 3f559fe..7610244 100644 --- a/shptree.c +++ b/shptree.c @@ -734,18 +734,22 @@ static bool SHPSearchDiskTreeNode(SHPTreeDiskHandle hDiskTree, if (bNeedSwap) SHP_SWAP32(&offset); - nFReadAcc += STATIC_CAST(int, hDiskTree->sHooks.FRead(adfNodeBoundsMin, - sizeof(double), 2, - hDiskTree->fpQIX)); - nFReadAcc += STATIC_CAST(int, hDiskTree->sHooks.FRead(adfNodeBoundsMax, - sizeof(double), 2, - hDiskTree->fpQIX)); - if (bNeedSwap) { - SHP_SWAP64(adfNodeBoundsMin + 0); - SHP_SWAP64(adfNodeBoundsMin + 1); - SHP_SWAP64(adfNodeBoundsMax + 0); - SHP_SWAP64(adfNodeBoundsMax + 1); + uint64_t tempVal[4]; + nFReadAcc += STATIC_CAST( + int, hDiskTree->sHooks.FRead(adfNodeBoundsMin, sizeof(uint64_t), 4, + hDiskTree->fpQIX)); + if (bNeedSwap) + { + SHP_SWAP64(tempVal + 0); + SHP_SWAP64(tempVal + 1); + SHP_SWAP64(tempVal + 2); + SHP_SWAP64(tempVal + 3); + } + memcpy(adfNodeBoundsMin + 0, tempVal + 0, 8); + memcpy(adfNodeBoundsMin + 1, tempVal + 1, 8); + memcpy(adfNodeBoundsMax + 0, tempVal + 2, 8); + memcpy(adfNodeBoundsMax + 1, tempVal + 3, 8); } nFReadAcc += STATIC_CAST(