citrus_bcs.c revision 1.1 1 /* $NetBSD: citrus_bcs.c,v 1.1 2003/06/25 09:51:26 tshiozak Exp $ */
2
3 /*-
4 * Copyright (c)2003 Citrus Project,
5 * All rights reserved.
6 *
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions
9 * are met:
10 * 1. Redistributions of source code must retain the above copyright
11 * notice, this list of conditions and the following disclaimer.
12 * 2. Redistributions in binary form must reproduce the above copyright
13 * notice, this list of conditions and the following disclaimer in the
14 * documentation and/or other materials provided with the distribution.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
17 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
20 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
21 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
22 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
23 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
24 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
25 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
26 * SUCH DAMAGE.
27 */
28
29 #include <sys/cdefs.h>
30 #if defined(LIBC_SCCS) && !defined(lint)
31 __RCSID("$NetBSD: citrus_bcs.c,v 1.1 2003/06/25 09:51:26 tshiozak Exp $");
32 #endif /* LIBC_SCCS and not lint */
33
34 #ifndef HOSTPROG
35 #include "namespace.h"
36 #endif
37 #include <assert.h>
38 #include <stdlib.h>
39
40 #include "citrus_namespace.h"
41 #include "citrus_bcs.h"
42
43 int
44 _citrus_bcs_strcasecmp(const char * __restrict str1,
45 const char * __restrict str2)
46 {
47 int c1=1, c2=1;
48
49 while (c1 && c2 && c1==c2) {
50 c1 = _bcs_toupper(*str1++);
51 c2 = _bcs_toupper(*str2++);
52 }
53
54 return ((c1==c2) ? 0 : ((c1>c2) ? 1:-1));
55 }
56
57 int
58 _citrus_bcs_strncasecmp(const char * __restrict str1,
59 const char * __restrict str2, size_t sz)
60 {
61 int c1=1, c2=1;
62
63 while (c1 && c2 && c1==c2 && sz!=0) {
64 c1 = _bcs_toupper(*str1++);
65 c2 = _bcs_toupper(*str2++);
66 sz--;
67 }
68
69 return ((c1==c2) ? 0 : ((c1>c2) ? 1:-1));
70 }
71
72 const char *
73 _citrus_bcs_skip_ws(const char *p)
74 {
75
76 while (*p && _bcs_isspace(*p))
77 p++;
78
79 return (p);
80 }
81
82 const char *
83 _citrus_bcs_skip_nonws(const char *p)
84 {
85
86 while (*p && !_bcs_isspace(*p))
87 p++;
88
89 return (p);
90 }
91
92 const char *
93 _citrus_bcs_skip_ws_len(const char * __restrict p, size_t * __restrict len)
94 {
95
96 while (*p && *len>0 && _bcs_isspace(*p)) {
97 p++;
98 (*len)--;
99 }
100
101 return (p);
102 }
103
104 const char *
105 _citrus_bcs_skip_nonws_len(const char * __restrict p, size_t * __restrict len)
106 {
107
108 while (*p && *len>0 && !_bcs_isspace(*p)) {
109 p++;
110 (*len)--;
111 }
112
113 return (p);
114 }
115
116 void
117 _citrus_bcs_trunc_rws_len(const char * __restrict p, size_t * __restrict len)
118 {
119
120 while (*len>0 && _bcs_isspace(p[*len-1]))
121 (*len)--;
122 }
123
124 void
125 _citrus_bcs_convert_to_lower(char *s)
126 {
127 while (*s) {
128 *s = _bcs_tolower(*s);
129 s++;
130 }
131 }
132
133 void _citrus_bcs_convert_to_upper(char *s)
134 {
135 while (*s) {
136 *s = _bcs_toupper(*s);
137 s++;
138 }
139 }
140