diff --git a/src/arch/x86/include/bits/string.h b/src/arch/x86/include/bits/string.h index e5850ed93..f0d3c9659 100644 --- a/src/arch/x86/include/bits/string.h +++ b/src/arch/x86/include/bits/string.h @@ -28,6 +28,14 @@ FILE_LICENCE ( PUBLIC_DOMAIN ); extern void * __memcpy ( void *dest, const void *src, size_t len ); extern void * __memcpy_reverse ( void *dest, const void *src, size_t len ); +/** + * Copy memory area (where length is a compile-time constant) + * + * @v dest Destination address + * @v src Source address + * @v len Length + * @ret dest Destination address + */ static inline __attribute__ (( always_inline )) void * __constant_memcpy ( void *dest, const void *src, size_t len ) { union { @@ -139,10 +147,22 @@ __constant_memcpy ( void *dest, const void *src, size_t len ) { return dest; } -#define memcpy( dest, src, len ) \ - ( __builtin_constant_p ( (len) ) ? \ - __constant_memcpy ( (dest), (src), (len) ) : \ - __memcpy ( (dest), (src), (len) ) ) +/** + * Copy memory area + * + * @v dest Destination address + * @v src Source address + * @v len Length + * @ret dest Destination address + */ +static inline __attribute__ (( always_inline )) void * +memcpy ( void *dest, const void *src, size_t len ) { + if ( __builtin_constant_p ( len ) ) { + return __constant_memcpy ( dest, src, len ); + } else { + return __memcpy ( dest, src, len ); + } +} #define __HAVE_ARCH_MEMMOVE diff --git a/src/include/string.h b/src/include/string.h index 2fd6acf16..3482e1b22 100644 --- a/src/include/string.h +++ b/src/include/string.h @@ -37,6 +37,7 @@ char * __pure strpbrk(const char * cs,const char * ct) __nonnull; char * strtok(char * s,const char * ct) __nonnull; char * strsep(char **s, const char *ct) __nonnull; void * memset(void * s,int c,size_t count) __nonnull; +void * memcpy ( void *dest, const void *src, size_t len ) __nonnull; void * memmove(void * dest,const void *src,size_t count) __nonnull; int __pure memcmp(const void * cs,const void * ct, size_t count) __nonnull;