Added chvsnprintf().
git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@12534 110e8d01-0319-4d1e-a829-52ad28d1bb01
This commit is contained in:
parent
8da7cad86d
commit
6421004d21
|
@ -339,6 +339,45 @@ int chprintf(BaseSequentialStream *chp, const char *fmt, ...) {
|
|||
*/
|
||||
int chsnprintf(char *str, size_t size, const char *fmt, ...) {
|
||||
va_list ap;
|
||||
int retval;
|
||||
|
||||
/* Performing the print operation.*/
|
||||
va_start(ap, fmt);
|
||||
retval = chvsnprintf(str, size, fmt, ap);
|
||||
va_end(ap);
|
||||
|
||||
/* Return number of bytes that would have been written.*/
|
||||
return retval;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief System formatted output function.
|
||||
* @details This function implements a minimal @p vsnprintf()-like functionality.
|
||||
* 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.
|
||||
* .
|
||||
* @post @p str is NUL-terminated, unless @p size is 0.
|
||||
*
|
||||
* @param[in] str pointer to a buffer
|
||||
* @param[in] size maximum size of the buffer
|
||||
* @param[in] ap list of parameters
|
||||
* @return The number of characters (excluding the
|
||||
* terminating NUL byte) that would have been
|
||||
* stored in @p str if there was room.
|
||||
*
|
||||
* @api
|
||||
*/
|
||||
int chvsnprintf(char *str, size_t size, const char *fmt, va_list ap) {
|
||||
MemoryStream ms;
|
||||
BaseSequentialStream *chp;
|
||||
size_t size_wo_nul;
|
||||
|
@ -355,13 +394,12 @@ int chsnprintf(char *str, size_t size, const char *fmt, ...) {
|
|||
|
||||
/* Performing the print operation using the common code.*/
|
||||
chp = (BaseSequentialStream *)(void *)&ms;
|
||||
va_start(ap, fmt);
|
||||
retval = chvprintf(chp, fmt, ap);
|
||||
va_end(ap);
|
||||
|
||||
/* Terminate with a zero, unless size==0.*/
|
||||
if (ms.eos < size)
|
||||
str[ms.eos] = 0;
|
||||
if (ms.eos < size) {
|
||||
str[ms.eos] = 0;
|
||||
}
|
||||
|
||||
/* Return number of bytes that would have been written.*/
|
||||
return retval;
|
||||
|
|
|
@ -40,6 +40,7 @@ extern "C" {
|
|||
int chvprintf(BaseSequentialStream *chp, const char *fmt, va_list ap);
|
||||
int chprintf(BaseSequentialStream *chp, const char *fmt, ...);
|
||||
int chsnprintf(char *str, size_t size, const char *fmt, ...);
|
||||
int chvsnprintf(char *str, size_t size, const char *fmt, va_list ap);
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -75,6 +75,7 @@
|
|||
*****************************************************************************
|
||||
|
||||
*** Next ***
|
||||
- NEW: Added chvsnprintf().
|
||||
- NEW: Event enable check API added to PAL driver.
|
||||
- NEW: Now it is possible to define separate directories for each
|
||||
configuration file.
|
||||
|
|
Loading…
Reference in New Issue