blob: 2168e91dec1fad0e5f290c7c47c7504d265befe5 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
|
/* -*- Mode: c; c-basic-offset: 2 -*-
*
* raptor_memstr.c - search for a string in a block of memory
*
* Copyright (C) 2008, David Beckett http://www.dajobe.org/
*
* This package is Free Software and part of Redland http://librdf.org/
*
* It is licensed under the following three licenses as alternatives:
* 1. GNU Lesser General Public License (LGPL) V2.1 or any newer version
* 2. GNU General Public License (GPL) V2 or any newer version
* 3. Apache License, V2.0 or any newer version
*
* You may not use this file except in compliance with at least one of
* the above three licenses.
*
* See LICENSE.html or LICENSE.txt at the top of this package for the
* complete terms and further detail along with the license texts for
* the licenses in COPYING.LIB, COPYING and LICENSE-2.0.txt respectively.
*
*
*/
#ifdef HAVE_CONFIG_H
#include <raptor_config.h>
#endif
#include <string.h>
/* Raptor includes */
#include "raptor2.h"
#include "raptor_internal.h"
/*
* raptor_memstr:
* @haystack: memory block to search in
* @haystack_len: size of memory block
* @needle: string to search with
*
* INTERNAL: Search for a string in a block of memory
*
* The block of memory in @haystack may not be NUL terminated but
* the searching for @needle will end if a NUL is found in @haystack.
*
* Return value: pointer to match string or NULL on failure or failed to find
*/
const char*
raptor_memstr(const char *haystack, size_t haystack_len, const char *needle)
{
size_t needle_len;
const char *p;
if(!haystack || !needle)
return NULL;
if(!*needle)
return haystack;
needle_len = strlen(needle);
/* loop invariant: haystack_len is always length of remaining buffer at *p */
for(p = haystack;
(haystack_len >= needle_len) && *p;
p++, haystack_len--) {
/* check match */
if(!memcmp(p, needle, needle_len))
return p;
}
return NULL;
}
|