mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-10-03 15:47:36 +00:00
s390: fix strrchr() implementation
Fix two problems found in the strrchr() implementation for s390
architectures: evaluate empty strings (return the string address instead of
NULL, if '\0' is passed as second argument); evaluate the first character
of non-empty strings (the current implementation stops at the second).
Fixes: 1da177e4c3
("Linux-2.6.12-rc2")
Cc: stable@vger.kernel.org
Reported-by: Heiko Carstens <hca@linux.ibm.com> (incorrect behavior with empty strings)
Signed-off-by: Roberto Sassu <roberto.sassu@huawei.com>
Link: https://lore.kernel.org/r/20211005120836.60630-1-roberto.sassu@huawei.com
Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
Signed-off-by: Vasily Gorbik <gor@linux.ibm.com>
This commit is contained in:
parent
4540938952
commit
8e0ab8e26b
1 changed files with 6 additions and 7 deletions
|
@ -259,14 +259,13 @@ EXPORT_SYMBOL(strcmp);
|
||||||
#ifdef __HAVE_ARCH_STRRCHR
|
#ifdef __HAVE_ARCH_STRRCHR
|
||||||
char *strrchr(const char *s, int c)
|
char *strrchr(const char *s, int c)
|
||||||
{
|
{
|
||||||
size_t len = __strend(s) - s;
|
ssize_t len = __strend(s) - s;
|
||||||
|
|
||||||
if (len)
|
do {
|
||||||
do {
|
if (s[len] == (char)c)
|
||||||
if (s[len] == (char) c)
|
return (char *)s + len;
|
||||||
return (char *) s + len;
|
} while (--len >= 0);
|
||||||
} while (--len > 0);
|
return NULL;
|
||||||
return NULL;
|
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(strrchr);
|
EXPORT_SYMBOL(strrchr);
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in a new issue