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:
Li, Fei1 2018-12-12 22:28:45 +08:00 committed by wenlingz
parent e114ea7e5d
commit e066774a1c

View File

@ -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;
} }