]> Kevux Git Server - fll/commitdiff
Update: Use memmove() instead of memcpy() for memory append and memory append all...
authorKevin Day <Kevin@kevux.org>
Sun, 7 Jul 2024 03:09:41 +0000 (22:09 -0500)
committerKevin Day <Kevin@kevux.org>
Sun, 7 Jul 2024 03:09:41 +0000 (22:09 -0500)
These memory append functions do not state that the memory cannot overlap.
The use of memmove() is safer in that it allows for overlapping memory.

level_0/f_memory/c/memory/array.c
level_0/f_memory/c/memory/array.h

index d80db1d1ecab6aac39b9ee3b98a9d33b79e98ef9..d513835399c0781e33e80ae622fa6982575e4c6d 100644 (file)
@@ -44,7 +44,7 @@ extern "C" {
     }
 
     // Casting (void *) to (uint8_t *) should result in an increment of size 1 and avoids problems with (void *) having arithmetic issues.
-    memcpy((void *) (((uint8_t *) (*array)) + (*used * width)), source, width);
+    memmove((void *) (((uint8_t *) (*array)) + (*used * width)), source, width);
 
     ++(*used);
 
@@ -79,7 +79,7 @@ extern "C" {
     }
 
     // Casting (void *) to (uint8_t *) should result in an increment of size 1 and avoids problems with (void *) having arithmetic issues.
-    memcpy((void *) (((uint8_t *) (*array)) + (*used * width)), sources, width * amount);
+    memmove((void *) (((uint8_t *) (*array)) + (*used * width)), sources, width * amount);
 
     *used += amount;
 
index 3e68c3d6f1baa58e1036e766ad69e66e2a893a84..d8037bedb29e0441e198617a0e304448a92ed51d 100644 (file)
@@ -103,6 +103,8 @@ extern "C" {
  *   F_array_too_large (with error bit) if the new array length is too large.
  *   F_memory_not (with error bit) on out of memory.
  *   F_parameter (with error bit) if a parameter is invalid.
+ *
+ * @see memmove()
  */
 #ifndef _di_f_memory_array_append_
   extern f_status_t f_memory_array_append(const void * const source, const size_t width, void ** const array, f_number_unsigned_t * restrict const used, f_number_unsigned_t * restrict const size);
@@ -164,6 +166,8 @@ extern "C" {
  *   F_array_too_large (with error bit) if the new array length is too large.
  *   F_memory_not (with error bit) on out of memory.
  *   F_parameter (with error bit) if a parameter is invalid.
+ *
+ * @see memmove()
  */
 #ifndef _di_f_memory_array_append_all_
   extern f_status_t f_memory_array_append_all(const void * const sources, const f_number_unsigned_t amount, const size_t width, void ** const array, f_number_unsigned_t * restrict const used, f_number_unsigned_t * restrict const size);