1b2441318SGreg Kroah-Hartman // SPDX-License-Identifier: GPL-2.0 2e8f3010fSArd Biesheuvel /* 3e8f3010fSArd Biesheuvel * Taken from: 4e8f3010fSArd Biesheuvel * linux/lib/string.c 5e8f3010fSArd Biesheuvel * 6e8f3010fSArd Biesheuvel * Copyright (C) 1991, 1992 Linus Torvalds 7e8f3010fSArd Biesheuvel */ 8e8f3010fSArd Biesheuvel 9e8f3010fSArd Biesheuvel #include <linux/types.h> 10e8f3010fSArd Biesheuvel #include <linux/string.h> 11e8f3010fSArd Biesheuvel 12e8f3010fSArd Biesheuvel #ifndef __HAVE_ARCH_STRSTR 13e8f3010fSArd Biesheuvel /** 14e8f3010fSArd Biesheuvel * strstr - Find the first substring in a %NUL terminated string 15e8f3010fSArd Biesheuvel * @s1: The string to be searched 16e8f3010fSArd Biesheuvel * @s2: The string to search for 17e8f3010fSArd Biesheuvel */ 18e8f3010fSArd Biesheuvel char *strstr(const char *s1, const char *s2) 19e8f3010fSArd Biesheuvel { 20e8f3010fSArd Biesheuvel size_t l1, l2; 21e8f3010fSArd Biesheuvel 22e8f3010fSArd Biesheuvel l2 = strlen(s2); 23e8f3010fSArd Biesheuvel if (!l2) 24e8f3010fSArd Biesheuvel return (char *)s1; 25e8f3010fSArd Biesheuvel l1 = strlen(s1); 26e8f3010fSArd Biesheuvel while (l1 >= l2) { 27e8f3010fSArd Biesheuvel l1--; 28e8f3010fSArd Biesheuvel if (!memcmp(s1, s2, l2)) 29e8f3010fSArd Biesheuvel return (char *)s1; 30e8f3010fSArd Biesheuvel s1++; 31e8f3010fSArd Biesheuvel } 32e8f3010fSArd Biesheuvel return NULL; 33e8f3010fSArd Biesheuvel } 34e8f3010fSArd Biesheuvel #endif 35e8f3010fSArd Biesheuvel 36e8f3010fSArd Biesheuvel #ifndef __HAVE_ARCH_STRNCMP 37e8f3010fSArd Biesheuvel /** 38e8f3010fSArd Biesheuvel * strncmp - Compare two length-limited strings 39e8f3010fSArd Biesheuvel * @cs: One string 40e8f3010fSArd Biesheuvel * @ct: Another string 41e8f3010fSArd Biesheuvel * @count: The maximum number of bytes to compare 42e8f3010fSArd Biesheuvel */ 43e8f3010fSArd Biesheuvel int strncmp(const char *cs, const char *ct, size_t count) 44e8f3010fSArd Biesheuvel { 45e8f3010fSArd Biesheuvel unsigned char c1, c2; 46e8f3010fSArd Biesheuvel 47e8f3010fSArd Biesheuvel while (count) { 48e8f3010fSArd Biesheuvel c1 = *cs++; 49e8f3010fSArd Biesheuvel c2 = *ct++; 50e8f3010fSArd Biesheuvel if (c1 != c2) 51e8f3010fSArd Biesheuvel return c1 < c2 ? -1 : 1; 52e8f3010fSArd Biesheuvel if (!c1) 53e8f3010fSArd Biesheuvel break; 54e8f3010fSArd Biesheuvel count--; 55e8f3010fSArd Biesheuvel } 56e8f3010fSArd Biesheuvel return 0; 57e8f3010fSArd Biesheuvel } 58e8f3010fSArd Biesheuvel #endif 59