[libc-commits] [PATCH] D94760: [libc][NFC] remove dependency on non standard ssize_t
Guillaume Chatelet via Phabricator via libc-commits
libc-commits at lists.llvm.org
Fri Jan 15 07:42:27 PST 2021
gchatelet updated this revision to Diff 316953.
gchatelet added a comment.
- buffer values are never modified so we can use `char` instead of `unsigned char`.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D94760/new/
https://reviews.llvm.org/D94760
Files:
libc/src/string/memmove.cpp
Index: libc/src/string/memmove.cpp
===================================================================
--- libc/src/string/memmove.cpp
+++ libc/src/string/memmove.cpp
@@ -11,21 +11,25 @@
#include "src/stdlib/abs_utils.h"
#include "src/string/memcpy.h"
#include <stddef.h> // size_t, ptrdiff_t
-#include <unistd.h> // ssize_t
namespace __llvm_libc {
-// src_m and dest_m might be the beginning or end.
-static inline void move_byte(unsigned char *dest_m, const unsigned char *src_m,
- size_t count, ssize_t direction) {
- for (ssize_t offset = 0; count; --count, offset += direction)
+static inline void move_byte_forward(char *dest_m, const char *src_m,
+ size_t count) {
+ for (size_t offset = 0; count; --count, ++offset)
+ dest_m[offset] = src_m[offset];
+}
+
+static inline void move_byte_backward(char *dest_m, const char *src_m,
+ size_t count) {
+ for (size_t offset = count - 1; count; --count, --offset)
dest_m[offset] = src_m[offset];
}
LLVM_LIBC_FUNCTION(void *, memmove,
(void *dest, const void *src, size_t count)) {
- unsigned char *dest_c = reinterpret_cast<unsigned char *>(dest);
- const unsigned char *src_c = reinterpret_cast<const unsigned char *>(src);
+ char *dest_c = reinterpret_cast<char *>(dest);
+ const char *src_c = reinterpret_cast<const char *>(src);
// If the distance between src_c and dest_c is equal to or greater
// than count (integer_abs(src_c - dest_c) >= count), they would not overlap.
@@ -50,11 +54,11 @@
// src_c : [___abcde_] [_abcde___]
// dest_c: [_abc--___] [___--cde_]
- // TODO: Optimize `move_byte(...)` function.
+ // TODO: Optimize `move_byte_xxx(...)` functions.
if (dest_c < src_c)
- move_byte(dest_c, src_c, count, /*pointer add*/ 1);
+ move_byte_forward(dest_c, src_c, count);
if (dest_c > src_c)
- move_byte(dest_c + count - 1, src_c + count - 1, count, /*pointer add*/ -1);
+ move_byte_backward(dest_c, src_c, count);
return dest;
}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D94760.316953.patch
Type: text/x-patch
Size: 2083 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/libc-commits/attachments/20210115/2dd4398a/attachment.bin>
More information about the libc-commits
mailing list