diff options
Diffstat (limited to 'lib/string.c')
| -rw-r--r-- | lib/string.c | 20 | 
1 files changed, 14 insertions, 6 deletions
| diff --git a/lib/string.c b/lib/string.c index b19b87af65a..e96421ab9a9 100644 --- a/lib/string.c +++ b/lib/string.c @@ -246,13 +246,17 @@ EXPORT_SYMBOL(strlcat);  #undef strcmp  int strcmp(const char *cs, const char *ct)  { -	signed char __res; +	unsigned char c1, c2;  	while (1) { -		if ((__res = *cs - *ct++) != 0 || !*cs++) +		c1 = *cs++; +		c2 = *ct++; +		if (c1 != c2) +			return c1 < c2 ? -1 : 1; +		if (!c1)  			break;  	} -	return __res; +	return 0;  }  EXPORT_SYMBOL(strcmp);  #endif @@ -266,14 +270,18 @@ EXPORT_SYMBOL(strcmp);   */  int strncmp(const char *cs, const char *ct, size_t count)  { -	signed char __res = 0; +	unsigned char c1, c2;  	while (count) { -		if ((__res = *cs - *ct++) != 0 || !*cs++) +		c1 = *cs++; +		c2 = *ct++; +		if (c1 != c2) +			return c1 < c2 ? -1 : 1; +		if (!c1)  			break;  		count--;  	} -	return __res; +	return 0;  }  EXPORT_SYMBOL(strncmp);  #endif | 
