safec
2.1
Safe C Library - ISO TR24731 Bounds Checking Interface
strcspn_s.c
Go to the documentation of this file.
1
/*------------------------------------------------------------------
2
* strcspn_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
72
errno_t
73
strcspn_s
(
const
char
*dest, rsize_t dmax,
74
const
char
*src, rsize_t slen, rsize_t *count)
75
{
76
const
char
*scan2;
77
rsize_t smax;
78
79
if
(count== NULL) {
80
invoke_safe_str_constraint_handler
(
"strcspn_s: count is null"
,
81
NULL, ESNULLP);
82
return
RCNEGATE(ESNULLP);
83
}
84
*count = 0;
85
86
if
(dest == NULL) {
87
invoke_safe_str_constraint_handler
(
"strcspn_s: dest is null"
,
88
NULL, ESNULLP);
89
return
RCNEGATE(ESNULLP);
90
}
91
92
if
(src == NULL) {
93
invoke_safe_str_constraint_handler
(
"strcspn_s: src is null"
,
94
NULL, ESNULLP);
95
return
RCNEGATE(ESNULLP);
96
}
97
98
if
(dmax == 0 ) {
99
invoke_safe_str_constraint_handler
(
"strcspn_s: dmax is 0"
,
100
NULL, ESZEROL);
101
return
RCNEGATE(ESZEROL);
102
}
103
104
if
(dmax > RSIZE_MAX_STR) {
105
invoke_safe_str_constraint_handler
(
"strcspn_s: dmax exceeds max"
,
106
NULL, ESLEMAX);
107
return
RCNEGATE(ESLEMAX);
108
}
109
110
if
(slen == 0 ) {
111
invoke_safe_str_constraint_handler
(
"strcspn_s: slen is 0"
,
112
NULL, ESZEROL);
113
return
RCNEGATE(ESZEROL);
114
}
115
116
if
(slen > RSIZE_MAX_STR) {
117
invoke_safe_str_constraint_handler
(
"strcspn_s: slen exceeds max"
,
118
NULL, ESLEMAX);
119
return
RCNEGATE(ESLEMAX);
120
}
121
122
while
(*dest && dmax) {
123
124
/*
125
* Scanning for exclusions, so if there is a match,
126
* we're done!
127
*/
128
smax = slen;
129
scan2 = src;
130
while
(*scan2 && smax) {
131
132
if
(*dest == *scan2) {
133
return
RCNEGATE(EOK);
134
}
135
scan2++;
136
smax--;
137
}
138
139
(*count)++;
140
dest++;
141
dmax--;
142
}
143
144
return
RCNEGATE(EOK);
145
}
146
EXPORT_SYMBOL(
strcspn_s
)
strcspn_s
errno_t strcspn_s(const char *dest, rsize_t dmax, const char *src, rsize_t slen, rsize_t *count)
This function computes the prefix length of the string pointed to by dest which consists entirely of ...
Definition:
strcspn_s.c:73
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