• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) Huawei Technologies Co., Ltd. 2014-2021. All rights reserved.
3  * Licensed under Mulan PSL v2.
4  * You can use this software according to the terms and conditions of the Mulan PSL v2.
5  * You may obtain a copy of Mulan PSL v2 at:
6  *          http://license.coscl.org.cn/MulanPSL2
7  * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
8  * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
9  * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
10  * See the Mulan PSL v2 for more details.
11  * Description: snprintf_s  function
12  * Create: 2014-02-25
13  */
14 
15 #include "securec.h"
16 
17 #if SECUREC_ENABLE_SNPRINTF
18 /*
19  * <FUNCTION DESCRIPTION>
20  *    The snprintf_s function is equivalent to the snprintf function
21  *    except for the parameter destMax/count and the explicit runtime-constraints violation
22  *    The snprintf_s function formats and stores count or fewer characters in
23  *    strDest and appends a terminating null. Each argument (if any) is converted
24  *    and output according to the corresponding format specification in format.
25  *    The formatting is consistent with the printf family of functions; If copying
26  *    occurs between strings that overlap, the behavior is undefined.
27  *
28  * <INPUT PARAMETERS>
29  *    strDest                 Storage location for the output.
30  *    destMax                 The size of the storage location for output. Size
31  *                                 in bytes for snprintf_s or size in words for snwprintf_s.
32  *    count                    Maximum number of character to store.
33  *    format                  Format-control string.
34  *    ...                        Optional arguments.
35  *
36  * <OUTPUT PARAMETERS>
37  *    strDest                 is updated
38  *
39  * <RETURN VALUE>
40  *    return  the number of characters written, not including the terminating null
41  *    return -1 if an  error occurs.
42  *    return -1 if count < destMax and the output string  has been truncated
43  *
44  * If there is a runtime-constraint violation, strDest[0] will be set to the '\0' when strDest and destMax valid
45  *
46  */
snprintf_s(char * strDest,size_t destMax,size_t count,const char * format,...)47 int snprintf_s(char *strDest, size_t destMax, size_t count, const char *format, ...)
48 {
49     int ret;                    /* If initialization causes  e838 */
50     va_list argList;
51 
52     va_start(argList, format);
53     ret = vsnprintf_s(strDest, destMax, count, format, argList);
54     va_end(argList);
55     (void)argList;              /* To clear e438 last value assigned not used , the compiler will optimize this code */
56 
57     return ret;
58 }
59 #if SECUREC_EXPORT_KERNEL_SYMBOL
60 EXPORT_SYMBOL(snprintf_s);
61 #endif
62 #endif
63 
64 #if SECUREC_SNPRINTF_TRUNCATED
65 /*
66  * <FUNCTION DESCRIPTION>
67  *    The snprintf_truncated_s function is equivalent to the snprintf function
68  *    except for the parameter destMax/count and the explicit runtime-constraints violation
69  *    The snprintf_truncated_s function formats and stores count or fewer characters in
70  *    strDest and appends a terminating null. Each argument (if any) is converted
71  *    and output according to the corresponding format specification in format.
72  *    The formatting is consistent with the printf family of functions; If copying
73  *    occurs between strings that overlap, the behavior is undefined.
74  *
75  * <INPUT PARAMETERS>
76  *    strDest                 Storage location for the output.
77  *    destMax                 The size of the storage location for output. Size
78  *                                 in bytes for snprintf_truncated_s or size in words for snwprintf_s.
79  *    format                  Format-control string.
80  *    ...                        Optional arguments.
81  *
82  * <OUTPUT PARAMETERS>
83  *    strDest                 is updated
84  *
85  * <RETURN VALUE>
86  *    return  the number of characters written, not including the terminating null
87  *    return -1 if an  error occurs.
88  *    return destMax-1 if output string  has been truncated
89  *
90  * If there is a runtime-constraint violation, strDest[0] will be set to the '\0' when strDest and destMax valid
91  *
92  */
snprintf_truncated_s(char * strDest,size_t destMax,const char * format,...)93 int snprintf_truncated_s(char *strDest, size_t destMax, const char *format, ...)
94 {
95     int ret;                    /* If initialization causes  e838 */
96     va_list argList;
97 
98     va_start(argList, format);
99     ret = vsnprintf_truncated_s(strDest, destMax, format, argList);
100     va_end(argList);
101     (void)argList;              /* To clear e438 last value assigned not used , the compiler will optimize this code */
102 
103     return ret;
104 }
105 #if SECUREC_EXPORT_KERNEL_SYMBOL
106 EXPORT_SYMBOL(snprintf_truncated_s);
107 #endif
108 
109 #endif
110 
111