162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0
262306a36Sopenharmony_ci#include <sys/types.h>
362306a36Sopenharmony_ci#include <linux/kernel.h>
462306a36Sopenharmony_ci#include <stdio.h>
562306a36Sopenharmony_ci
662306a36Sopenharmony_ciint vscnprintf(char *buf, size_t size, const char *fmt, va_list args)
762306a36Sopenharmony_ci{
862306a36Sopenharmony_ci       int i = vsnprintf(buf, size, fmt, args);
962306a36Sopenharmony_ci       ssize_t ssize = size;
1062306a36Sopenharmony_ci
1162306a36Sopenharmony_ci       return (i >= ssize) ? (ssize - 1) : i;
1262306a36Sopenharmony_ci}
1362306a36Sopenharmony_ci
1462306a36Sopenharmony_ciint scnprintf(char * buf, size_t size, const char * fmt, ...)
1562306a36Sopenharmony_ci{
1662306a36Sopenharmony_ci       ssize_t ssize = size;
1762306a36Sopenharmony_ci       va_list args;
1862306a36Sopenharmony_ci       int i;
1962306a36Sopenharmony_ci
2062306a36Sopenharmony_ci       va_start(args, fmt);
2162306a36Sopenharmony_ci       i = vsnprintf(buf, size, fmt, args);
2262306a36Sopenharmony_ci       va_end(args);
2362306a36Sopenharmony_ci
2462306a36Sopenharmony_ci       return (i >= ssize) ? (ssize - 1) : i;
2562306a36Sopenharmony_ci}
2662306a36Sopenharmony_ci
2762306a36Sopenharmony_ciint scnprintf_pad(char * buf, size_t size, const char * fmt, ...)
2862306a36Sopenharmony_ci{
2962306a36Sopenharmony_ci	ssize_t ssize = size;
3062306a36Sopenharmony_ci	va_list args;
3162306a36Sopenharmony_ci	int i;
3262306a36Sopenharmony_ci
3362306a36Sopenharmony_ci	va_start(args, fmt);
3462306a36Sopenharmony_ci	i = vscnprintf(buf, size, fmt, args);
3562306a36Sopenharmony_ci	va_end(args);
3662306a36Sopenharmony_ci
3762306a36Sopenharmony_ci	if (i < (int) size) {
3862306a36Sopenharmony_ci		for (; i < (int) size; i++)
3962306a36Sopenharmony_ci			buf[i] = ' ';
4062306a36Sopenharmony_ci		buf[i] = 0x0;
4162306a36Sopenharmony_ci	}
4262306a36Sopenharmony_ci
4362306a36Sopenharmony_ci	return (i >= ssize) ? (ssize - 1) : i;
4462306a36Sopenharmony_ci}
45