From eb3ac9af10990de4dfda5495831ca8e34a44a958 Mon Sep 17 00:00:00 2001 From: Mattias Andrée Date: Fri, 16 Nov 2018 20:45:56 +0100 Subject: Add mempmove MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Mattias Andrée --- libsimple/mem.h | 20 +++++++++++-- man0/libsimple.h.0 | 6 ++++ man3/libsimple_mempcpy.3 | 13 +++++++-- man3/libsimple_mempmove.3 | 72 +++++++++++++++++++++++++++++++++++++++++++++++ man3/libsimple_mempset.3 | 1 + man3/mempmove.3libsimple | 1 + 6 files changed, 109 insertions(+), 4 deletions(-) create mode 100644 man3/libsimple_mempmove.3 create mode 120000 man3/mempmove.3libsimple diff --git a/libsimple/mem.h b/libsimple/mem.h index 9b9e9c4..370709c 100644 --- a/libsimple/mem.h +++ b/libsimple/mem.h @@ -368,16 +368,32 @@ 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 #endif +/** + * 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 * 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 @@ -584,6 +584,12 @@ Version of .BR memcpy 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 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 -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 + +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 -- cgit v1.2.3-70-g09d2