diff options
author | Mattias Andrée <maandree@kth.se> | 2018-11-16 20:45:56 +0100 |
---|---|---|
committer | Mattias Andrée <maandree@kth.se> | 2018-11-16 20:45:56 +0100 |
commit | eb3ac9af10990de4dfda5495831ca8e34a44a958 (patch) | |
tree | 58c82478e483aa56e1888126ea3add35581914f5 | |
parent | memisutf8: string can be NULL (if n is 0) (diff) | |
download | libsimple-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.h | 20 | ||||
-rw-r--r-- | man0/libsimple.h.0 | 6 | ||||
-rw-r--r-- | man3/libsimple_mempcpy.3 | 13 | ||||
-rw-r--r-- | man3/libsimple_mempmove.3 | 72 | ||||
-rw-r--r-- | man3/libsimple_mempset.3 | 1 | ||||
l--------- | man3/mempmove.3libsimple | 1 |
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 |