summaryrefslogtreecommitdiffstats
path: root/src/core/string.c
diff options
context:
space:
mode:
authorSimon Rettberg2020-08-12 12:27:02 +0200
committerSimon Rettberg2020-08-12 12:27:02 +0200
commitdf1f1c469e65156c18dd98931618a7d37c9d8691 (patch)
tree12bf4fe1a74701b5f86a696d1e28822dac055765 /src/core/string.c
parentRevert "Revert "[build] Construct full version number automatically from git ... (diff)
parent[efi] Use device path to locate filesystem from which we were loaded (diff)
downloadipxe-df1f1c469e65156c18dd98931618a7d37c9d8691.tar.gz
ipxe-df1f1c469e65156c18dd98931618a7d37c9d8691.tar.xz
ipxe-df1f1c469e65156c18dd98931618a7d37c9d8691.zip
Merge branch 'master' into openslx
Diffstat (limited to 'src/core/string.c')
-rw-r--r--src/core/string.c27
1 files changed, 21 insertions, 6 deletions
diff --git a/src/core/string.c b/src/core/string.c
index 5bd9dae8b..188fe0864 100644
--- a/src/core/string.c
+++ b/src/core/string.c
@@ -52,7 +52,7 @@ void * generic_memset ( void *dest, int character, size_t len ) {
}
/**
- * Copy memory region
+ * Copy memory region (forwards)
*
* @v dest Destination region
* @v src Source region
@@ -69,25 +69,40 @@ void * generic_memcpy ( void *dest, const void *src, size_t len ) {
}
/**
- * Copy (possibly overlapping) memory region
+ * Copy memory region (backwards)
*
* @v dest Destination region
* @v src Source region
* @v len Length
* @ret dest Destination region
*/
-void * generic_memmove ( void *dest, const void *src, size_t len ) {
+void * generic_memcpy_reverse ( void *dest, const void *src, size_t len ) {
const uint8_t *src_bytes = ( src + len );
uint8_t *dest_bytes = ( dest + len );
- if ( dest < src )
- return generic_memcpy ( dest, src, len );
while ( len-- )
*(--dest_bytes) = *(--src_bytes);
return dest;
}
/**
+ * Copy (possibly overlapping) memory region
+ *
+ * @v dest Destination region
+ * @v src Source region
+ * @v len Length
+ * @ret dest Destination region
+ */
+void * generic_memmove ( void *dest, const void *src, size_t len ) {
+
+ if ( dest < src ) {
+ return generic_memcpy ( dest, src, len );
+ } else {
+ return generic_memcpy_reverse ( dest, src, len );
+ }
+}
+
+/**
* Compare memory regions
*
* @v first First region
@@ -101,7 +116,7 @@ int memcmp ( const void *first, const void *second, size_t len ) {
int diff;
while ( len-- ) {
- diff = ( *(second_bytes++) - *(first_bytes++) );
+ diff = ( *(first_bytes++) - *(second_bytes++) );
if ( diff )
return diff;
}