mirror of
https://github.com/projectacrn/acrn-hypervisor.git
synced 2025-08-28 12:44:38 +00:00
hv: refine strnlen_s/strstr_s to only one exit point
Fix procedure has more than one exit point Tracked-On: #861 Signed-off-by: Li, Fei1 <fei1.li@intel.com>
This commit is contained in:
parent
e114ea7e5d
commit
e066774a1c
@ -288,22 +288,19 @@ char *strncpy_s(char *d_arg, size_t dmax, const char *s_arg, size_t slen_arg)
|
|||||||
size_t strnlen_s(const char *str_arg, size_t maxlen_arg)
|
size_t strnlen_s(const char *str_arg, size_t maxlen_arg)
|
||||||
{
|
{
|
||||||
const char *str = str_arg;
|
const char *str = str_arg;
|
||||||
size_t maxlen = maxlen_arg;
|
size_t count = 0U;
|
||||||
size_t count;
|
|
||||||
|
|
||||||
if (str == NULL) {
|
if (str != NULL) {
|
||||||
return 0;
|
size_t maxlen = maxlen_arg;
|
||||||
}
|
while ((*str) != '\0') {
|
||||||
|
if (maxlen == 0U) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
count = 0U;
|
count++;
|
||||||
while ((*str) != '\0') {
|
maxlen--;
|
||||||
if (maxlen == 0U) {
|
str++;
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
count++;
|
|
||||||
maxlen--;
|
|
||||||
str++;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return count;
|
return count;
|
||||||
@ -359,44 +356,39 @@ char *strstr_s(const char *str1, size_t maxlen1, const char *str2, size_t maxlen
|
|||||||
{
|
{
|
||||||
size_t len1, len2;
|
size_t len1, len2;
|
||||||
size_t i;
|
size_t i;
|
||||||
const char *pstr;
|
const char *pstr, *pret;
|
||||||
|
|
||||||
if ((str1 == NULL) || (str2 == NULL)) {
|
if ((str1 == NULL) || (str2 == NULL)) {
|
||||||
return NULL;
|
pret = NULL;
|
||||||
}
|
} else if ((maxlen1 == 0U) || (maxlen2 == 0U)) {
|
||||||
|
pret = NULL;
|
||||||
|
} else {
|
||||||
|
len1 = strnlen_s(str1, maxlen1);
|
||||||
|
len2 = strnlen_s(str2, maxlen2);
|
||||||
|
|
||||||
if ((maxlen1 == 0U) || (maxlen2 == 0U)) {
|
if (len1 < len2) {
|
||||||
return NULL;
|
pret = NULL;
|
||||||
}
|
} else if ((str1 == str2) || (len2 == 0U)) {
|
||||||
|
/* return str1 if str2 equals to str1 or str2 points to a string with zero length*/
|
||||||
len1 = strnlen_s(str1, maxlen1);
|
pret = str1;
|
||||||
len2 = strnlen_s(str2, maxlen2);
|
} else {
|
||||||
|
pret = NULL;
|
||||||
if (len1 < len2) {
|
pstr = str1;
|
||||||
return NULL;
|
while (len1 >= len2) {
|
||||||
}
|
for (i = 0U; i < len2; i++) {
|
||||||
|
if (pstr[i] != str2[i]) {
|
||||||
/* return str1 if str2 equals to str1 or str2 points to a string with zero length*/
|
break;
|
||||||
if ((str1 == str2) || (len2 == 0U)) {
|
}
|
||||||
return (char *)str1;
|
}
|
||||||
}
|
if (i == len2) {
|
||||||
|
pret = pstr;
|
||||||
pstr = str1;
|
break;
|
||||||
while (len1 >= len2) {
|
}
|
||||||
for (i = 0U; i < len2; i++) {
|
pstr++;
|
||||||
if (pstr[i] != str2[i]) {
|
len1--;
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (i == len2) {
|
|
||||||
return (char *)pstr;
|
|
||||||
}
|
|
||||||
pstr++;
|
|
||||||
len1--;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
return (char *)pret;
|
||||||
* substring was not found, return NULL
|
|
||||||
*/
|
|
||||||
return NULL;
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user