aboutsummaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
Diffstat (limited to 'include')
-rw-r--r--include/fmt.h77
-rw-r--r--include/io.h10
2 files changed, 46 insertions, 41 deletions
diff --git a/include/fmt.h b/include/fmt.h
index c74ac4c..f4be0b1 100644
--- a/include/fmt.h
+++ b/include/fmt.h
@@ -6,42 +6,11 @@
#define ALLOW_UNUSED __attribute__((unused))
-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;
-}
+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 dynld_vsnprintf(char* buf, unsigned long len, const char* fmt, va_list ap) {
+static int vfmt(char* buf, unsigned long len, const char* fmt, va_list ap) {
unsigned i = 0;
#define put(c) \
@@ -116,10 +85,46 @@ static int dynld_vsnprintf(char* buf, unsigned long len, const char* fmt, va_lis
}
ALLOW_UNUSED
-static int dynld_snprintf(char* buf, unsigned long len, const char* fmt, ...) {
+static int fmt(char* buf, unsigned long len, const char* fmt, ...) {
va_list ap;
va_start(ap, fmt);
- int ret = dynld_vsnprintf(buf, len, fmt, ap);
+ 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;
+}
diff --git a/include/io.h b/include/io.h
index 4b3ea4b..d9a1ae1 100644
--- a/include/io.h
+++ b/include/io.h
@@ -7,7 +7,7 @@
#include <asm/unistd.h>
-// `dynld_printf` uses fixed-size buffer on the stack for formating the message
+// `pfmt` uses fixed-size buffer on the stack for formating the message
// (since we don't impl buffered I/O).
//
// Size can be re-configured by defining `MAX_PRINTF_LEN` before including
@@ -16,24 +16,24 @@
// NOTE: This allows to specify an arbitrarily large buffer on the stack, but
// for the purpose of this study that's fine, we are cautious.
#if !defined(MAX_PRINTF_LEN)
-# define MAX_PRINTF_LEN 64
+# define MAX_PRINTF_LEN 128
#endif
#define FD_STDOUT 1
#define FD_STDERR 2
-int dynld_printf(const char* fmt, ...) {
+static int pfmt(const char* fmt, ...) {
char buf[MAX_PRINTF_LEN];
va_list ap;
va_start(ap, fmt);
- int ret = dynld_vsnprintf(buf, sizeof(buf), fmt, ap);
+ int ret = vfmt(buf, sizeof(buf), fmt, ap);
va_end(ap);
if (ret > MAX_PRINTF_LEN - 1) {
syscall3(__NR_write, FD_STDERR, buf, MAX_PRINTF_LEN - 1);
- static const char warn[] = "\ndynld_printf: Message truncated, max length can be configured by defining MAX_PRINTF_LEN\n";
+ static const char warn[] = "\npfmt: Message truncated, max length can be configured by defining MAX_PRINTF_LEN\n";
syscall3(__NR_write, FD_STDOUT, warn, sizeof(warn));
return MAX_PRINTF_LEN - 1;
}