summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakob Kaivo <jkk@ung.org>2024-06-07 15:16:55 -0400
committerJakob Kaivo <jkk@ung.org>2024-06-07 15:16:55 -0400
commit586bba6bccbe04860e731f1e6a25a96e66d7a12a (patch)
treedd21293b18dbd8a23afa65db3c5bdda1efdee649
parent6b19315fe9c856f2941caf0721226264f4126b5b (diff)
support # flag for hex
-rw-r--r--src/stdio/__printf.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/src/stdio/__printf.c b/src/stdio/__printf.c
index 3471db74..4d0c697e 100644
--- a/src/stdio/__printf.c
+++ b/src/stdio/__printf.c
@@ -67,8 +67,8 @@ static void __output(struct io_options *opt, struct io_conversion *conv, const c
static void __utos(char *s, uintmax_t n, enum conversion_flags flags, int precision, int base)
{
- char lower[] = "0123456789abcdef";
- char upper[] = "0123456789ABCDEF";
+ char lower[] = "0123456789abcdefx";
+ char upper[] = "0123456789ABCDEFX";
char *digits = (flags & F_UPPER ? upper : lower);
char sign = '+';
char buf[NUMBUFLEN + 1];
@@ -95,6 +95,13 @@ static void __utos(char *s, uintmax_t n, enum conversion_flags flags, int precis
out--;
}
+ if ((flags & F_ALT) && base == 16) {
+ *out = digits[16];
+ out--;
+ *out = '0';
+ out--;
+ }
+
if (flags & F_SIGN) {
*out = sign;
out--;
@@ -117,6 +124,7 @@ static void __itos(char *s, intmax_t n, enum conversion_flags flags, int precisi
}
}
+GCC_SSE_HACK
int __printf(struct io_options *opt, const char * format, va_list arg)
{
char numbuf[NUMBUFLEN];