summaryrefslogtreecommitdiffstats
path: root/src/include/gpxe/vsprintf.h
diff options
context:
space:
mode:
authorMichael Brown2007-01-19 02:17:23 +0100
committerMichael Brown2007-01-19 02:17:23 +0100
commitf4c1e564a1da2f755b25019273b20aa7964dd784 (patch)
treeb8681bf9d6903b31f00889e45f5835a8169ea5b3 /src/include/gpxe/vsprintf.h
parentUse stdio.h instead of vsprintf.h (diff)
downloadipxe-f4c1e564a1da2f755b25019273b20aa7964dd784.tar.gz
ipxe-f4c1e564a1da2f755b25019273b20aa7964dd784.tar.xz
ipxe-f4c1e564a1da2f755b25019273b20aa7964dd784.zip
vsprintf.h is gPXE-specific; move it to include/gpxe
Diffstat (limited to 'src/include/gpxe/vsprintf.h')
-rw-r--r--src/include/gpxe/vsprintf.h67
1 files changed, 67 insertions, 0 deletions
diff --git a/src/include/gpxe/vsprintf.h b/src/include/gpxe/vsprintf.h
new file mode 100644
index 000000000..ac87c5a8b
--- /dev/null
+++ b/src/include/gpxe/vsprintf.h
@@ -0,0 +1,67 @@
+#ifndef _GPXE_VSPRINTF_H
+#define _GPXE_VSPRINTF_H
+
+/** @file
+ *
+ * printf() and friends
+ *
+ * Etherboot's printf() functions understand the following subset of
+ * the standard C printf()'s format specifiers:
+ *
+ * - Flag characters
+ * - '#' - Alternate form (i.e. "0x" prefix)
+ * - '0' - Zero-pad
+ * - Field widths
+ * - Length modifiers
+ * - 'hh' - Signed / unsigned char
+ * - 'h' - Signed / unsigned short
+ * - 'l' - Signed / unsigned long
+ * - 'll' - Signed / unsigned long long
+ * - 'z' - Signed / unsigned size_t
+ * - Conversion specifiers
+ * - 'd' - Signed decimal
+ * - 'x','X' - Unsigned hexadecimal
+ * - 'c' - Character
+ * - 's' - String
+ * - 'p' - Pointer
+ *
+ * Hexadecimal numbers are always zero-padded to the specified field
+ * width (if any); decimal numbers are always space-padded. Decimal
+ * long longs are not supported.
+ *
+ */
+
+#include <stdint.h>
+#include <stdarg.h>
+#include <stdio.h>
+
+/**
+ * A printf context
+ *
+ * Contexts are used in order to be able to share code between
+ * vprintf() and vsnprintf(), without requiring the allocation of a
+ * buffer for vprintf().
+ */
+struct printf_context {
+ /**
+ * Character handler
+ *
+ * @v ctx Context
+ * @v c Character
+ *
+ * This method is called for each character written to the
+ * formatted string.
+ */
+ void ( * handler ) ( struct printf_context *ctx, unsigned int c );
+ /** Length of formatted string
+ *
+ * When handler() is called, @len will be set to the number of
+ * characters written so far (i.e. zero for the first call to
+ * handler()).
+ */
+ size_t len;
+};
+
+extern size_t vcprintf ( struct printf_context *ctx, const char *fmt,
+ va_list args );
+#endif /* _GPXE_VSPRINTF_H */