Annotation of libaitwww/src/tools.c, revision 1.1.1.1
1.1 misho 1: /*************************************************************************
2: * (C) 2012 AITNET ltd - Sofia/Bulgaria - <misho@aitnet.org>
3: * by Michael Pounov <misho@elwix.org>
4: *
5: * $Author: misho $
6: * $Id: array.c,v 1.7 2012/02/02 21:32:42 misho Exp $
7: *
8: **************************************************************************
9: The ELWIX and AITNET software is distributed under the following
10: terms:
11:
12: All of the documentation and software included in the ELWIX and AITNET
13: Releases is copyrighted by ELWIX - Sofia/Bulgaria <info@elwix.org>
14:
15: Copyright 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
16: by Michael Pounov <misho@elwix.org>. All rights reserved.
17:
18: Redistribution and use in source and binary forms, with or without
19: modification, are permitted provided that the following conditions
20: are met:
21: 1. Redistributions of source code must retain the above copyright
22: notice, this list of conditions and the following disclaimer.
23: 2. Redistributions in binary form must reproduce the above copyright
24: notice, this list of conditions and the following disclaimer in the
25: documentation and/or other materials provided with the distribution.
26: 3. All advertising materials mentioning features or use of this software
27: must display the following acknowledgement:
28: This product includes software developed by Michael Pounov <misho@elwix.org>
29: ELWIX - Embedded LightWeight unIX and its contributors.
30: 4. Neither the name of AITNET nor the names of its contributors
31: may be used to endorse or promote products derived from this software
32: without specific prior written permission.
33:
34: THIS SOFTWARE IS PROVIDED BY AITNET AND CONTRIBUTORS ``AS IS'' AND
35: ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
36: IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
37: ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
38: FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
39: DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
40: OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
41: HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
42: LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
43: OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
44: SUCH DAMAGE.
45: */
46: #include "global.h"
47: #include "tools.h"
48:
49:
50: int
51: www_cmp(const char *ct, const char *s)
52: {
53: char *sc;
54:
55: assert(ct && s);
56:
57: while (isspace(*ct))
58: ct++;
59:
60: if (!(sc = strchr(ct, ';')))
61: sc = strchr(ct, '\x0');
62: while (isspace(*(sc - 1)))
63: sc--;
64:
65: if (strlen(s) != sc - ct)
66: return -1;
67: return strncasecmp(ct, s, sc - ct);
68: }
69:
70: int
71: www_cmptype(const char *ct, const char *type)
72: {
73: char *sl;
74:
75: assert(ct && type);
76:
77: while (isspace(*ct))
78: ct++;
79:
80: if (!(sl = strchr(ct, '/')))
81: return -1;
82:
83: if (strlen(type) != sl - ct)
84: return 1;
85: return strncasecmp(ct, type, sl - ct);
86: }
87:
88: char *
89: www_getpair(char ** __restrict str, const char *delim)
90: {
91: char *tr, *s = NULL;
92: int cx;
93:
94: assert(str && *str && delim);
95:
96: cx = strcspn(*str, delim);
97: tr = *str + cx;
98:
99: s = malloc(cx + 1);
100: if (!s) {
101: LOGERR;
102: return NULL;
103: } else {
104: strncpy(s, *str, cx);
105: s[cx] = 0;
106: }
107:
108: *str = tr;
109: if (*str)
110: (*str)++;
111:
112: return s;
113: }
114:
115: inline char
116: www_x2c(const char *str)
117: {
118: register char digit;
119:
120: assert(str);
121:
122: digit = (str[0] >= 'A' ? ((str[0] & 0xdf) - 'A') + 10 : (str[0] - '0'));
123: digit *= 16;
124: digit += (str[1] >= 'A' ? ((str[1] & 0xdf) - 'A') + 10 : (str[1] - '0'));
125:
126: return digit;
127: }
128:
129: inline void
130: www_unescape(char * __restrict str)
131: {
132: register int i, j;
133:
134: assert(str);
135:
136: for (i = j = 0; str[j]; i++, j++) {
137: str[i] = str[j];
138:
139: if (str[j] == '+')
140: str[i] = ' ';
141: else if (str[j] == '%') {
142: str[i] = www_x2c(&str[j + 1]);
143: j += 2;
144: }
145: }
146:
147: str[i] = 0;
148: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>