aboutsummaryrefslogtreecommitdiff
path: root/src/common/libc
diff options
context:
space:
mode:
Diffstat (limited to 'src/common/libc')
-rw-r--r--src/common/libc/printf.c13
-rw-r--r--src/common/libc/string.c12
2 files changed, 15 insertions, 10 deletions
diff --git a/src/common/libc/printf.c b/src/common/libc/printf.c
index 68e08d8..8618741 100644
--- a/src/common/libc/printf.c
+++ b/src/common/libc/printf.c
@@ -69,10 +69,9 @@ int vsnprintf(char *buff, size_t len, const char* format, va_list ap){
}
case 'x': {
unsigned int hexa = va_arg(ap,int);
- unsigned int nb;
- int j, had_nonzero = 0;
- for(j = 0; j < 8; j++) {
- nb = (unsigned int)(hexa << (j*4));
+ int had_nonzero = 0;
+ for(int j = 0; j < 8; j++) {
+ unsigned int nb = (unsigned int)(hexa << (j*4));
nb = (nb >> 28) & 0xf;
// Skip the leading zeros
if (nb == 0) {
@@ -92,10 +91,8 @@ int vsnprintf(char *buff, size_t len, const char* format, va_list ap){
}
case 'p': {
unsigned int hexa = va_arg(ap,int);
- unsigned int nb;
- int j;
- for (j = 0; j < 8; j++) {
- nb = (unsigned int)(hexa << (j*4));
+ for (int j = 0; j < 8; j++) {
+ unsigned int nb = (unsigned int)(hexa << (j*4));
nb = (nb >> 28) & 0xf;
if (nb < 10)
PUTCHAR('0'+nb);
diff --git a/src/common/libc/string.c b/src/common/libc/string.c
index 82c290f..d2a5f2f 100644
--- a/src/common/libc/string.c
+++ b/src/common/libc/string.c
@@ -107,9 +107,17 @@ int memcmp(const void *va, const void *vb, size_t count) {
}
void *memset(void *dest, int val, size_t count) {
+ uint8_t uval = (val & 0xFF);
+ uint32_t wval = (uval<<24)|(uval<<16)|(uval<<8)|uval;
+
+ uint32_t *dest_w = (uint32_t*)dest;
+ for (size_t i = 0; i < count/4; i++) {
+ dest_w[i] = wval;
+ }
+
uint8_t *dest_c = (uint8_t*)dest;
- for (size_t i = 0; i < count; i++) {
- dest_c[i] = val;
+ for (size_t i = count - (count%4); i < count; i++) {
+ dest_c[i] = uval;
}
return dest;
}