diff options
author | johannst <johannes.stoelp@gmail.com> | 2021-03-20 02:34:01 +0100 |
---|---|---|
committer | johannst <johannes.stoelp@gmail.com> | 2021-03-20 02:34:01 +0100 |
commit | ef6a411ce8ff615d65e2be105834c2fdbe557de1 (patch) | |
tree | 3336df00ca14b6783486188fed5b4dde5df6cec3 /include/fmt.h | |
parent | 3cbf2298b2b3dc24355449131d2e496f8e02b8f5 (diff) | |
download | dynld-ef6a411ce8ff615d65e2be105834c2fdbe557de1.tar.gz dynld-ef6a411ce8ff615d65e2be105834c2fdbe557de1.zip |
Split common headers in header/src files.
Diffstat (limited to 'include/fmt.h')
-rw-r--r-- | include/fmt.h | 130 |
1 files changed, 0 insertions, 130 deletions
diff --git a/include/fmt.h b/include/fmt.h deleted file mode 100644 index f4be0b1..0000000 --- a/include/fmt.h +++ /dev/null @@ -1,130 +0,0 @@ -// Copyright (c) 2020 Johannes Stoelp - -#pragma once - -#include <stdarg.h> - -#define ALLOW_UNUSED __attribute__((unused)) - -static const char* num2dec(char* buf, unsigned long len, unsigned long long num); -static const char* num2hex(char* buf, unsigned long len, unsigned long long num); - -ALLOW_UNUSED -static int vfmt(char* buf, unsigned long len, const char* fmt, va_list ap) { - unsigned i = 0; - -#define put(c) \ - { \ - char _c = (c); \ - if (i < len) { \ - buf[i] = _c; \ - } \ - ++i; \ - } - -#define puts(s) \ - while (*s) { \ - put(*s++); \ - } - - char scratch[16]; - int l_cnt = 0; - - while (*fmt) { - if (*fmt != '%') { - put(*fmt++); - continue; - } - - l_cnt = 0; - - continue_fmt: - switch (*(++fmt /* constume '%' */)) { - case 'l': - ++l_cnt; - goto continue_fmt; - case 'd': { - long val = l_cnt > 0 ? va_arg(ap, long) : va_arg(ap, int); - if (val < 0) { - val *= -1; - put('-'); - } - const char* ptr = num2dec(scratch, sizeof(scratch), val); - puts(ptr); - } break; - case 'x': { - unsigned long val = l_cnt > 0 ? va_arg(ap, unsigned long) : va_arg(ap, unsigned); - const char* ptr = num2hex(scratch, sizeof(scratch), val); - puts(ptr); - } break; - case 's': { - const char* ptr = va_arg(ap, const char*); - puts(ptr); - } break; - case 'p': { - const void* val = va_arg(ap, const void*); - const char* ptr = num2hex(scratch, sizeof(scratch), (unsigned long long)val); - put('0'); - put('x'); - puts(ptr); - } break; - default: - put(*fmt); - break; - } - ++fmt; - } - -#undef puts -#undef put - - if (buf) { - i < len ? (buf[i] = '\0') : (buf[len - 1] = '\0'); - } - return i; -} - -ALLOW_UNUSED -static int fmt(char* buf, unsigned long len, const char* fmt, ...) { - va_list ap; - va_start(ap, fmt); - int ret = vfmt(buf, len, fmt, ap); - va_end(ap); - return ret; -} - -/// Internal Helper - -ALLOW_UNUSED -static const char* num2dec(char* buf, unsigned long len, unsigned long long num) { - char* pbuf = buf + len - 1; - *pbuf = '\0'; - - if (num == 0) { - *(--pbuf) = '0'; - } - - while (num > 0 && pbuf != buf) { - char d = (num % 10) + '0'; - *(--pbuf) = d; - num /= 10; - } - return pbuf; -} - -ALLOW_UNUSED -static const char* num2hex(char* buf, unsigned long len, unsigned long long num) { - char* pbuf = buf + len - 1; - *pbuf = '\0'; - - if (num == 0) { - *(--pbuf) = '0'; - } - - while (num > 0 && pbuf != buf) { - char d = (num & 0xf); - *(--pbuf) = d + (d > 9 ? 'a' - 10 : '0'); - num >>= 4; - } - return pbuf; -} |