aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMattias Andrée <maandree@kth.se>2018-11-16 20:45:56 +0100
committerMattias Andrée <maandree@kth.se>2018-11-16 20:45:56 +0100
commiteb3ac9af10990de4dfda5495831ca8e34a44a958 (patch)
tree58c82478e483aa56e1888126ea3add35581914f5
parentmemisutf8: string can be NULL (if n is 0) (diff)
downloadlibsimple-eb3ac9af10990de4dfda5495831ca8e34a44a958.tar.gz
libsimple-eb3ac9af10990de4dfda5495831ca8e34a44a958.tar.bz2
libsimple-eb3ac9af10990de4dfda5495831ca8e34a44a958.tar.xz
Add mempmove
Signed-off-by: Mattias Andrée <maandree@kth.se>
-rw-r--r--libsimple/mem.h20
-rw-r--r--man0/libsimple.h.06
-rw-r--r--man3/libsimple_mempcpy.313
-rw-r--r--man3/libsimple_mempmove.372
-rw-r--r--man3/libsimple_mempset.31
l---------man3/mempmove.3libsimple1
6 files changed, 109 insertions, 4 deletions
diff --git a/libsimple/mem.h b/libsimple/mem.h
index 9b9e9c4..370709c 100644
--- a/libsimple/mem.h
+++ b/libsimple/mem.h
@@ -368,10 +368,10 @@ static inline int libsimple_memcaseeq(const void *__a, const void *__b, size_t _
* @param d The array the bytes should be copied into
* @param s The array of bytes that should be copied
* @param n The number of bytes to copy
- * @return `&s[n]`
+ * @return `&d[n]`
*/
_LIBSIMPLE_GCC_ONLY(__attribute__((__warn_unused_result__)))
-static inline void *libsimple_mempcpy(void *__d, const void *__s, size_t __n)
+static inline void *libsimple_mempcpy(void *restrict __d, const void *restrict __s, size_t __n)
{ return &((char *)memcpy(__d, __s, __n))[__n]; }
#ifndef mempcpy
# define mempcpy libsimple_mempcpy
@@ -379,6 +379,22 @@ static inline void *libsimple_mempcpy(void *__d, const void *__s, size_t __n)
/**
+ * Moves bytes within an array of bytes
+ *
+ * @param d The location in the array the bytes should be moved to
+ * @param s The bytes that should be moved
+ * @param n The number of bytes to move
+ * @return `&d[n]`
+ */
+_LIBSIMPLE_GCC_ONLY(__attribute__((__warn_unused_result__)))
+static inline void *libsimple_mempmove(void *__d, const void *__s, size_t __n)
+{ return &((char *)memmove(__d, __s, __n))[__n]; }
+#ifndef mempmove
+# define mempmove libsimple_mempmove
+#endif
+
+
+/**
* Fill an array of bytes with a specified byte
*
* @param s The array of bytes to fill
diff --git a/man0/libsimple.h.0 b/man0/libsimple.h.0
index e5e51d1..ff00c4b 100644
--- a/man0/libsimple.h.0
+++ b/man0/libsimple.h.0
@@ -585,6 +585,12 @@ Version of
that returns the end of the written array.
.TP
+.BR libsimple_mempmove (3)
+Version of
+.BR memmove
+that returns the end of the written array.
+
+.TP
.BR libsimple_mempset (3)
Version of
.BR memset
diff --git a/man3/libsimple_mempcpy.3 b/man3/libsimple_mempcpy.3
index bf9e6bc..c23a041 100644
--- a/man3/libsimple_mempcpy.3
+++ b/man3/libsimple_mempcpy.3
@@ -1,11 +1,11 @@
-.TH LIBSIMPLE_MEMPCPY 3 2018-10-23 libsimple
+.TH LIBSIMPLE_MEMPCPY 3 2018-11-16 libsimple
.SH NAME
libsimple_mempcpy \- copy an array of bytes into another
.SH SYNOPSIS
.nf
#include <libsimple.h>
-static inline void *libsimple_mempcpy(void *\fIdest\fP, const void *\fIsrc\fP, size_t \fIn\fP);
+static inline void *libsimple_mempcpy(void *restrict \fIdest\fP, const void *restrict \fIsrc\fP, size_t \fIn\fP);
#ifndef mempcpy
# define mempcpy libsimple_mempcpy
@@ -23,6 +23,14 @@ bytes of
.I src
into
.IR dest .
+The first
+.I n
+bytes of
+.I dest
+must not overlap with the first
+.I n
+bytes of
+.IR src .
.SH RETURN VALUE
The
.BR libsimple_mempcpy ()
@@ -66,6 +74,7 @@ None.
.SH BUGS
None.
.SH SEE ALSO
+.BR libsimple_mempmove (3),
.BR libsimple_mempset (3),
.BR memcpy (3),
.BR stpncpy (3),
diff --git a/man3/libsimple_mempmove.3 b/man3/libsimple_mempmove.3
new file mode 100644
index 0000000..d68c6dc
--- /dev/null
+++ b/man3/libsimple_mempmove.3
@@ -0,0 +1,72 @@
+.TH LIBSIMPLE_MEMPMOVE 3 2018-10-23 libsimple
+.SH NAME
+libsimple_mempmove \- move bytes within an array of bytes
+.SH SYNOPSIS
+.nf
+#include <libsimple.h>
+
+static inline void *libsimple_mempmove(void *\fIdest\fP, const void *\fIsrc\fP, size_t \fIn\fP);
+
+#ifndef mempmove
+# define mempmove libsimple_mempmove
+#endif
+.fi
+.PP
+Link with
+.IR \-lsimple .
+.SH DESCRIPTION
+The
+.BR libsimple_mempmove ()
+function copies the first
+.I n
+bytes of
+.I src
+into
+.IR dest .
+The arrays may overlap.
+.SH RETURN VALUE
+The
+.BR libsimple_mempmove ()
+function returns the pointer
+.I dest
+with the offset
+.I n
+(the byte where the copy stopped).
+.SH ERRORS
+The
+.BR libsimple_mempmove ()
+function cannot fail.
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lb lb lb
+l l l.
+Interface Attribute Value
+T{
+.BR libsimple_mempmove ()
+T} Thread safety MT-Safe
+T{
+.BR libsimple_mempmove ()
+T} Async-signal safety AS-Safe
+T{
+.BR libsimple_mempmove ()
+T} Async-cancel safety AC-Safe
+.TE
+.SH EXAMPLES
+None.
+.SH APPLICATION USAGE
+None.
+.SH RATIONALE
+None.
+.SH FUTURE DIRECTIONS
+None.
+.SH NOTES
+None.
+.SH BUGS
+None.
+.SH SEE ALSO
+.BR libsimple_mempcpy (3),
+.BR libsimple_mempset (3),
+.BR memmove (3)
diff --git a/man3/libsimple_mempset.3 b/man3/libsimple_mempset.3
index c88257b..e6ce289 100644
--- a/man3/libsimple_mempset.3
+++ b/man3/libsimple_mempset.3
@@ -70,4 +70,5 @@ None.
.SH SEE ALSO
.BR libsimple_mempsetelem (3),
.BR libsimple_mempcpy (3),
+.BR libsimple_mempmove (3),
.BR memset (3)
diff --git a/man3/mempmove.3libsimple b/man3/mempmove.3libsimple
new file mode 120000
index 0000000..2f8fd2c
--- /dev/null
+++ b/man3/mempmove.3libsimple
@@ -0,0 +1 @@
+libsimple_mempmove.3 \ No newline at end of file