mirror of
https://xff.cz/git/u-boot/
synced 2025-09-02 01:02:19 +02:00
Add safe vsnprintf and snprintf library functions
From: Sonny Rao <sonnyrao@chromium.org> These functions are useful in U-Boot because they allow a graceful failure rather than an unpredictable stack overflow when printf() buffers are exceeded. Mostly copied from the Linux kernel. I copied vscnprintf and scnprintf so we can change printf and vprintf to use the safe implementation but still return the correct values. (Simon Glass <sjg@chromium.org> modified this commit a little) Signed-off-by: Sonny Rao <sonnyrao@chromium.org>
This commit is contained in:
@@ -36,4 +36,23 @@ int sprintf(char *buf, const char *fmt, ...)
|
||||
int vsprintf(char *buf, const char *fmt, va_list args);
|
||||
char *simple_itoa(ulong i);
|
||||
|
||||
#ifdef CONFIG_SYS_VSNPRINTF
|
||||
int snprintf(char *buf, size_t size, const char *fmt, ...)
|
||||
__attribute__ ((format (__printf__, 3, 4)));
|
||||
int scnprintf(char *buf, size_t size, const char *fmt, ...)
|
||||
__attribute__ ((format (__printf__, 3, 4)));
|
||||
int vsnprintf(char *buf, size_t size, const char *fmt, va_list args);
|
||||
int vscnprintf(char *buf, size_t size, const char *fmt, va_list args);
|
||||
#else
|
||||
/*
|
||||
* Use macros to silently drop the size parameter. Note that the 'cn'
|
||||
* versions are the same as the 'n' versions since the functions assume
|
||||
* there is always enough buffer space when !CONFIG_SYS_VSNPRINTF
|
||||
*/
|
||||
#define snprintf(buf, size, fmt, args...) sprintf(buf, fmt, ##args)
|
||||
#define scnprintf(buf, size, fmt, args...) sprintf(buf, fmt, ##args)
|
||||
#define vsnprintf(buf, size, fmt, args...) vsprintf(buf, fmt, ##args)
|
||||
#define vscnprintf(buf, size, fmt, args...) vsprintf(buf, fmt, ##args)
|
||||
#endif /* CONFIG_SYS_VSNPRINTF */
|
||||
|
||||
#endif
|
||||
|
Reference in New Issue
Block a user