176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* 276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * Copyright (C) 1991, 1992 Linus Torvalds 376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * Copyright (C) 2004 Tobias Lorenz 476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * 576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * string handling functions 676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * based on linux/lib/string.c 776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * 876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * This program is free software; you can redistribute it and/or modify 976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * it under the terms of the GNU General Public License version 2 as 1076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * published by the Free Software Foundation. 1176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman */ 1276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 1376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* 1476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * stupid library routines.. The optimized versions should generally be found 1576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * as inline code in <asm-xx/string.h> 1676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * 1776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * These are buggy as well.. 1876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * 1976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * * Fri Jun 25 1999, Ingo Oeser <ioe@informatik.tu-chemnitz.de> 2076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * - Added strsep() which will replace strtok() soon (because strsep() is 2176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * reentrant and should be faster). Use only strsep() in new code, please. 2276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman */ 2376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 2476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* 2576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * these are the standard string functions that are currently not used by 2676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * any code in etherboot. put into a separate file to avoid linking them in 2776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * with the rest of string.o 2876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * if anything ever does want to use a function of these, consider moving 2976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * the function in question back into string.c 3076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman */ 3176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 3276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#include <stdint.h> 3376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#include <stdlib.h> 3476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#include <string.h> 3576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#include <ctype.h> 3676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 3776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* *** FROM string.c *** */ 3876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 3976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#ifndef __HAVE_ARCH_STRNICMP 4076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** 4176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * strnicmp - Case insensitive, length-limited string comparison 4276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * @s1: One string 4376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * @s2: The other string 4476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * @len: the maximum number of characters to compare 4576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman */ 4676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanint strnicmp(const char *s1, const char *s2, size_t len) 4776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman{ 4876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman /* Yes, Virginia, it had better be unsigned */ 4976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman unsigned char c1, c2; 5076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 5176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman c1 = 0; c2 = 0; 5276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman if (len) { 5376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman do { 5476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman c1 = *s1; c2 = *s2; 5576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman s1++; s2++; 5676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman if (!c1) 5776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman break; 5876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman if (!c2) 5976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman break; 6076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman if (c1 == c2) 6176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman continue; 6276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman c1 = tolower(c1); 6376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman c2 = tolower(c2); 6476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman if (c1 != c2) 6576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman break; 6676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman } while (--len); 6776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman } 6876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman return (int)c1 - (int)c2; 6976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} 7076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#endif 7176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 7276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanchar * ___strtok; 7376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 7476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#ifndef __HAVE_ARCH_STRNCAT 7576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** 7676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * strncat - Append a length-limited, %NUL-terminated string to another 7776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * @dest: The string to be appended to 7876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * @src: The string to append to it 7976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * @count: The maximum numbers of bytes to copy 8076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * 8176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * Note that in contrast to strncpy, strncat ensures the result is 8276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * terminated. 8376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman */ 8476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanchar * strncat(char *dest, const char *src, size_t count) 8576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman{ 8676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman char *tmp = dest; 8776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 8876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman if (count) { 8976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman while (*dest) 9076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman dest++; 9176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman while ((*dest++ = *src++)) { 9276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman if (--count == 0) { 9376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman *dest = '\0'; 9476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman break; 9576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman } 9676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman } 9776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman } 9876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 9976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman return tmp; 10076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} 10176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#endif 10276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 10376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#ifndef __HAVE_ARCH_STRSPN 10476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** 10576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * strspn - Calculate the length of the initial substring of @s which only 10676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * contain letters in @accept 10776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * @s: The string to be searched 10876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * @accept: The string to search for 10976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman */ 11076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmansize_t strspn(const char *s, const char *accept) 11176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman{ 11276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman const char *p; 11376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman const char *a; 11476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman size_t count = 0; 11576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 11676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman for (p = s; *p != '\0'; ++p) { 11776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman for (a = accept; *a != '\0'; ++a) { 11876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman if (*p == *a) 11976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman break; 12076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman } 12176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman if (*a == '\0') 12276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman return count; 12376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman ++count; 12476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman } 12576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 12676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman return count; 12776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} 12876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#endif 12976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 13076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#ifndef __HAVE_ARCH_STRCSPN 13176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** 13276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * strcspn - Calculate the length of the initial substring of @s which only 13376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * contain letters not in @reject 13476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * @s: The string to be searched 13576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * @accept: The string to search for 13676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman */ 13776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmansize_t strcspn(const char *s, const char *reject) 13876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman{ 13976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman const char *p; 14076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman const char *r; 14176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman size_t count = 0; 14276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 14376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman for (p = s; *p != '\0'; ++p) { 14476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman for (r = reject; *r != '\0'; ++r) { 14576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman if (*p == *r) 14676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman return count; 14776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman } 14876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman ++count; 14976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman } 15076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 15176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman return count; 15276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} 15376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#endif 15476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 15576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#ifndef __HAVE_ARCH_STRPBRK 15676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** 15776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * strpbrk - Find the first occurrence of a set of characters 15876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * @cs: The string to be searched 15976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * @ct: The characters to search for 16076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman */ 16176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanchar * strpbrk(const char * cs,const char * ct) 16276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman{ 16376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman const char *sc1,*sc2; 16476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 16576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman for( sc1 = cs; *sc1 != '\0'; ++sc1) { 16676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman for( sc2 = ct; *sc2 != '\0'; ++sc2) { 16776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman if (*sc1 == *sc2) 16876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman return (char *) sc1; 16976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman } 17076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman } 17176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman return NULL; 17276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} 17376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#endif 17476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 17576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#ifndef __HAVE_ARCH_STRTOK 17676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** 17776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * strtok - Split a string into tokens 17876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * @s: The string to be searched 17976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * @ct: The characters to search for 18076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * 18176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * WARNING: strtok is deprecated, use strsep instead. 18276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman */ 18376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanchar * strtok(char * s,const char * ct) 18476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman{ 18576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman char *sbegin, *send; 18676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 18776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman sbegin = s ? s : ___strtok; 18876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman if (!sbegin) { 18976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman return NULL; 19076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman } 19176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman sbegin += strspn(sbegin,ct); 19276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman if (*sbegin == '\0') { 19376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman ___strtok = NULL; 19476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman return( NULL ); 19576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman } 19676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman send = strpbrk( sbegin, ct); 19776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman if (send && *send != '\0') 19876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman *send++ = '\0'; 19976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman ___strtok = send; 20076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman return (sbegin); 20176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} 20276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#endif 20376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 20476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#ifndef __HAVE_ARCH_STRSEP 20576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** 20676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * strsep - Split a string into tokens 20776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * @s: The string to be searched 20876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * @ct: The characters to search for 20976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * 21076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * strsep() updates @s to point after the token, ready for the next call. 21176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * 21276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * It returns empty tokens, too, behaving exactly like the libc function 21376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * of that name. In fact, it was stolen from glibc2 and de-fancy-fied. 21476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * Same semantics, slimmer shape. ;) 21576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman */ 21676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanchar * strsep(char **s, const char *ct) 21776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman{ 21876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman char *sbegin = *s, *end; 21976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 22076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman if (sbegin == NULL) 22176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman return NULL; 22276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 22376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman end = strpbrk(sbegin, ct); 22476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman if (end) 22576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman *end++ = '\0'; 22676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman *s = end; 22776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 22876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman return sbegin; 22976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} 23076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#endif 23176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 23276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#ifndef __HAVE_ARCH_BCOPY 23376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** 23476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * bcopy - Copy one area of memory to another 23576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * @src: Where to copy from 23676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * @dest: Where to copy to 23776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * @count: The size of the area. 23876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * 23976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * Note that this is the same as memcpy(), with the arguments reversed. 24076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * memcpy() is the standard, bcopy() is a legacy BSD function. 24176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * 24276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * You should not use this function to access IO space, use memcpy_toio() 24376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * or memcpy_fromio() instead. 24476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman */ 24576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanchar * bcopy(const char * src, char * dest, int count) 24676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman{ 24776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman return memmove(dest,src,count); 24876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} 24976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#endif 25076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 25176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#ifndef __HAVE_ARCH_MEMSCAN 25276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** 25376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * memscan - Find a character in an area of memory. 25476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * @addr: The memory area 25576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * @c: The byte to search for 25676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * @size: The size of the area. 25776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * 25876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * returns the address of the first occurrence of @c, or 1 byte past 25976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * the area if @c is not found 26076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman */ 26176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanvoid * memscan(const void * addr, int c, size_t size) 26276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman{ 26376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman unsigned char * p = (unsigned char *) addr; 26476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 26576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman while (size) { 26676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman if (*p == c) 26776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman return (void *) p; 26876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman p++; 26976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman size--; 27076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman } 27176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman return (void *) p; 27276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} 27376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#endif 274