safec
2.1
Safe C Library - ISO TR24731 Bounds Checking Interface
Main Page
+
Files
File List
+
Globals
+
All
a
d
i
m
s
t
v
w
+
Functions
a
i
m
s
t
v
Variables
Macros
•
All
Files
Functions
Variables
Macros
Pages
strstr_s.c
Go to the documentation of this file.
1
/*------------------------------------------------------------------
2
* strstr_s.c
3
*
4
* November 2008, Bo Berry
5
*
6
* Copyright (c) 2008-2011 by Cisco Systems, Inc
7
* All rights reserved.
8
*
9
* Permission is hereby granted, free of charge, to any person
10
* obtaining a copy of this software and associated documentation
11
* files (the "Software"), to deal in the Software without
12
* restriction, including without limitation the rights to use,
13
* copy, modify, merge, publish, distribute, sublicense, and/or
14
* sell copies of the Software, and to permit persons to whom the
15
* Software is furnished to do so, subject to the following
16
* conditions:
17
*
18
* The above copyright notice and this permission notice shall be
19
* included in all copies or substantial portions of the Software.
20
*
21
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
22
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
23
* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
24
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
25
* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
26
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
27
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
28
* OTHER DEALINGS IN THE SOFTWARE.
29
*------------------------------------------------------------------
30
*/
31
32
#include "safeclib_private.h"
33
#include "safe_str_constraint.h"
34
#include "safe_str_lib.h"
35
36
68
errno_t
69
strstr_s
(
char
*dest, rsize_t dmax,
70
const
char
*src, rsize_t slen,
char
**substring)
71
{
72
rsize_t len;
73
rsize_t dlen;
74
int
i;
75
76
if
(substring == NULL) {
77
invoke_safe_str_constraint_handler
(
"strstr_s: substring is null"
,
78
NULL, ESNULLP);
79
return
RCNEGATE(ESNULLP);
80
}
81
*substring = NULL;
82
83
if
(dest == NULL) {
84
invoke_safe_str_constraint_handler
(
"strstr_s: dest is null"
,
85
NULL, ESNULLP);
86
return
RCNEGATE(ESNULLP);
87
}
88
89
if
(dmax == 0) {
90
invoke_safe_str_constraint_handler
(
"strstr_s: dmax is 0"
,
91
NULL, ESZEROL);
92
return
RCNEGATE(ESZEROL);
93
}
94
95
if
(dmax > RSIZE_MAX_STR) {
96
invoke_safe_str_constraint_handler
(
"strstr_s: dmax exceeds max"
,
97
NULL, ESLEMAX);
98
return
RCNEGATE(ESLEMAX);
99
}
100
101
if
(src == NULL) {
102
invoke_safe_str_constraint_handler
(
"strstr_s: src is null"
,
103
NULL, ESNULLP);
104
return
RCNEGATE(ESNULLP);
105
}
106
107
if
(slen == 0) {
108
invoke_safe_str_constraint_handler
(
"strstr_s: slen is 0"
,
109
NULL, ESZEROL);
110
return
RCNEGATE(ESZEROL);
111
}
112
113
if
(slen > RSIZE_MAX_STR) {
114
invoke_safe_str_constraint_handler
(
"strstr_s: slen exceeds max"
,
115
NULL, ESLEMAX);
116
return
RCNEGATE(ESLEMAX);
117
}
118
119
/*
120
* src points to a string with zero length, or
121
* src equals dest, return dest
122
*/
123
if
(*src ==
'\0'
|| dest == src) {
124
*substring = dest;
125
return
RCNEGATE(EOK);
126
}
127
128
while
(*dest && dmax) {
129
i = 0;
130
len = slen;
131
dlen = dmax;
132
133
while
(src[i] && dlen) {
134
135
/* not a match, not a substring */
136
if
(dest[i] != src[i]) {
137
break
;
138
}
139
140
/* move to the next char */
141
i++;
142
len--;
143
dlen--;
144
145
if
(src[i] ==
'\0'
|| !len) {
146
*substring = dest;
147
return
RCNEGATE(EOK);
148
}
149
}
150
dest++;
151
dmax--;
152
}
153
154
/*
155
* substring was not found, return NULL
156
*/
157
*substring = NULL;
158
return
RCNEGATE(ESNOTFND);
159
}
160
EXPORT_SYMBOL(
strstr_s
)
strstr_s
errno_t strstr_s(char *dest, rsize_t dmax, const char *src, rsize_t slen, char **substring)
The strstr_s() function locates the first occurrence of the substring pointed to by src which would b...
Definition:
strstr_s.c:69
invoke_safe_str_constraint_handler
void invoke_safe_str_constraint_handler(const char *msg, void *ptr, errno_t error)
Invokes the currently set constraint handler or the default.
Definition:
safe_str_constraint.c:99
Generated for Safe C Library 30082017.0-g85d10b 2.1 by
doxygen