aboutsummaryrefslogtreecommitdiffstats
path: root/os/various/chprintf.c
diff options
context:
space:
mode:
authorgdisirio <gdisirio@35acf78f-673a-0410-8e92-d51de3d6d3f4>2013-12-03 09:36:46 +0000
committergdisirio <gdisirio@35acf78f-673a-0410-8e92-d51de3d6d3f4>2013-12-03 09:36:46 +0000
commit130e3be57409f06dd395ef8626bf848097ea1b79 (patch)
tree5eb4e21a89a543453639eb63d85d437ca79254c0 /os/various/chprintf.c
parent5e84acec84ad4a804440c0ab1dfc7020ee07649f (diff)
downloadChibiOS-130e3be57409f06dd395ef8626bf848097ea1b79.tar.gz
ChibiOS-130e3be57409f06dd395ef8626bf848097ea1b79.tar.bz2
ChibiOS-130e3be57409f06dd395ef8626bf848097ea1b79.zip
chsnprintf() implementation added.
git-svn-id: svn://svn.code.sf.net/p/chibios/svn/branches/kernel_3_dev@6528 35acf78f-673a-0410-8e92-d51de3d6d3f4
Diffstat (limited to 'os/various/chprintf.c')
-rw-r--r--os/various/chprintf.c45
1 files changed, 45 insertions, 0 deletions
diff --git a/os/various/chprintf.c b/os/various/chprintf.c
index ffb6650f8..190a7defa 100644
--- a/os/various/chprintf.c
+++ b/os/various/chprintf.c
@@ -29,6 +29,7 @@
#include "ch.h"
#include "chprintf.h"
+#include "memstreams.h"
#define MAX_FILLER 11
#define FLOAT_PRECISION 100000
@@ -259,4 +260,48 @@ unsigned_common:
}
}
+/**
+ * @brief System formatted output function.
+ * @details This function implements a minimal @p vprintf()-like functionality
+ * with output on a @p BaseSequentialStream.
+ * The general parameters format is: %[-][width|*][.precision|*][l|L]p.
+ * The following parameter types (p) are supported:
+ * - <b>x</b> hexadecimal integer.
+ * - <b>X</b> hexadecimal long.
+ * - <b>o</b> octal integer.
+ * - <b>O</b> octal long.
+ * - <b>d</b> decimal signed integer.
+ * - <b>D</b> decimal signed long.
+ * - <b>u</b> decimal unsigned integer.
+ * - <b>U</b> decimal unsigned long.
+ * - <b>c</b> character.
+ * - <b>s</b> string.
+ * .
+ *
+ * @param[in] str pointer to a buffer
+ * @param[in] size maximum size of the buffer
+ * @param[in] fmt formatting string
+ * @param[in] ap list of parameters
+ *
+ * @api
+ */
+int chsnprintf(char *str, size_t size, const char *fmt, ...) {
+ va_list ap;
+ MemoryStream ms;
+ BaseSequentialStream *chp;
+
+ /* Memory stream object to be used as a string writer.*/
+ msObjectInit(&ms, (uint8_t *)str, size, 0);
+
+ /* Performing the print operation using the common code.*/
+ chp = (BaseSequentialStream *)&ms;
+ va_start(ap, fmt);
+ chvprintf(chp, fmt, ap);
+ va_end(ap);
+
+ /* Final zero and size return.*/
+ chSequentialStreamPut(chp, 0);
+ return ms.eos - 1;
+}
+
/** @} */