670 lines
29 KiB
C
670 lines
29 KiB
C
/*
|
|
* Copyright (c) Huawei Technologies Co., Ltd. 2014-2018. All rights reserved.
|
|
* Description: The user of this secure c library should include this header
|
|
* file in you source code. This header file declare all supported API prototype
|
|
* of the library, such as memcpy_s, strcpy_s, wcscpy_s,strcat_s, strncat_s,
|
|
* sprintf_s, scanf_s, and so on. Author: lishunda Create: 2014-02-25 Notes: Do
|
|
* not modify this file by yourself. History: 2018-09-27 zhaozhijian Code base
|
|
* quality improvement
|
|
*/
|
|
|
|
#ifndef __SECUREC_H__5D13A042_DC3F_4ED9_A8D1_882811274C27
|
|
#define __SECUREC_H__5D13A042_DC3F_4ED9_A8D1_882811274C27
|
|
|
|
#include "securectype.h"
|
|
#ifndef SECUREC_HAVE_STDARG_H
|
|
#define SECUREC_HAVE_STDARG_H 1
|
|
#endif
|
|
|
|
#if SECUREC_HAVE_STDARG_H
|
|
#include <stdarg.h>
|
|
#endif
|
|
|
|
#ifndef SECUREC_HAVE_ERRNO_H
|
|
#if SECUREC_IN_KERNEL
|
|
#define SECUREC_HAVE_ERRNO_H 0
|
|
#else
|
|
#define SECUREC_HAVE_ERRNO_H 1
|
|
#endif
|
|
#endif
|
|
|
|
/* EINVAL ERANGE may defined in errno.h */
|
|
#if SECUREC_HAVE_ERRNO_H
|
|
#include <errno.h>
|
|
#endif
|
|
|
|
/* Define error code */
|
|
#if defined(SECUREC_NEED_ERRNO_TYPE) || !defined(__STDC_WANT_LIB_EXT1__) || \
|
|
(defined(__STDC_WANT_LIB_EXT1__) && (__STDC_WANT_LIB_EXT1__ == 0))
|
|
#ifndef SECUREC_DEFINED_ERRNO_TYPE
|
|
#define SECUREC_DEFINED_ERRNO_TYPE
|
|
/* Just check whether macrodefinition exists. */
|
|
#ifndef errno_t
|
|
typedef int errno_t;
|
|
#endif
|
|
#endif
|
|
#endif
|
|
|
|
/* Success */
|
|
#ifndef EOK
|
|
#define EOK 0
|
|
#endif
|
|
|
|
#ifndef EINVAL
|
|
/* The src buffer is not correct and destination buffer cant not be reset */
|
|
#define EINVAL 22
|
|
#endif
|
|
|
|
#ifndef EINVAL_AND_RESET
|
|
/* Once the error is detected, the dest buffer must be reseted! */
|
|
#define EINVAL_AND_RESET (22 | 128)
|
|
#endif
|
|
|
|
#ifndef ERANGE
|
|
/* The destination buffer is not long enough and destination buffer can not be
|
|
* reset */
|
|
#define ERANGE 34
|
|
#endif
|
|
|
|
#ifndef ERANGE_AND_RESET
|
|
/* Once the error is detected, the dest buffer must be reseted! */
|
|
#define ERANGE_AND_RESET (34 | 128)
|
|
#endif
|
|
|
|
#ifndef EOVERLAP_AND_RESET
|
|
/* Once the buffer overlap is detected, the dest buffer must be reseted! */
|
|
#define EOVERLAP_AND_RESET (54 | 128)
|
|
#endif
|
|
|
|
/* If you need export the function of this library in Win32 dll, use
|
|
* __declspec(dllexport) */
|
|
#ifndef SECUREC_API
|
|
#if defined(SECUREC_DLL_EXPORT)
|
|
#define SECUREC_API __declspec(dllexport)
|
|
#elif defined(SECUREC_DLL_IMPORT)
|
|
#define SECUREC_API __declspec(dllimport)
|
|
#else
|
|
/*
|
|
* Standardized function declaration. If a security function is declared in the
|
|
* your code, it may cause a compilation alarm,Please delete the security
|
|
* function you declared. Adding extern under windows will cause the system to
|
|
* have inline functions to expand, so do not add the extern in default
|
|
*/
|
|
#if defined(_MSC_VER)
|
|
#define SECUREC_API
|
|
#else
|
|
#define SECUREC_API extern
|
|
#endif
|
|
#endif
|
|
#endif
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
/*
|
|
* Description: The GetHwSecureCVersion function get SecureC Version string and
|
|
* version number. Parameter: verNumber - to store version number Return:
|
|
* version string
|
|
*/
|
|
SECUREC_API const char *GetHwSecureCVersion(unsigned short *verNumber);
|
|
|
|
#if SECUREC_ENABLE_MEMSET
|
|
/*
|
|
* Description: The memset_s function copies the value of c (converted to an
|
|
* unsigned char) into each of the first count characters of the object pointed
|
|
* to by dest. Parameter: dest - destination address Parameter: destMax - The
|
|
* maximum length of destination buffer Parameter: c - the value to be copied
|
|
* Parameter: count - copies count bytes of value to dest
|
|
* Return: EOK if there was no runtime-constraint violation
|
|
*/
|
|
SECUREC_API errno_t memset_s(void *dest, size_t destMax, int c, size_t count);
|
|
#endif
|
|
|
|
#ifndef SECUREC_ONLY_DECLARE_MEMSET
|
|
#define SECUREC_ONLY_DECLARE_MEMSET 0
|
|
#endif
|
|
|
|
#if SECUREC_ONLY_DECLARE_MEMSET == 0
|
|
|
|
#if SECUREC_ENABLE_MEMMOVE
|
|
/*
|
|
* Description: The memmove_s function copies n characters from the object
|
|
* pointed to by src into the object pointed to by dest. Parameter: dest -
|
|
* destination address Parameter: destMax - The maximum length of destination
|
|
* buffer Parameter: src - source address Parameter: count - copies count bytes
|
|
* from the src Return: EOK if there was no runtime-constraint violation
|
|
*/
|
|
SECUREC_API errno_t memmove_s(void *dest, size_t destMax, const void *src,
|
|
size_t count);
|
|
#endif
|
|
|
|
#if SECUREC_ENABLE_MEMCPY
|
|
/*
|
|
* Description: The memcpy_s function copies n characters from the object
|
|
* pointed to by src into the object pointed to by dest. Parameter: dest -
|
|
* destination address Parameter: destMax - The maximum length of destination
|
|
* buffer Parameter: src - source address Parameter: count - copies count bytes
|
|
* from the src Return: EOK if there was no runtime-constraint violation
|
|
*/
|
|
SECUREC_API errno_t memcpy_s(void *dest, size_t destMax, const void *src,
|
|
size_t count);
|
|
#endif
|
|
|
|
#if SECUREC_ENABLE_STRCPY
|
|
/*
|
|
* Description: The strcpy_s function copies the string pointed to by strSrc
|
|
* (including the terminating null character) into the array pointed to by
|
|
* strDest Parameter: strDest - destination address Parameter: destMax - The
|
|
* maximum length of destination buffer(including the terminating null
|
|
* character) Parameter: strSrc - source address Return: EOK if there was no
|
|
* runtime-constraint violation
|
|
*/
|
|
SECUREC_API errno_t strcpy_s(char *strDest, size_t destMax, const char *strSrc);
|
|
#endif
|
|
|
|
#if SECUREC_ENABLE_STRNCPY
|
|
/*
|
|
* Description: The strncpy_s function copies not more than n successive
|
|
* characters (not including the terminating null character) from the array
|
|
* pointed to by strSrc to the array pointed to by strDest. Parameter: strDest -
|
|
* destination address Parameter: destMax - The maximum length of destination
|
|
* buffer(including the terminating null character) Parameter: strSrc - source
|
|
* address Parameter: count - copies count characters from the src Return: EOK
|
|
* if there was no runtime-constraint violation
|
|
*/
|
|
SECUREC_API errno_t strncpy_s(char *strDest, size_t destMax, const char *strSrc,
|
|
size_t count);
|
|
#endif
|
|
|
|
#if SECUREC_ENABLE_STRCAT
|
|
/*
|
|
* Description: The strcat_s function appends a copy of the string pointed to by
|
|
* strSrc (including the terminating null character) to the end of the string
|
|
* pointed to by strDest. Parameter: strDest - destination address Parameter:
|
|
* destMax - The maximum length of destination buffer(including the terminating
|
|
* null wide character) Parameter: strSrc - source address Return: EOK if
|
|
* there was no runtime-constraint violation
|
|
*/
|
|
SECUREC_API errno_t strcat_s(char *strDest, size_t destMax, const char *strSrc);
|
|
#endif
|
|
|
|
#if SECUREC_ENABLE_STRNCAT
|
|
/*
|
|
* Description: The strncat_s function appends not more than n successive
|
|
* characters (not including the terminating null character) from the array
|
|
* pointed to by strSrc to the end of the string pointed to by strDest.
|
|
* Parameter: strDest - destination address
|
|
* Parameter: destMax - The maximum length of destination buffer(including the
|
|
* terminating null character) Parameter: strSrc - source address Parameter:
|
|
* count - copies count characters from the src Return: EOK if there was no
|
|
* runtime-constraint violation
|
|
*/
|
|
SECUREC_API errno_t strncat_s(char *strDest, size_t destMax, const char *strSrc,
|
|
size_t count);
|
|
#endif
|
|
|
|
#if SECUREC_ENABLE_VSPRINTF
|
|
/*
|
|
* Description: The vsprintf_s function is equivalent to the vsprintf function
|
|
* except for the parameter destMax and the explicit runtime-constraints
|
|
* violation Parameter: strDest - produce output according to a format ,write
|
|
* to the character string strDest. Parameter: destMax - The maximum length of
|
|
* destination buffer(including the terminating null wide characte) Parameter:
|
|
* format - fromat string Parameter: argList - instead of a variable number of
|
|
* arguments Return: the number of characters printed(not including the
|
|
* terminating null byte '\0'), If an error occurred Return: -1.
|
|
*/
|
|
SECUREC_API int vsprintf_s(char *strDest, size_t destMax, const char *format,
|
|
va_list argList) SECUREC_ATTRIBUTE(3, 0);
|
|
#endif
|
|
|
|
#if SECUREC_ENABLE_SPRINTF
|
|
/*
|
|
* Description: The sprintf_s function is equivalent to the sprintf function
|
|
* except for the parameter destMax and the explicit runtime-constraints
|
|
* violation Parameter: strDest - produce output according to a format ,write
|
|
* to the character string strDest. Parameter: destMax - The maximum length of
|
|
* destination buffer(including the terminating null byte '\0') Parameter:
|
|
* format - fromat string Return: the number of characters printed(not
|
|
* including the terminating null byte '\0'), If an error occurred Return: -1.
|
|
*/
|
|
SECUREC_API int sprintf_s(char *strDest, size_t destMax, const char *format,
|
|
...) SECUREC_ATTRIBUTE(3, 4);
|
|
#endif
|
|
|
|
#if SECUREC_ENABLE_VSNPRINTF
|
|
/*
|
|
* Description: The vsnprintf_s function is equivalent to the vsnprintf
|
|
* function except for the parameter destMax/count and the explicit
|
|
* runtime-constraints violation Parameter: strDest - produce output according
|
|
* to a format ,write to the character string strDest. Parameter: destMax - The
|
|
* maximum length of destination buffer(including the terminating null byte
|
|
* '\0') Parameter: count - do not write more than count bytes to strDest(not
|
|
* including the terminating null byte '\0') Parameter: format - fromat string
|
|
* Parameter: argList - instead of a variable number of arguments
|
|
* Return: the number of characters printed(not including the terminating
|
|
* null byte '\0'), If an error occurred Return: -1.Pay special attention to
|
|
* returning -1 when truncation occurs
|
|
*/
|
|
SECUREC_API int vsnprintf_s(char *strDest, size_t destMax, size_t count,
|
|
const char *format, va_list argList)
|
|
SECUREC_ATTRIBUTE(4, 0);
|
|
#endif
|
|
|
|
#if SECUREC_ENABLE_SNPRINTF
|
|
/*
|
|
* Description: The snprintf_s function is equivalent to the snprintf function
|
|
* except for the parameter destMax/count and the explicit runtime-constraints
|
|
* violation Parameter: strDest - produce output according to a format ,write to
|
|
* the character string strDest. Parameter: destMax - The maximum length of
|
|
* destination buffer(including the terminating null byte '\0') Parameter:
|
|
* count - do not write more than count bytes to strDest(not including the
|
|
* terminating null byte '\0') Parameter: format - fromat string Return: the
|
|
* number of characters printed(not including the terminating null byte '\0'),
|
|
* If an error occurred Return: -1.Pay special attention to returning -1 when
|
|
* truncation occurs
|
|
*/
|
|
SECUREC_API int snprintf_s(char *strDest, size_t destMax, size_t count,
|
|
const char *format, ...) SECUREC_ATTRIBUTE(4, 5);
|
|
#endif
|
|
|
|
#if SECUREC_SNPRINTF_TRUNCATED
|
|
/*
|
|
* Description: The vsnprintf_truncated_s function is equivalent to the
|
|
* vsnprintf_s function except no count parameter and return value Parameter:
|
|
* strDest - produce output according to a format ,write to the character
|
|
* string strDest Parameter: destMax - The maximum length of destination
|
|
* buffer(including the terminating null byte '\0') Parameter: format - fromat
|
|
* string Parameter: argList - instead of a variable number of arguments
|
|
* Return: the number of characters printed(not including the terminating
|
|
* null byte '\0'), If an error occurred Return: -1.Pay special attention to
|
|
* returning destMax - 1 when truncation occurs
|
|
*/
|
|
SECUREC_API int vsnprintf_truncated_s(char *strDest, size_t destMax,
|
|
const char *format, va_list argList)
|
|
SECUREC_ATTRIBUTE(3, 0);
|
|
|
|
/*
|
|
* Description: The snprintf_truncated_s function is equivalent to the
|
|
* snprintf_2 function except no count parameter and return value Parameter:
|
|
* strDest - produce output according to a format ,write to the character
|
|
* string strDest. Parameter: destMax - The maximum length of destination
|
|
* buffer(including the terminating null byte '\0') Parameter: format - fromat
|
|
* string Return: the number of characters printed(not including the
|
|
* terminating null byte '\0'), If an error occurred Return: -1.Pay special
|
|
* attention to returning destMax - 1 when truncation occurs
|
|
*/
|
|
SECUREC_API int snprintf_truncated_s(char *strDest, size_t destMax,
|
|
const char *format, ...)
|
|
SECUREC_ATTRIBUTE(3, 4);
|
|
#endif
|
|
|
|
#if SECUREC_ENABLE_SCANF
|
|
/*
|
|
* Description: The scanf_s function is equivalent to fscanf_s with the
|
|
* argument stdin interposed before the arguments to scanf_s Parameter: format -
|
|
* fromat string Return: the number of input items assigned, If an error
|
|
* occurred Return: -1.
|
|
*/
|
|
SECUREC_API int scanf_s(const char *format, ...);
|
|
#endif
|
|
|
|
#if SECUREC_ENABLE_VSCANF
|
|
/*
|
|
* Description: The vscanf_s function is equivalent to scanf_s, with the
|
|
* variable argument list replaced by argList Parameter: format - fromat string
|
|
* Parameter: argList - instead of a variable number of arguments
|
|
* Return: the number of input items assigned, If an error occurred Return:
|
|
* -1.
|
|
*/
|
|
SECUREC_API int vscanf_s(const char *format, va_list argList);
|
|
#endif
|
|
|
|
#if SECUREC_ENABLE_SSCANF
|
|
/*
|
|
* Description: The sscanf_s function is equivalent to fscanf_s, except that
|
|
* input is obtained from a string (specified by the argument buffer) rather
|
|
* than from a stream Parameter: buffer - read character from buffer
|
|
* Parameter: format - fromat string
|
|
* Return: the number of input items assigned, If an error occurred Return:
|
|
* -1.
|
|
*/
|
|
SECUREC_API int sscanf_s(const char *buffer, const char *format, ...);
|
|
#endif
|
|
|
|
#if SECUREC_ENABLE_VSSCANF
|
|
/*
|
|
* Description: The vsscanf_s function is equivalent to sscanf_s, with the
|
|
* variable argument list replaced by argList Parameter: buffer - read
|
|
* character from buffer Parameter: format - fromat string Parameter: argList -
|
|
* instead of a variable number of arguments Return: the number of input
|
|
* items assigned, If an error occurred Return: -1.
|
|
*/
|
|
SECUREC_API int vsscanf_s(const char *buffer, const char *format,
|
|
va_list argList);
|
|
#endif
|
|
|
|
#if SECUREC_ENABLE_FSCANF
|
|
/*
|
|
* Description: The fscanf_s function is equivalent to fscanf except that the
|
|
* c, s, and [ conversion specifiers apply to a pair of arguments (unless
|
|
* assignment suppression is indicated by a*) Parameter: stream - stdio file
|
|
* stream Parameter: format - fromat string Return: the number of input items
|
|
* assigned, If an error occurred Return: -1.
|
|
*/
|
|
SECUREC_API int fscanf_s(FILE *stream, const char *format, ...);
|
|
#endif
|
|
|
|
#if SECUREC_ENABLE_VFSCANF
|
|
/*
|
|
* Description: The vfscanf_s function is equivalent to fscanf_s, with the
|
|
* variable argument list replaced by argList Parameter: stream - stdio file
|
|
* stream Parameter: format - fromat string Parameter: argList - instead of a
|
|
* variable number of arguments Return: the number of input items assigned,
|
|
* If an error occurred Return: -1.
|
|
*/
|
|
SECUREC_API int vfscanf_s(FILE *stream, const char *format, va_list argList);
|
|
#endif
|
|
|
|
#if SECUREC_ENABLE_STRTOK
|
|
/*
|
|
* Description: The strtok_s function parses a string into a sequence of
|
|
* strToken, replace all characters in strToken string that match to strDelimit
|
|
* set with 0. On the first call to strtok_s the string to be parsed should be
|
|
* specified in strToken. In each subsequent call that should parse the same
|
|
* string, strToken should be NULL Parameter: strToken - the string to be
|
|
* delimited Parameter: strDelimit - specifies a set of characters that delimit
|
|
* the tokens in the parsed string Parameter: context - is a pointer to a char *
|
|
* variable that is used internally by strtok_s function Return: On the first
|
|
* call returns the address of the first non \0 character, otherwise NULL is
|
|
* returned. In subsequent calls, the strtoken is set to NULL, and the context
|
|
* set is the same as the previous call, return NULL if the *context string
|
|
* length is equal 0, otherwise return *context.
|
|
*/
|
|
SECUREC_API char *strtok_s(char *strToken, const char *strDelimit,
|
|
char **context);
|
|
#endif
|
|
|
|
#if SECUREC_ENABLE_GETS && SECUREC_IN_KERNEL == 0
|
|
/*
|
|
* Description: The gets_s function reads at most one less than the number of
|
|
* characters specified by destMax from the stream pointed to by stdin, into the
|
|
* array pointed to by buffer Parameter: buffer - destination address
|
|
* Parameter: destMax - The maximum length of destination buffer(including the
|
|
* terminating null character) Return: buffer if there was no
|
|
* runtime-constraint violation,If an error occurred Return: NULL.
|
|
*/
|
|
SECUREC_API char *gets_s(char *buffer, size_t destMax);
|
|
#endif
|
|
|
|
#if SECUREC_ENABLE_WCHAR_FUNC
|
|
#if SECUREC_ENABLE_MEMCPY
|
|
/*
|
|
* Description: The wmemcpy_s function copies n successive wide characters from
|
|
* the object pointed to by src into the object pointed to by dest. Parameter:
|
|
* dest - destination address Parameter: destMax - The maximum length of
|
|
* destination buffer Parameter: src - source address Parameter: count - copies
|
|
* count wide characters from the src Return: EOK if there was no
|
|
* runtime-constraint violation
|
|
*/
|
|
SECUREC_API errno_t wmemcpy_s(wchar_t *dest, size_t destMax, const wchar_t *src,
|
|
size_t count);
|
|
#endif
|
|
|
|
#if SECUREC_ENABLE_MEMMOVE
|
|
/*
|
|
* Description: The wmemmove_s function copies n successive wide characters from
|
|
* the object pointed to by src into the object pointed to by dest. Parameter:
|
|
* dest - destination address Parameter: destMax - The maximum length of
|
|
* destination buffer Parameter: src - source address Parameter: count - copies
|
|
* count wide characters from the src Return: EOK if there was no
|
|
* runtime-constraint violation
|
|
*/
|
|
SECUREC_API errno_t wmemmove_s(wchar_t *dest, size_t destMax,
|
|
const wchar_t *src, size_t count);
|
|
#endif
|
|
|
|
#if SECUREC_ENABLE_STRCPY
|
|
/*
|
|
* Description: The wcscpy_s function copies the wide string pointed to by
|
|
* strSrc (including theterminating null wide character) into the array pointed
|
|
* to by strDest Parameter: strDest - destination address Parameter: destMax -
|
|
* The maximum length of destination buffer Parameter: strSrc - source address
|
|
* Return: EOK if there was no runtime-constraint violation
|
|
*/
|
|
SECUREC_API errno_t wcscpy_s(wchar_t *strDest, size_t destMax,
|
|
const wchar_t *strSrc);
|
|
#endif
|
|
|
|
#if SECUREC_ENABLE_STRNCPY
|
|
/*
|
|
* Description: The wcsncpy_s function copies not more than n successive wide
|
|
* characters (not including the terminating null wide character) from the array
|
|
* pointed to by strSrc to the array pointed to by strDest Parameter: strDest -
|
|
* destination address Parameter: destMax - The maximum length of destination
|
|
* buffer(including the terminating wide character) Parameter: strSrc - source
|
|
* address Parameter: count - copies count wide characters from the src Return:
|
|
* EOK if there was no runtime-constraint violation
|
|
*/
|
|
SECUREC_API errno_t wcsncpy_s(wchar_t *strDest, size_t destMax,
|
|
const wchar_t *strSrc, size_t count);
|
|
#endif
|
|
|
|
#if SECUREC_ENABLE_STRCAT
|
|
/*
|
|
* Description: The wcscat_s function appends a copy of the wide string pointed
|
|
* to by strSrc (including the terminating null wide character) to the end of
|
|
* the wide string pointed to by strDest Parameter: strDest - destination
|
|
* address Parameter: destMax - The maximum length of destination
|
|
* buffer(including the terminating wide character) Parameter: strSrc - source
|
|
* address Return: EOK if there was no runtime-constraint violation
|
|
*/
|
|
SECUREC_API errno_t wcscat_s(wchar_t *strDest, size_t destMax,
|
|
const wchar_t *strSrc);
|
|
#endif
|
|
|
|
#if SECUREC_ENABLE_STRNCAT
|
|
/*
|
|
* Description: The wcsncat_s function appends not more than n successive wide
|
|
* characters (not including the terminating null wide character) from the array
|
|
* pointed to by strSrc to the end of the wide string pointed to by strDest.
|
|
* Parameter: strDest - destination address
|
|
* Parameter: destMax - The maximum length of destination buffer(including the
|
|
* terminating wide character) Parameter: strSrc - source address Parameter:
|
|
* count - copies count wide characters from the src Return: EOK if there
|
|
* was no runtime-constraint violation
|
|
*/
|
|
SECUREC_API errno_t wcsncat_s(wchar_t *strDest, size_t destMax,
|
|
const wchar_t *strSrc, size_t count);
|
|
#endif
|
|
|
|
#if SECUREC_ENABLE_STRTOK
|
|
/*
|
|
* Description: The wcstok_s function is the wide-character equivalent of
|
|
* the strtok_s function Parameter: strToken - the string to be delimited
|
|
* Parameter: strDelimit - specifies a set of characters that delimit the tokens
|
|
* in the parsed string Parameter: context - is a pointer to a char * variable
|
|
* that is used internally by strtok_s function Return: a pointer to the
|
|
* first character of a token, or a null pointer if there is no token or there
|
|
* is a runtime-constraint violation.
|
|
*/
|
|
SECUREC_API wchar_t *wcstok_s(wchar_t *strToken, const wchar_t *strDelimit,
|
|
wchar_t **context);
|
|
#endif
|
|
|
|
#if SECUREC_ENABLE_VSPRINTF
|
|
/*
|
|
* Description: The vswprintf_s function is the wide-character equivalent
|
|
* of the vsprintf_s function Parameter: strDest - produce output according to
|
|
* a format ,write to the character string strDest Parameter: destMax - The
|
|
* maximum length of destination buffer(including the terminating null )
|
|
* Parameter: format - fromat string
|
|
* Parameter: argList - instead of a variable number of arguments
|
|
* Return: the number of characters printed(not including the terminating
|
|
* null wide characte), If an error occurred Return: -1.
|
|
*/
|
|
SECUREC_API int vswprintf_s(wchar_t *strDest, size_t destMax,
|
|
const wchar_t *format, va_list argList);
|
|
#endif
|
|
|
|
#if SECUREC_ENABLE_SPRINTF
|
|
|
|
/*
|
|
* Description: The swprintf_s function is the wide-character equivalent
|
|
* of the sprintf_s function Parameter: strDest - produce output according to a
|
|
* format ,write to the character string strDest Parameter: destMax - The
|
|
* maximum length of destination buffer(including the terminating null )
|
|
* Parameter: format - fromat string
|
|
* Return: the number of characters printed(not including the terminating
|
|
* null wide characte), If an error occurred Return: -1.
|
|
*/
|
|
SECUREC_API int swprintf_s(wchar_t *strDest, size_t destMax,
|
|
const wchar_t *format, ...);
|
|
#endif
|
|
|
|
#if SECUREC_ENABLE_FSCANF
|
|
/*
|
|
* Description: The fwscanf_s function is the wide-character equivalent
|
|
* of the fscanf_s function Parameter: stream - stdio file stream Parameter:
|
|
* format - fromat string Return: the number of input items assigned, If an
|
|
* error occurred Return: -1.
|
|
*/
|
|
SECUREC_API int fwscanf_s(FILE *stream, const wchar_t *format, ...);
|
|
#endif
|
|
|
|
#if SECUREC_ENABLE_VFSCANF
|
|
/*
|
|
* Description: The vfwscanf_s function is the wide-character equivalent
|
|
* of the vfscanf_s function Parameter: stream - stdio file stream Parameter:
|
|
* format - fromat string Parameter: argList - instead of a variable number of
|
|
* arguments Return: the number of input items assigned, If an error occurred
|
|
* Return: -1.
|
|
*/
|
|
SECUREC_API int vfwscanf_s(FILE *stream, const wchar_t *format,
|
|
va_list argList);
|
|
#endif
|
|
|
|
#if SECUREC_ENABLE_SCANF
|
|
/*
|
|
* Description: The wscanf_s function is the wide-character equivalent of
|
|
* the scanf_s function Parameter: format - fromat string Return: the number
|
|
* of input items assigned, If an error occurred Return: -1.
|
|
*/
|
|
SECUREC_API int wscanf_s(const wchar_t *format, ...);
|
|
#endif
|
|
|
|
#if SECUREC_ENABLE_VSCANF
|
|
/*
|
|
* Description: The vwscanf_s function is the wide-character equivalent
|
|
* of the vscanf_s function Parameter: format - fromat string Parameter: argList
|
|
* - instead of a variable number of arguments Return: the number of input
|
|
* items assigned, If an error occurred Return: -1.
|
|
*/
|
|
SECUREC_API int vwscanf_s(const wchar_t *format, va_list argList);
|
|
#endif
|
|
|
|
#if SECUREC_ENABLE_SSCANF
|
|
/*
|
|
* Description: The swscanf_s function is the wide-character equivalent
|
|
* of the sscanf_s function Parameter: buffer - read character from buffer
|
|
* Parameter: format - fromat string
|
|
* Return: the number of input items assigned, If an error occurred Return:
|
|
* -1.
|
|
*/
|
|
SECUREC_API int swscanf_s(const wchar_t *buffer, const wchar_t *format, ...);
|
|
#endif
|
|
|
|
#if SECUREC_ENABLE_VSSCANF
|
|
/*
|
|
* Description: The vswscanf_s function is the wide-character equivalent
|
|
* of the vsscanf_s function Parameter: buffer - read character from buffer
|
|
* Parameter: format - fromat string
|
|
* Parameter: argList - instead of a variable number of arguments
|
|
* Return: the number of input items assigned, If an error occurred Return:
|
|
* -1.
|
|
*/
|
|
SECUREC_API int vswscanf_s(const wchar_t *buffer, const wchar_t *format,
|
|
va_list argList);
|
|
#endif
|
|
#endif /* SECUREC_ENABLE_WCHAR_FUNC */
|
|
#endif
|
|
|
|
/* Those functions are used by macro ,must declare hare , also for without
|
|
* function declaration warning */
|
|
extern errno_t strncpy_error(char *strDest, size_t destMax, const char *strSrc,
|
|
size_t count);
|
|
extern errno_t strcpy_error(char *strDest, size_t destMax, const char *strSrc);
|
|
|
|
#if SECUREC_WITH_PERFORMANCE_ADDONS
|
|
/* Those functions are used by macro */
|
|
extern errno_t memset_sOptAsm(void *dest, size_t destMax, int c, size_t count);
|
|
extern errno_t memset_sOptTc(void *dest, size_t destMax, int c, size_t count);
|
|
extern errno_t memcpy_sOptAsm(void *dest, size_t destMax, const void *src,
|
|
size_t count);
|
|
extern errno_t memcpy_sOptTc(void *dest, size_t destMax, const void *src,
|
|
size_t count);
|
|
|
|
/* The strcpy_sp is a macro, not a function in performance optimization mode. */
|
|
#define strcpy_sp(dest, destMax, src) \
|
|
((__builtin_constant_p((destMax)) && __builtin_constant_p((src))) \
|
|
? SECUREC_STRCPY_SM((dest), (destMax), (src)) \
|
|
: strcpy_s((dest), (destMax), (src)))
|
|
|
|
/* The strncpy_sp is a macro, not a function in performance optimization mode.
|
|
*/
|
|
#define strncpy_sp(dest, destMax, src, count) \
|
|
((__builtin_constant_p((count)) && __builtin_constant_p((destMax)) && \
|
|
__builtin_constant_p((src))) \
|
|
? SECUREC_STRNCPY_SM((dest), (destMax), (src), (count)) \
|
|
: strncpy_s((dest), (destMax), (src), (count)))
|
|
|
|
/* The strcat_sp is a macro, not a function in performance optimization mode. */
|
|
#define strcat_sp(dest, destMax, src) \
|
|
((__builtin_constant_p((destMax)) && __builtin_constant_p((src))) \
|
|
? SECUREC_STRCAT_SM((dest), (destMax), (src)) \
|
|
: strcat_s((dest), (destMax), (src)))
|
|
|
|
/* The strncat_sp is a macro, not a function in performance optimization mode.
|
|
*/
|
|
#define strncat_sp(dest, destMax, src, count) \
|
|
((__builtin_constant_p((count)) && __builtin_constant_p((destMax)) && \
|
|
__builtin_constant_p((src))) \
|
|
? SECUREC_STRNCAT_SM((dest), (destMax), (src), (count)) \
|
|
: strncat_s((dest), (destMax), (src), (count)))
|
|
|
|
/* The memcpy_sp is a macro, not a function in performance optimization mode. */
|
|
#define memcpy_sp(dest, destMax, src, count) \
|
|
(__builtin_constant_p((count)) \
|
|
? (SECUREC_MEMCPY_SM((dest), (destMax), (src), (count))) \
|
|
: (__builtin_constant_p((destMax)) \
|
|
? (((size_t)(destMax) > 0 && \
|
|
(((unsigned long long)(destMax) & \
|
|
(unsigned long long)(-2)) < SECUREC_MEM_MAX_LEN)) \
|
|
? memcpy_sOptTc((dest), (destMax), (src), (count)) \
|
|
: ERANGE) \
|
|
: memcpy_sOptAsm((dest), (destMax), (src), (count))))
|
|
|
|
/* The memset_sp is a macro, not a function in performance optimization mode. */
|
|
#define memset_sp(dest, destMax, c, count) \
|
|
(__builtin_constant_p((count)) \
|
|
? (SECUREC_MEMSET_SM((dest), (destMax), (c), (count))) \
|
|
: (__builtin_constant_p((destMax)) \
|
|
? (((((unsigned long long)(destMax) & \
|
|
(unsigned long long)(-2)) < SECUREC_MEM_MAX_LEN)) \
|
|
? memset_sOptTc((dest), (destMax), (c), (count)) \
|
|
: ERANGE) \
|
|
: memset_sOptAsm((dest), (destMax), (c), (count))))
|
|
#else
|
|
#define strcpy_sp strcpy_s
|
|
#define strncpy_sp strncpy_s
|
|
#define strcat_sp strcat_s
|
|
#define strncat_sp strncat_s
|
|
#define memcpy_sp memcpy_s
|
|
#define memset_sp memset_s
|
|
#endif
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif /* __cplusplus */
|
|
#endif /* __SECUREC_H__5D13A042_DC3F_4ED9_A8D1_882811274C27 */
|