xref: /optee_os/lib/libutils/isoc/sprintf.c (revision b224894f4c344bd7340c51cf268e8797d8730fd4)
1f35d131bSJerome Forissier // SPDX-License-Identifier: BSD-2-Clause
2f35d131bSJerome Forissier /*
3f35d131bSJerome Forissier  * Copyright (c) 2020, Huawei Technologies Co., Ltd
4f35d131bSJerome Forissier  */
5f35d131bSJerome Forissier 
6*b224894fSSumit Garg #include <compiler.h>
7f35d131bSJerome Forissier #include <printk.h>
8f35d131bSJerome Forissier #include <stdio.h>
9*b224894fSSumit Garg #include <stdlib.h>
10f35d131bSJerome Forissier 
sprintf(char * str,const char * fmt,...)11f35d131bSJerome Forissier int sprintf(char *str, const char *fmt, ...)
12f35d131bSJerome Forissier {
13f35d131bSJerome Forissier 	int retval;
14f35d131bSJerome Forissier 	va_list ap;
15f35d131bSJerome Forissier 
16f35d131bSJerome Forissier 	va_start(ap, fmt);
17f35d131bSJerome Forissier 	retval = __vsprintf(str, fmt, ap);
18f35d131bSJerome Forissier 	va_end(ap);
19f35d131bSJerome Forissier 
20f35d131bSJerome Forissier 	return retval;
21f35d131bSJerome Forissier }
22*b224894fSSumit Garg 
__sprintf_chk(char * str,int flag __unused,size_t slen,const char * fmt,...)23*b224894fSSumit Garg int __sprintf_chk(char *str, int flag __unused, size_t slen,
24*b224894fSSumit Garg 		  const char *fmt, ...)
25*b224894fSSumit Garg {
26*b224894fSSumit Garg 	int retval;
27*b224894fSSumit Garg 	va_list ap;
28*b224894fSSumit Garg 
29*b224894fSSumit Garg 	if (slen == 0)
30*b224894fSSumit Garg 		abort();
31*b224894fSSumit Garg 
32*b224894fSSumit Garg 	va_start(ap, fmt);
33*b224894fSSumit Garg 	retval = __vsnprintf(str, slen, fmt, ap, false);
34*b224894fSSumit Garg 	va_end(ap);
35*b224894fSSumit Garg 
36*b224894fSSumit Garg 	if (retval > 0 && (size_t)retval >= slen)
37*b224894fSSumit Garg 		abort();
38*b224894fSSumit Garg 
39*b224894fSSumit Garg 	return retval;
40*b224894fSSumit Garg }
41