From 39b99d5fa0cd7eeeac48727e802ee97c0f8e61fe Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Thu, 8 Aug 2024 08:27:26 +0200 Subject: [PATCH 3/3] Replace gratuitous memmove() with memcpy() The index access methods all had similar code that copied the passed-in scan keys to local storage. They all used memmove() for that, which is not wrong, but it seems confusing not to use memcpy() when that would work. Presumably, this was all once copied from ancient code and never adjusted. --- contrib/bloom/blscan.c | 5 +---- src/backend/access/brin/brin.c | 3 +-- src/backend/access/gin/ginscan.c | 5 +---- src/backend/access/gist/gistscan.c | 6 ++---- src/backend/access/hash/hash.c | 6 +----- src/backend/access/nbtree/nbtree.c | 4 +--- src/backend/access/spgist/spgscan.c | 6 ++---- 7 files changed, 9 insertions(+), 26 deletions(-) diff --git a/contrib/bloom/blscan.c b/contrib/bloom/blscan.c index e29dc93491a..67899c1369a 100644 --- a/contrib/bloom/blscan.c +++ b/contrib/bloom/blscan.c @@ -55,10 +55,7 @@ blrescan(IndexScanDesc scan, const ScanKeyData *scankey, int nscankeys, so->sign = NULL; if (scankey && scan->numberOfKeys > 0) - { - memmove(scan->keyData, scankey, - scan->numberOfKeys * sizeof(ScanKeyData)); - } + memcpy(scan->keyData, scankey, scan->numberOfKeys * sizeof(ScanKeyData)); } /* diff --git a/src/backend/access/brin/brin.c b/src/backend/access/brin/brin.c index 3a739eed029..d38441e05ab 100644 --- a/src/backend/access/brin/brin.c +++ b/src/backend/access/brin/brin.c @@ -955,8 +955,7 @@ brinrescan(IndexScanDesc scan, const ScanKeyData *scankey, int nscankeys, */ if (scankey && scan->numberOfKeys > 0) - memmove(scan->keyData, scankey, - scan->numberOfKeys * sizeof(ScanKeyData)); + memcpy(scan->keyData, scankey, scan->numberOfKeys * sizeof(ScanKeyData)); } /* diff --git a/src/backend/access/gin/ginscan.c b/src/backend/access/gin/ginscan.c index 7dfaa866b43..678a8ce075a 100644 --- a/src/backend/access/gin/ginscan.c +++ b/src/backend/access/gin/ginscan.c @@ -447,10 +447,7 @@ ginrescan(IndexScanDesc scan, const ScanKeyData *scankey, int nscankeys, ginFreeScanKeys(so); if (scankey && scan->numberOfKeys > 0) - { - memmove(scan->keyData, scankey, - scan->numberOfKeys * sizeof(ScanKeyData)); - } + memcpy(scan->keyData, scankey, scan->numberOfKeys * sizeof(ScanKeyData)); } diff --git a/src/backend/access/gist/gistscan.c b/src/backend/access/gist/gistscan.c index 1f1c122bf97..a10099cf150 100644 --- a/src/backend/access/gist/gistscan.c +++ b/src/backend/access/gist/gistscan.c @@ -233,8 +233,7 @@ gistrescan(IndexScanDesc scan, const ScanKeyData *key, int nkeys, fn_extras[i] = scan->keyData[i].sk_func.fn_extra; } - memmove(scan->keyData, key, - scan->numberOfKeys * sizeof(ScanKeyData)); + memcpy(scan->keyData, key, scan->numberOfKeys * sizeof(ScanKeyData)); /* * Modify the scan key so that the Consistent method is called for all @@ -289,8 +288,7 @@ gistrescan(IndexScanDesc scan, const ScanKeyData *key, int nkeys, fn_extras[i] = scan->orderByData[i].sk_func.fn_extra; } - memmove(scan->orderByData, orderbys, - scan->numberOfOrderBys * sizeof(ScanKeyData)); + memcpy(scan->orderByData, orderbys, scan->numberOfOrderBys * sizeof(ScanKeyData)); so->orderByTypes = (Oid *) palloc(scan->numberOfOrderBys * sizeof(Oid)); diff --git a/src/backend/access/hash/hash.c b/src/backend/access/hash/hash.c index 3bb621a893f..ea0b95a2af3 100644 --- a/src/backend/access/hash/hash.c +++ b/src/backend/access/hash/hash.c @@ -414,11 +414,7 @@ hashrescan(IndexScanDesc scan, const ScanKeyData *scankey, int nscankeys, /* Update scan key, if a new one is given */ if (scankey && scan->numberOfKeys > 0) - { - memmove(scan->keyData, - scankey, - scan->numberOfKeys * sizeof(ScanKeyData)); - } + memcpy(scan->keyData, scankey, scan->numberOfKeys * sizeof(ScanKeyData)); so->hashso_buc_populated = false; so->hashso_buc_split = false; diff --git a/src/backend/access/nbtree/nbtree.c b/src/backend/access/nbtree/nbtree.c index 5962596b06b..24f8a3a721c 100644 --- a/src/backend/access/nbtree/nbtree.c +++ b/src/backend/access/nbtree/nbtree.c @@ -403,9 +403,7 @@ btrescan(IndexScanDesc scan, const ScanKeyData *scankey, int nscankeys, * Reset the scan keys */ if (scankey && scan->numberOfKeys > 0) - memmove(scan->keyData, - scankey, - scan->numberOfKeys * sizeof(ScanKeyData)); + memcpy(scan->keyData, scankey, scan->numberOfKeys * sizeof(ScanKeyData)); so->numberOfKeys = 0; /* until _bt_preprocess_keys sets it */ so->numArrayKeys = 0; /* ditto */ } diff --git a/src/backend/access/spgist/spgscan.c b/src/backend/access/spgist/spgscan.c index d6bea65fde5..8a990fba1c3 100644 --- a/src/backend/access/spgist/spgscan.c +++ b/src/backend/access/spgist/spgscan.c @@ -384,16 +384,14 @@ spgrescan(IndexScanDesc scan, const ScanKeyData *scankey, int nscankeys, /* copy scankeys into local storage */ if (scankey && scan->numberOfKeys > 0) - memmove(scan->keyData, scankey, - scan->numberOfKeys * sizeof(ScanKeyData)); + memcpy(scan->keyData, scankey, scan->numberOfKeys * sizeof(ScanKeyData)); /* initialize order-by data if needed */ if (orderbys && scan->numberOfOrderBys > 0) { int i; - memmove(scan->orderByData, orderbys, - scan->numberOfOrderBys * sizeof(ScanKeyData)); + memcpy(scan->orderByData, orderbys, scan->numberOfOrderBys * sizeof(ScanKeyData)); for (i = 0; i < scan->numberOfOrderBys; i++) { -- 2.46.0