Annotation of libaitwww/src/tools.c, revision 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>