2 * Copyright (C) 2005-2009 Atsushi Konno All rights reserved.
3 * Copyright (C) 2005 QSDN,Inc. All rights reserved.
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
9 * http://www.apache.org/licenses/LICENSE-2.0
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
17 #include "chxj_str_util.h"
18 #if !defined (__CHXJ_STR_UTIL_C__)
19 #define __CHXJ_STR_UTIL_C__
22 chxj_chk_numeric(const char *s)
27 if (! s) return -1; /* NG(not numeric) */
30 if (len == 0) return -1; /* NG(not numeric) */
32 for (ii=0; ii<len; ii++) {
33 if (ii == 0 && (s[ii] < '0' || s[ii] > '9') && s[ii] != '-') {
34 return -1; /* NG(not numeric) */
36 if (ii != 0 && (s[ii] < '0' || s[ii] > '9')) {
37 return -1; /* NG(not numeric) */
46 _chxj_atoi(const char *s, int base)
60 for (ii=0; ii < len && break_flag == 0; ii++) {
63 case '0': result += 0; break;
64 case '1': result += 1; break;
65 case '2': result += 2; break;
66 case '3': result += 3; break;
67 case '4': result += 4; break;
68 case '5': result += 5; break;
69 case '6': result += 6; break;
70 case '7': result += 7; break;
71 case '8': result += 8; break;
72 case '9': result += 9; break;
73 case 'a': case 'A': result += 10; break;
74 case 'b': case 'B': result += 11; break;
75 case 'c': case 'C': result += 12; break;
76 case 'd': case 'D': result += 13; break;
77 case 'e': case 'E': result += 14; break;
78 case 'f': case 'F': result += 15; break;
110 chxj_atoi(const char *s)
112 return _chxj_atoi(s, 10);
115 chxj_axtoi(const char *s)
117 return _chxj_atoi(s, 16);
121 chxj_strcasenrcmp(apr_pool_t *p, const char *s1, const char *s2, int n)
134 s1_len = strlen(s1) - 1;
140 s2_len = strlen(s2) - 1;
143 ss1 = (char *)apr_palloc(p, s1_len + 2);
147 ss2 = (char *)apr_palloc(p, s2_len + 2);
160 ss1p = &ss1[s1_len+1];
161 ss2p = &ss2[s2_len+1];
163 for (;*ss1p && *ss2p && *ss1p == *ss2p && n - 1 > 0; ss1p--, ss2p--, n--);
164 return (int)(*ss1p - *ss2p);
169 chxj_starts_with(const char *str, const char *word)
172 char *w = (char *)word;
173 char *s = (char *)str;
177 if (len == 0) len = 1;
178 return strncasecmp(s, w, len) == 0;
183 chxj_add_slash_to_doublequote(apr_pool_t *pool, const char *str)
194 for (ii=0; ii<len; ii++) {
195 if (str[ii] == '"') {
199 tlen = (len - cnt) + (cnt * (sizeof(""")-1)) + 1;
200 ret = apr_palloc(pool, tlen);
201 memset(ret, 0, tlen);
203 for (ii=0; ii<len; ii++) {
204 if (str[ii] == '"') {
205 strcpy(&ret[pos], """);
206 pos += sizeof(""")-1;
209 ret[pos++] = str[ii];
217 chxj_strcount(const char *s, const char *str)
219 register char *p = (char *)s;
221 int len = strlen(str);
224 for (i=0; i<len; i++) {
225 if (*p == str[(unsigned int)i]) {