From 8b5c6a54c4396bb9daeb9ec5d9cbb0d3deedcbe3 Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Wed, 11 Sep 2024 15:15:49 +0200 Subject: [PATCH] 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. Discussion: https://www.postgresql.org/message-id/flat/f8c739d9-f48d-4187-b214-df3391ba41ab@eisentraut.org --- 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 0a303a49b2..94b6b449c8 100644 --- a/contrib/bloom/blscan.c +++ b/contrib/bloom/blscan.c @@ -55,10 +55,7 @@ blrescan(IndexScanDesc scan, ScanKey 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 94a8bd0701..60853a0f6a 100644 --- a/src/backend/access/brin/brin.c +++ b/src/backend/access/brin/brin.c @@ -956,8 +956,7 @@ brinrescan(IndexScanDesc scan, ScanKey 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 af24d38544..f2fd62afbb 100644 --- a/src/backend/access/gin/ginscan.c +++ b/src/backend/access/gin/ginscan.c @@ -447,10 +447,7 @@ ginrescan(IndexScanDesc scan, ScanKey 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 e05801e2f5..de472e1637 100644 --- a/src/backend/access/gist/gistscan.c +++ b/src/backend/access/gist/gistscan.c @@ -233,8 +233,7 @@ gistrescan(IndexScanDesc scan, ScanKey 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, ScanKey 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 a783b9b4e2..5ce3609394 100644 --- a/src/backend/access/hash/hash.c +++ b/src/backend/access/hash/hash.c @@ -415,11 +415,7 @@ hashrescan(IndexScanDesc scan, ScanKey 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 8cfaab949b..6d090f8739 100644 --- a/src/backend/access/nbtree/nbtree.c +++ b/src/backend/access/nbtree/nbtree.c @@ -404,9 +404,7 @@ btrescan(IndexScanDesc scan, ScanKey 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 03293a7816..3017861859 100644 --- a/src/backend/access/spgist/spgscan.c +++ b/src/backend/access/spgist/spgscan.c @@ -384,16 +384,14 @@ spgrescan(IndexScanDesc scan, ScanKey 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.39.5