lib: Fix '%X' formatting
This commit is contained in:
@@ -12,3 +12,4 @@ void* memset(void* dest, int value, size_t n);
|
|||||||
char* strncpy(char* restrict dst, const char* restrict src, size_t len);
|
char* strncpy(char* restrict dst, const char* restrict src, size_t len);
|
||||||
int strcmp(const char* str1, const char* str2);
|
int strcmp(const char* str1, const char* str2);
|
||||||
int strncmp(const char* str1, const char* str2, size_t len);
|
int strncmp(const char* str1, const char* str2, size_t len);
|
||||||
|
char* strchr(const char* s, int c);
|
||||||
|
|||||||
+8
-2
@@ -234,6 +234,12 @@ check_fmt:
|
|||||||
lutoa(va_arg(args, uint64_t), number, 16);
|
lutoa(va_arg(args, uint64_t), number, 16);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
if (*fmt == 'X') {
|
||||||
|
for (char* c = number; *c; c++) {
|
||||||
|
if (*c >= 'a' && *c <= 'f')
|
||||||
|
*c -= 'a' - 'A';
|
||||||
|
}
|
||||||
|
}
|
||||||
print_num:
|
print_num:
|
||||||
const char* digits = number;
|
const char* digits = number;
|
||||||
char sign = 0;
|
char sign = 0;
|
||||||
@@ -260,7 +266,7 @@ print_num:
|
|||||||
if (sign)
|
if (sign)
|
||||||
callback(ctx, &sign, 1);
|
callback(ctx, &sign, 1);
|
||||||
if (write_prefix)
|
if (write_prefix)
|
||||||
callback(ctx, "0x", 2);
|
callback(ctx, *fmt == 'X' ? "0X" : "0x", 2);
|
||||||
print_pad(callback, ctx, '0', zeros);
|
print_pad(callback, ctx, '0', zeros);
|
||||||
callback(ctx, digits, len);
|
callback(ctx, digits, len);
|
||||||
if (left_align)
|
if (left_align)
|
||||||
@@ -285,7 +291,7 @@ print_num:
|
|||||||
callback(ctx, number, len);
|
callback(ctx, number, len);
|
||||||
|
|
||||||
fmt++;
|
fmt++;
|
||||||
written += len;
|
written += offset + len;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
// The number of characters written so far is stored in the pointed location.
|
// The number of characters written so far is stored in the pointed location.
|
||||||
|
|||||||
@@ -5,6 +5,9 @@
|
|||||||
|
|
||||||
[[__hot]]
|
[[__hot]]
|
||||||
size_t strlen(const char* str) {
|
size_t strlen(const char* str) {
|
||||||
|
if (!str)
|
||||||
|
return 0;
|
||||||
|
|
||||||
size_t result = 0;
|
size_t result = 0;
|
||||||
while (*str++) {
|
while (*str++) {
|
||||||
result++;
|
result++;
|
||||||
@@ -14,6 +17,9 @@ size_t strlen(const char* str) {
|
|||||||
|
|
||||||
[[__hot]]
|
[[__hot]]
|
||||||
size_t strnlen(const char* str, size_t len) {
|
size_t strnlen(const char* str, size_t len) {
|
||||||
|
if (!str || len == 0)
|
||||||
|
return 0;
|
||||||
|
|
||||||
size_t result = 0;
|
size_t result = 0;
|
||||||
while (result < len && *str++) {
|
while (result < len && *str++) {
|
||||||
result++;
|
result++;
|
||||||
|
|||||||
Reference in New Issue
Block a user