• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /**
2 * @file hi_stdlib.h
3 *
4 * Copyright (c) 2020 HiSilicon (Shanghai) Technologies CO., LIMITED.
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
8 *
9 *     http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 *
17 * Description: A parameter is added to the security C APIs based on the standard C interface, that is, the upper
18 *              limit of the write operation address space to prevent out-of-bounds write.
19 CNcomment:安全C接口主要是基于标准C接口增加了一个参数,即写操作地址空间上限,从而防止写越界。CNend   \n
20 * Create: 2019-12-18
21 */
22 
23 /**
24  * @defgroup iot_secure_c Secure C library APIs
25  * @ingroup iot_secure
26  */
27 
28 #ifndef __HI_STDLIB_H__
29 #define __HI_STDLIB_H__
30 #include <hi_types_base.h>
31 
32 HI_START_HEADER
33 
34 #ifndef EOK
35 #define EOK 0
36 #endif
37 
38 #ifndef errno_t
39 typedef int errno_t;
40 #endif
41 
42 #ifndef size_t
43 typedef unsigned int size_t;
44 #endif
45 
46 /**
47 * @ingroup  iot_secure_c
48 * @brief  Copies the source string to the destination buffer.CNcomment:复制源字符串到目的缓冲区。CNend
49 *
50 * @par 描述: Copies the source string to the destination buffer.
51 CNcomment:复制源字符串到目的缓冲区。CNend
52 *
53 * @attention None
54 *
55 * @param dest     [OUT] type #char *, Destination buffer.CNcomment:目的缓冲区。CNend
56 * @param dest_max [IN]  type #size_t, Size of the destination buffer.CNcomment:目的缓冲区大小。CNend
57 * @param src      [IN]  type #const #char *, Source buffer.CNcomment:源缓冲区。CNend
58 *
59 * @retval #EOK Success
60 * @retval #Other Failure
61 *
62 * @par 依赖:
63 * @li hi_stdlib.h: This file declares the APIs.CNcomment:该接口声明所在的头文件。CNend
64 * @see None
65 */
66 extern errno_t strcpy_s(char *dest, size_t dest_max, const char *src);
67 
68 /**
69 * @ingroup  iot_secure_c
70 * @brief  Copies the source string of a specified length to the destination buffer.
71 CNcomment:复制指定长度源字符串到目的缓冲区。CNend
72 *
73 * @par 描述:Copies the source string of a specified length to the destination buffer.
74 CNcomment:复制指定长度源字符串到目的缓冲区。CNend
75 * @attention None
76 *
77 * @param dest     [IN] type #char *, Destination buffer.CNcomment:目的缓冲区。CNend
78 * @param dest_max [IN] type #size_t, Size of the destination buffer.CNcomment:目的缓冲区大小。CNend
79 * @param src      [IN] type #const #char *, Source buffer.CNcomment:源缓冲区。CNend
80 * @param count    [IN] type #size_t, Number of characters copied from the source buffer.
81 CNcomment:从源缓冲区中复制的字符数。CNend
82 *
83 * @retval #EOK Success
84 * @retval #Other Failure
85 *
86 * @par 依赖:
87 * @li hi_stdlib.h: This file declares the APIs.CNcomment:该接口声明所在的头文件。CNend
88 * @see None
89 */
90 extern errno_t strncpy_s(char *dest, size_t dest_max, const char *src, size_t count);
91 
92 /**
93 * @ingroup  iot_secure_c
94 * @brief  Concatenates the source string to the end of the destination string.
95 CNcomment:将源字符串连接到目的字符串后面CNend
96 *
97 * @par 描述:Concatenates the source string to the end of the destination string.
98 CNcomment:将源字符串连接到目的字符串后面。CNend
99 * @attention None
100 *
101 * @param dest     [IN] type #char *, Destination buffer.CNcomment:目的缓冲区。CNend
102 * @param dest_max [IN] type #size_t, Size of the destination buffer.CNcomment:目的缓冲区大小。CNend
103 * @param src      [IN] type #const #char *, Source buffer.CNcomment:源缓冲区。CNend
104 *
105 * @retval #EOK Success
106 * @retval #Other Failure
107 *
108 * @par 依赖:
109 * @li hi_stdlib.h: This file declares the APIs.CNcomment:该接口声明所在的头文件。CNend
110 * @see None
111 */
112 extern errno_t strcat_s(char *dest, size_t dest_max, const char *src);
113 
114 /**
115 * @ingroup  iot_secure_c
116 * @brief  Concatenates the source string of a specified length to the end of the destination string.
117 CNcomment:将指定长度的源字符串连接到目的字符串后面。CNend
118 *
119 * @par 描述: Concatenates the source string of a specified length to the end of the destination string.
120 CNcomment:将指定长度的源字符串连接到目的字符串后面。CNend
121 * @attention None
122 *
123 * @param dest     [IN] type #char *, Destination buffer.CNcomment:目的缓冲区。CNend
124 * @param dest_max [IN] type #size_t, Size of the destination buffer.CNcomment:目的缓冲区大小。CNend
125 * @param src      [IN] type #const #char *, Source buffer.CNcomment:源缓冲区。CNend
126 * @param count    [IN] type #size_t, Number of characters copied from the source buffer.
127 CNcomment:从源缓冲区连接的字符数。CNend
128 *
129 * @retval #EOK Success
130 * @retval #Other Failure
131 *
132 * @par 依赖:
133 * @li hi_stdlib.h: This file declares the APIs.CNcomment:该接口声明所在的头文件。CNend
134 * @see None
135 */
136 extern errno_t strncat_s(char *dest, size_t dest_max, const char *src, size_t count);
137 
138 /**
139 * @ingroup  iot_secure_c
140 * @brief  Copies the data from the source buffer to the destination buffer.
141 CNcomment:复制源缓冲区的数据到目的缓冲区。CNend
142 *
143 * @par 描述: Copies the data from the source buffer to the destination buffer.
144 CNcomment:复制源缓冲区的数据到目的缓冲区。CNend
145 * @attention None
146 *
147 * @param dest     [IN] type #char *, Destination buffer.CNcomment:目的缓冲区。CNend
148 * @param dest_max [IN] type #size_t, Size of the destination buffer.CNcomment:目的缓冲区大小。CNend
149 * @param src      [IN] type #const #char *, Source buffer.CNcomment:源缓冲区。CNend
150 * @param count    [IN] type #size_t, Number of characters copied from the source buffer.
151 CNcomment:从源缓冲区中复制的字符数。CNend
152 *
153 * @retval #EOK Success
154 * @retval #Other Failure
155 *
156 * @par 依赖:
157 * @li hi_stdlib.h: This file declares the APIs.CNcomment:该接口声明所在的头文件。CNend
158 * @see None
159 */
160 extern errno_t memcpy_s(void *dest, size_t dest_max, const void *src, size_t count);
161 
162 /**
163 * @ingroup  iot_secure_c
164 * @brief  Sets the size of the destination buffer to a specific value.
165 CNcomment:设置目的缓冲区为特定值。CNend
166 *
167 * @par 描述: Sets the size of the destination buffer to a specific value.
168 CNcomment:设置目的缓冲区为特定值。CNend
169 * @attention None
170 *
171 * @param dest     [IN] type #char *, Destination buffer.CNcomment:目的缓冲区。CNend
172 * @param dest_max [IN] type #size_t, Size of the destination buffer.CNcomment:目的缓冲区大小。CNend
173 * @param c        [IN] type #const #char *, Source buffer.CNcomment:特定值。CNend
174 * @param count    [IN] type #size_t, Number of characters copied from the source buffer.
175 CNcomment:设置为特定值的字符数。CNend
176 *
177 * @retval #EOK Success
178 * @retval #Other Failure
179 *
180 * @par 依赖:
181 * @li hi_stdlib.h: This file declares the APIs.CNcomment:该接口声明所在的头文件。CNend
182 * @see None
183 */
184 extern errno_t memset_s(void *dest, size_t dest_max, int c, size_t count);
185 
186 /**
187 * @ingroup  iot_secure_c
188 * @brief  Moves the data from the source buffer to the destination buffer.
189 CNcomment:移动源缓冲区的数据到目的缓冲区。CNend
190 *
191 * @par 描述:Moves the data from the source buffer to the destination buffer.
192 CNcomment:移动源缓冲区的数据到目的缓冲区。CNend
193 * @attention None
194 *
195 * @param dest     [IN] type #char *, Destination buffer.CNcomment:目的缓冲区。CNend
196 * @param dest_max [IN] type #size_t, Size of the destination buffer.CNcomment:目的缓冲区大小。CNend
197 * @param src      [IN] type #const #char *, Source buffer.CNcomment:源缓冲区。CNend
198 * @param count    [IN] type #size_t, Number of characters copied from the source buffer.
199 CNcomment:从源缓冲区中移动的字符数。CNend
200 *
201 * @retval #EOK Success
202 * @retval #Other Failure
203 *
204 * @par 依赖:
205 * @li hi_stdlib.h: This file declares the APIs.CNcomment:该接口声明所在的头文件。CNend
206 * @see None
207 */
208 extern errno_t memmove_s(void *dest, size_t dest_max, const void *src, size_t count);
209 
210 /**
211 * @ingroup  iot_secure_c
212 * @brief  Splits a string into substrings according to the specified separators.
213 CNcomment:将字符串按照指定的分隔符分割成子字符串。CNend
214 *
215 * @par 描述: Splits a string into substrings according to the specified separators.
216 CNcomment:将字符串按照指定的分隔符分割成子字符串。CNend
217 * @attention None
218 *
219 * @param token   [IN] type #char *。 String to be split.CNcomment:要分割的字符串。CNend
220 * @param delimit [IN] type #const char *。 String separator.CNcomment:字符串分隔符。CNend
221 * @param context [IN] type #char** 。Position information after a call to HI_strtok_s is saved.
222 CNcomment:保存调用HI_strtok_s后的位置信息。CNend
223 *
224 * @retval #char* Point to the next token. CNcomment:指向在token中的下一个token。CNend
225 * @retval #HI_NULL A specified substring is not found or an error occurs.
226 CNcomment:没有找到指定的子字符串或者发生错误。CNend
227 *
228 * @par 依赖:
229 * @li hi_stdlib.h: This file declares the APIs.CNcomment:该接口声明所在的头文件。CNend
230 * @see None
231 */
232 extern char *strtok_s(char *token, const char *delimit, char **context);
233 
234 /**
235 * @ingroup  iot_secure_c
236 * @brief  Formats the data and outputs it to the destination buffer.
237 CNcomment:将数据格式化输出到目的缓冲区。CNend
238 *
239 * @par 描述: Formats the data and outputs it to the destination buffer.
240 CNcomment:将数据格式化输出到目的缓冲区。CNend
241 * @attention None
242 *
243 * @param dest     [OUT] type #char *。 Destination buffer.CNcomment:目的缓冲区。CNend
244 * @param dest_max [IN]  type #size_t。 Size of the destination buffer.CNcomment:目的缓冲区大小。CNend
245 * @param format   [IN]  type #const #char *。 Formatting control string.CNcomment:格式化控制字符串。CNend
246 * @param ...      [IN]  Optional parameter CNcomment:可选参数。CNend
247 *
248 * @retval #>=0 Return the number of bytes stored in dest, not counting the terminating null character.
249 CNcomment:返回存储在dest的字节数,不包括结束符CNend
250 * @retval #-1 Failure
251 *
252 * @par 依赖:
253 * @li hi_stdlib.h: This file declares the APIs.CNcomment:该接口声明所在的头文件。CNend
254 * @see None
255 */
256 extern int sprintf_s(char *dest, size_t dest_max, const char *format, ...);
257 
258 /**
259 * @ingroup  iot_secure_c
260 * @brief Formats the data according to a specified length and outputs the data to the destination buffer.
261 CNcomment:将数据按照指定长度格式化输出到目的缓冲区。CNend
262 *
263 * @par 描述: Formats the data according to a specified length and outputs the data to the destination buffer.
264 CNcomment:将数据按照指定长度格式化输出到目的缓冲区。CNend
265 * @attention None
266 *
267 * @param dest     [OUT] type #char *。 Destination buffer.CNcomment:目的缓冲区。CNend
268 * @param dest_max [IN]  type #size_t。 Size of the destination buffer.CNcomment:目的缓冲区大小。CNend
269 * @param count    [IN]  type #size_t。 Number of formatted characters to be output to the destination buffer.
270 CNcomment:要输出到目的缓冲区的格式化字符个数。CNend
271 * @param format   [IN]  type #const #char *。 Formatting control string.CNcomment:格式化控制字符串。CNend
272 * @param ...      [IN]  Optional parameter CNcomment:可选参数。CNend
273 *
274 * @retval #>=0 Return the number of bytes stored in dest, not counting the terminating null character.
275 CNcomment:返回存储在dest的字节数,不包括结束符CNend
276 * @retval #-1 Failure
277 *
278 * @par 依赖:
279 * @li hi_stdlib.h: This file declares the APIs.CNcomment:该接口声明所在的头文件。CNend
280 * @see None
281 */
282 extern int snprintf_s(char *dest, size_t dest_max, size_t count, const char *format, ...);
283 
284 extern int memcmp(const void *str1, const void *str2, size_t n);
285 extern size_t strlen(const char *src);
286 extern int strcmp(const char *str1, const char *str2);
287 extern int strncmp(const char *str1, const char *str2, size_t n);
288 
289 #if defined(HAVE_PCLINT_CHECK)
290 #define UT_CONST const
291 #else
292 #define UT_CONST
293 #endif
294 
295 extern unsigned long strtoul(const char *nptr, char **endptr, int base);
296 extern UT_CONST char *strstr(const char *str1, const char *str2);
297 extern UT_CONST char *strchr(const char *s, int c);
298 extern char *strcpy(char* dest, const char *src);
299 extern char* strsep(char** __s_ptr, const char* __delimiter);
300 extern long strtol(const char *nptr, char **endptr, int base);
301 
302 extern int atoi (const char *s);
303 
304 extern void *memset(void *s, int ch, size_t n);
305 extern void* memmove(void* dst, const void* src, size_t n);
306 extern void* memcpy(void* dst, const void* src, size_t n);
307 
308 
309 HI_END_HEADER
310 #endif /* __HI_STDLIB_H__ */
311 
312