diff --git a/libs/libc/string/lib_bsdmemset.c b/libs/libc/string/lib_bsdmemset.c index 399774e1ced..1a0b0ecabd2 100644 --- a/libs/libc/string/lib_bsdmemset.c +++ b/libs/libc/string/lib_bsdmemset.c @@ -48,6 +48,7 @@ FAR void *memset(FAR void *m, int c, size_t n) { FAR libc_data_t *aligned_addr; FAR char *s = (FAR char *)m; + unsigned int d = (unsigned char)c; libc_data_t buffer; int i; @@ -70,7 +71,7 @@ FAR void *memset(FAR void *m, int c, size_t n) /* If we get this far, we know that n is large and s is word-aligned. */ aligned_addr = (FAR libc_data_t *)s; - buffer = ((unsigned int)c << 8) | c; + buffer = (d << 8) | d; buffer |= (buffer << 16); for (i = 32; i < LITTLEBLOCKSIZE * 8; i <<= 1) { diff --git a/libs/libc/string/lib_memset.c b/libs/libc/string/lib_memset.c index d19ed89e42d..facfae69ebf 100644 --- a/libs/libc/string/lib_memset.c +++ b/libs/libc/string/lib_memset.c @@ -50,7 +50,8 @@ FAR void *memset(FAR void *s, int c, size_t n) */ uintptr_t addr = (uintptr_t)s; - uint16_t val16 = ((uint16_t)c << 8) | (uint16_t)c; + uint8_t val8 = (uint8_t)c; + uint16_t val16 = ((uint16_t)val8 << 8) | (uint16_t)val8; uint32_t val32 = ((uint32_t)val16 << 16) | (uint32_t)val16; #ifdef CONFIG_LIBC_MEMSET_64BIT uint64_t val64 = ((uint64_t)val32 << 32) | (uint64_t)val32;