Mercurial > urweb
comparison src/c/memmem.c @ 914:782f0b4eea67
New release
author | Adam Chlipala <adamc@hcoop.net> |
---|---|
date | Tue, 25 Aug 2009 17:33:13 -0400 |
parents | |
children | 7accd4546cf9 |
comparison
equal
deleted
inserted
replaced
913:b26823138bf8 | 914:782f0b4eea67 |
---|---|
1 /* $NetBSD$ */ | |
2 | |
3 /*- | |
4 * Copyright (c) 2003 The NetBSD Foundation, Inc. | |
5 * All rights reserved. | |
6 * | |
7 * This code is derived from software contributed to The NetBSD Foundation | |
8 * by | |
9 * | |
10 * Redistribution and use in source and binary forms, with or without | |
11 * modification, are permitted provided that the following conditions | |
12 * are met: | |
13 * 1. Redistributions of source code must retain the above copyright | |
14 * notice, this list of conditions and the following disclaimer. | |
15 * 2. Redistributions in binary form must reproduce the above copyright | |
16 * notice, this list of conditions and the following disclaimer in the | |
17 * documentation and/or other materials provided with the distribution. | |
18 * 3. All advertising materials mentioning features or use of this software | |
19 * must display the following acknowledgement: | |
20 * This product includes software developed by the NetBSD | |
21 * Foundation, Inc. and its contributors. | |
22 * 4. Neither the name of The NetBSD Foundation nor the names of its | |
23 * contributors may be used to endorse or promote products derived | |
24 * from this software without specific prior written permission. | |
25 * | |
26 * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS | |
27 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED | |
28 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR | |
29 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS | |
30 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR | |
31 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF | |
32 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS | |
33 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN | |
34 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | |
35 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE | |
36 * POSSIBILITY OF SUCH DAMAGE. | |
37 */ | |
38 | |
39 #include <sys/cdefs.h> | |
40 #if defined(LIBC_SCCS) && !defined(lint) | |
41 __RCSID("$NetBSD$"); | |
42 #endif /* LIBC_SCCS and not lint */ | |
43 | |
44 #if !defined(_KERNEL) && !defined(_STANDALONE) | |
45 #include <assert.h> | |
46 #include <string.h> | |
47 #else | |
48 #include <lib/libkern/libkern.h> | |
49 #define _DIAGASSERT(x) (void)0 | |
50 #define NULL ((char *)0) | |
51 #endif | |
52 | |
53 /* | |
54 * memmem() returns the location of the first occurence of data | |
55 * pattern b2 of size len2 in memory block b1 of size len1 or | |
56 * NULL if none is found. | |
57 */ | |
58 void * | |
59 memmem(const void *b1, const void *b2, size_t len1, size_t len2) | |
60 { | |
61 /* Initialize search pointer */ | |
62 char *sp = (char *) b1; | |
63 | |
64 /* Initialize pattern pointer */ | |
65 char *pp = (char *) b2; | |
66 | |
67 /* Intialize end of search address space pointer */ | |
68 char *eos = sp + len1 - len2; | |
69 | |
70 /* Sanity check */ | |
71 if(!(b1 && b2 && len1 && len2)) | |
72 return NULL; | |
73 | |
74 while (sp <= eos) { | |
75 if (*sp == *pp) | |
76 if (memcmp(sp, pp, len2) == 0) | |
77 return sp; | |
78 | |
79 sp++; | |
80 } | |
81 | |
82 return NULL; | |
83 } |