Rename memcpy() to memcpy_far() and add regular memcpy() code.
diff --git a/src/boot.c b/src/boot.c
index 1b5c3d8..5beca25 100644
--- a/src/boot.c
+++ b/src/boot.c
@@ -38,7 +38,7 @@
if (type == 4 && far_description != 0) {
char description[33];
/* first 32 bytes are significant */
- memcpy(MAKE_FARPTR(GET_SEG(SS), &description), far_description, 32);
+ memcpy_far(MAKE_FARPTR(GET_SEG(SS), &description), far_description, 32);
/* terminate string */
description[32] = 0;
printf(" [%.s]", description);
diff --git a/src/pcibios.c b/src/pcibios.c
index 3823c2e..4e29a43 100644
--- a/src/pcibios.c
+++ b/src/pcibios.c
@@ -132,7 +132,7 @@
u16 destseg = GET_FARVAR(regs->es, *(u16*)(regs->di+4));
// Memcpy pir table slots to dest buffer.
- memcpy(MAKE_FARPTR(destseg, d), pirtable_far, pirsize);
+ memcpy_far(MAKE_FARPTR(destseg, d), pirtable_far, pirsize);
// XXX - bochs bios sets bx to (1 << 9) | (1 << 11)
regs->bx = GET_FARPTR(pirtable_far->exclusive_irqs);
diff --git a/src/system.c b/src/system.c
index 2e19efa..04cd6ac 100644
--- a/src/system.c
+++ b/src/system.c
@@ -276,7 +276,7 @@
}
struct e820entry *e = &((struct e820entry *)GET_EBDA(e820_loc))[regs->bx];
- memcpy(MAKE_FARPTR(regs->es, regs->di), e, sizeof(*e));
+ memcpy_far(MAKE_FARPTR(regs->es, regs->di), e, sizeof(*e));
if (regs->bx == count-1)
regs->ebx = 0;
else
diff --git a/src/util.c b/src/util.c
index 60d9d09..b85a1a5 100644
--- a/src/util.c
+++ b/src/util.c
@@ -53,7 +53,7 @@
}
void *
-memcpy(void *far_d1, const void *far_s1, size_t len)
+memcpy_far(void *far_d1, const void *far_s1, size_t len)
{
u8 *d = far_d1;
u8 *s = (u8*)far_s1;
@@ -68,6 +68,15 @@
}
void *
+memcpy(void *d1, const void *s1, size_t len)
+{
+ u8 *d = (u8*)d1, *s = (u8*)s1;
+ while (len--)
+ *d++ = *s++;
+ return d1;
+}
+
+void *
memmove(void *d, const void *s, size_t len)
{
if (s >= d)
diff --git a/src/util.h b/src/util.h
index a9642b9..bff1fc2 100644
--- a/src/util.h
+++ b/src/util.h
@@ -60,6 +60,7 @@
void *memset(void *s, int c, size_t n);
void *memcpy(void *d1, const void *s1, size_t len);
+void *memcpy_far(void *far_d1, const void *far_s1, size_t len);
void *memmove(void *d, const void *s, size_t len);
struct bregs;