diff options
Diffstat (limited to 'include/linux/printk.h')
-rw-r--r-- | include/linux/printk.h | 24 |
1 files changed, 14 insertions, 10 deletions
diff --git a/include/linux/printk.h b/include/linux/printk.h index 4e29af49..8f8dd6b9 100644 --- a/include/linux/printk.h +++ b/include/linux/printk.h @@ -21,23 +21,27 @@ static inline int vscnprintf(char *buf, size_t size, const char *fmt, va_list args) { - int i = vsnprintf(buf, size, fmt, args); - ssize_t ssize = size; + int i; - return (i >= ssize) ? (ssize - 1) : i; + i = vsnprintf(buf, size, fmt, args); + + if (likely(i < size)) + return i; + if (size != 0) + return size - 1; + return 0; } static inline int scnprintf(char * buf, size_t size, const char * fmt, ...) { - ssize_t ssize = size; - va_list args; - int i; + va_list args; + int i; - va_start(args, fmt); - i = vsnprintf(buf, size, fmt, args); - va_end(args); + va_start(args, fmt); + i = vscnprintf(buf, size, fmt, args); + va_end(args); - return (i >= ssize) ? (ssize - 1) : i; + return i; } #define printk(...) printf(__VA_ARGS__) |