OpenHarmony安全函数返回值判断
在向OpenHarmony贡献代码时,涉及内存操作时都必须使用安全函数,并且要求对返回值进行正确的处理。
否则,在提交PR时,代码质量检查就会提示如下缺陷。
下面整理一下常用的内存操作安全函数及其返回值含义,便于今后使用:
涉及到的定义:
typedef int errno_t;#define EOK 0
函数功能 | 安全函数原形 | 返回值含义 |
---|---|---|
字符串格式化输出函数 | int sprintf_s(char *strDest, size_t destMax, const char *format, …) ; | 成功:返回输出的字符个数(不包含’\0’结束符) 失败:返回-1 |
字符串格式化输出函数 | int snprintf_s(char *strDest, size_t destMax, size_t count, const char *format, …); | 成功:返回输出的字符个数(不包含’\0’结束符) 失败:返回-1 |
字符串格式化输入函数 | int scanf_s(const char *format, …); | 成功:返回分配的输入项目数 失败:返回-1 |
内存拷贝函数 | errno_t memmove_s(void *dest, size_t destMax, const void *src, size_t count); | 成功: 返回EOK(0) 失败:返回其它 |
内存拷贝函数 | errno_t memcpy_s(void *dest, size_t destMax, const void *src, size_t count); | 成功: 返回EOK(0) 失败:返回其它 |
字符串拷贝函数 | errno_t strcpy_s(char *strDest, size_t destMax, const char *strSrc); | 成功: 返回EOK(0) 失败:返回其它 |
字符串拷贝函数 | errno_t strncpy_s(char *strDest, size_t destMax, const char *strSrc, size_t count); | 成功: 返回EOK(0) 失败:返回其它 |
内存清除函数 | errno_t memset_s(void *dest, size_t destMax, int c, size_t count); | 成功: 返回EOK(0) 失败:返回其它 |
字符串拼接函数 | errno_t strcat_s(char *strDest, size_t destMax, const char *strSrc); | 成功: 返回EOK(0) 失败:返回其它 |
字符串拼接函数 | errno_t strncat_s(char *strDest, size_t destMax, const char *strSrc, size_t count); | 成功: 返回EOK(0) 失败:返回其它 |
字符串分割函数 | char *strtok_s(char *strToken, const char *strDelimit, char **context); | 如果分割的字符串长度等于0,则返回NULL,否则返回该字符串首地址 |
不难看出,大部分安全函数与普通内存操作函数相比,安全函数名称多出一个_s
,形参多出了一个size_t destMax
参数,具体参数含义请参考源码,安全函数定义的OpenHarmony源码路径为://third_party/bounds_checking_function/include/securec.h