aboutsummaryrefslogtreecommitdiff
path: root/sys/libkern
diff options
context:
space:
mode:
authorBrooks Davis <brooks@FreeBSD.org>2026-07-01 11:46:55 +0000
committerBrooks Davis <brooks@FreeBSD.org>2026-07-01 11:49:10 +0000
commit17602eb3eae95a53c973a5ceb4fc3134a770e8d6 (patch)
tree606410e7666aff3355f198b7f4b25ba29afe1c66 /sys/libkern
parentf14bdfefa41c7d81dd1317e61b98de22dc03016c (diff)
Diffstat (limited to 'sys/libkern')
-rw-r--r--sys/libkern/bcopy.c20
1 files changed, 11 insertions, 9 deletions
diff --git a/sys/libkern/bcopy.c b/sys/libkern/bcopy.c
index 8df260809a02..be26443ef884 100644
--- a/sys/libkern/bcopy.c
+++ b/sys/libkern/bcopy.c
@@ -35,7 +35,9 @@
#include <sys/param.h>
#ifdef _KERNEL
#include <sys/systm.h>
+#include <sys/stddef.h>
#else
+#include <stddef.h>
#include <string.h>
#endif
@@ -46,7 +48,7 @@
* sizeof(word) MUST BE A POWER OF TWO
* SO THAT wmask BELOW IS ALL ONES
*/
-typedef long word; /* "word" used for optimal copy speed */
+typedef intptr_t word; /* "word" used for optimal copy speed */
#define wsize sizeof(word)
#define wmask (wsize - 1)
@@ -57,7 +59,7 @@ typedef long word; /* "word" used for optimal copy speed */
* (the portable versions of) bcopy, memcpy, and memmove.
*/
void *
-memcpy(void *dst0, const void *src0, size_t length)
+memmove(void *dst0, const void *src0, size_t length)
{
char *dst;
const char *src;
@@ -76,18 +78,18 @@ memcpy(void *dst0, const void *src0, size_t length)
#define TLOOP(s) if (t) TLOOP1(s)
#define TLOOP1(s) do { s; } while (--t)
- if ((unsigned long)dst < (unsigned long)src) {
+ if ((ptraddr_t)dst < (ptraddr_t)src) {
/*
* Copy forward.
*/
t = (size_t)src; /* only need low bits */
- if ((t | (uintptr_t)dst) & wmask) {
+ if ((t | (ptraddr_t)dst) & wmask) {
/*
* Try to align operands. This cannot be done
* unless the low bits match.
*/
- if ((t ^ (uintptr_t)dst) & wmask || length < wsize) {
+ if ((t ^ (ptraddr_t)dst) & wmask || length < wsize) {
t = length;
} else {
t = wsize - (t & wmask);
@@ -112,10 +114,10 @@ memcpy(void *dst0, const void *src0, size_t length)
*/
src += length;
dst += length;
- t = (uintptr_t)src;
+ t = (size_t)src;
- if ((t | (uintptr_t)dst) & wmask) {
- if ((t ^ (uintptr_t)dst) & wmask || length <= wsize) {
+ if ((t | (ptraddr_t)dst) & wmask) {
+ if ((t ^ (ptraddr_t)dst) & wmask || length <= wsize) {
t = length;
} else {
t &= wmask;
@@ -134,4 +136,4 @@ done:
return (dst0);
}
-__strong_reference(memcpy, memmove);
+__strong_reference(memmove, memcpy);