File: | src/lib/libc/stdlib/lsearch.c |
Warning: | line 52, column 13 Null pointer passed as 1st argument to memory copy function |
Press '?' to see keyboard shortcuts
Keyboard shortcuts:
1 | /* $OpenBSD: lsearch.c,v 1.7 2021/12/08 22:06:28 cheloha Exp $ */ | |||
2 | ||||
3 | /* | |||
4 | * Copyright (c) 1989, 1993 | |||
5 | * The Regents of the University of California. All rights reserved. | |||
6 | * | |||
7 | * This code is derived from software contributed to Berkeley by | |||
8 | * Roger L. Snyder. | |||
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. Neither the name of the University nor the names of its contributors | |||
19 | * may be used to endorse or promote products derived from this software | |||
20 | * without specific prior written permission. | |||
21 | * | |||
22 | * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND | |||
23 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | |||
24 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | |||
25 | * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE | |||
26 | * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | |||
27 | * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS | |||
28 | * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | |||
29 | * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | |||
30 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | |||
31 | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | |||
32 | * SUCH DAMAGE. | |||
33 | */ | |||
34 | ||||
35 | #include <sys/types.h> | |||
36 | #include <string.h> | |||
37 | #include <search.h> | |||
38 | ||||
39 | typedef int (*cmp_fn_t)(const void *, const void *); | |||
40 | ||||
41 | void * | |||
42 | lsearch(const void *key, void *base, size_t *nelp, size_t width, | |||
43 | cmp_fn_t compar) | |||
44 | { | |||
45 | void *element = lfind(key, base, nelp, width, compar); | |||
| ||||
46 | ||||
47 | /* | |||
48 | * Use memmove(3) to ensure the key is copied cleanly into the | |||
49 | * array, even if the key overlaps with the end of the array. | |||
50 | */ | |||
51 | if (element == NULL((void *)0)) { | |||
52 | element = memmove((char *)base + *nelp * width, key, width); | |||
| ||||
53 | *nelp += 1; | |||
54 | } | |||
55 | return element; | |||
56 | } | |||
57 | ||||
58 | void * | |||
59 | lfind(const void *key, const void *base, size_t *nelp, size_t width, | |||
60 | cmp_fn_t compar) | |||
61 | { | |||
62 | const char *element, *end; | |||
63 | ||||
64 | end = (const char *)base + *nelp * width; | |||
65 | for (element = base; element < end; element += width) | |||
66 | if (!compar(key, element)) /* key found */ | |||
67 | return((void *)element); | |||
68 | return NULL((void *)0); | |||
69 | } | |||
70 | DEF_WEAK(lfind)__asm__(".weak " "lfind" " ; " "lfind" " = " "_libc_lfind"); |