// SPDX-License-Identifier: GPL-2.0 | |
/* | |
* Taken from: | |
* linux/lib/string.c | |
* | |
* Copyright (C) 1991, 1992 Linus Torvalds | |
*/ | |
#include <linux/types.h> | |
#include <linux/string.h> | |
#ifndef __HAVE_ARCH_STRSTR | |
/** | |
* strstr - Find the first substring in a %NUL terminated string | |
* @s1: The string to be searched | |
* @s2: The string to search for | |
*/ | |
char *strstr(const char *s1, const char *s2) | |
{ | |
size_t l1, l2; | |
l2 = strlen(s2); | |
if (!l2) | |
return (char *)s1; | |
l1 = strlen(s1); | |
while (l1 >= l2) { | |
l1--; | |
if (!memcmp(s1, s2, l2)) | |
return (char *)s1; | |
s1++; | |
} | |
return NULL; | |
} | |
#endif | |
#ifndef __HAVE_ARCH_STRNCMP | |
/** | |
* strncmp - Compare two length-limited strings | |
* @cs: One string | |
* @ct: Another string | |
* @count: The maximum number of bytes to compare | |
*/ | |
int strncmp(const char *cs, const char *ct, size_t count) | |
{ | |
unsigned char c1, c2; | |
while (count) { | |
c1 = *cs++; | |
c2 = *ct++; | |
if (c1 != c2) | |
return c1 < c2 ? -1 : 1; | |
if (!c1) | |
break; | |
count--; | |
} | |
return 0; | |
} | |
#endif |