Annotation of embedaddon/ipsec-tools/src/racoon/str2val.c, revision 1.1.1.1
1.1 misho 1: /* $NetBSD: str2val.c,v 1.4 2006/09/09 16:22:10 manu Exp $ */
2:
3: /* $KAME: str2val.c,v 1.11 2001/08/16 14:37:29 itojun Exp $ */
4:
5: /*
6: * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
7: * All rights reserved.
8: *
9: * Redistribution and use in source and binary forms, with or without
10: * modification, are permitted provided that the following conditions
11: * are met:
12: * 1. Redistributions of source code must retain the above copyright
13: * notice, this list of conditions and the following disclaimer.
14: * 2. Redistributions in binary form must reproduce the above copyright
15: * notice, this list of conditions and the following disclaimer in the
16: * documentation and/or other materials provided with the distribution.
17: * 3. Neither the name of the project nor the names of its contributors
18: * may be used to endorse or promote products derived from this software
19: * without specific prior written permission.
20: *
21: * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
22: * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23: * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24: * ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
25: * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
26: * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
27: * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
28: * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29: * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
30: * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
31: * SUCH DAMAGE.
32: */
33:
34: #include "config.h"
35:
36: #include <sys/types.h>
37: #include <sys/param.h>
38: #include <ctype.h>
39:
40: #include <stdlib.h>
41: #include <stdio.h>
42:
43: #include "str2val.h"
44: #include "gcmalloc.h"
45:
46: /*
47: * exchange a value to a hex string.
48: * must free buffer allocated later.
49: */
50: caddr_t
51: val2str(buf, mlen)
52: const char *buf;
53: size_t mlen;
54: {
55: caddr_t new;
56: size_t len = (mlen * 2) + mlen / 8 + 10;
57: size_t i, j;
58:
59: if ((new = racoon_malloc(len)) == 0) return(0);
60:
61: for (i = 0, j = 0; i < mlen; i++) {
62: snprintf(&new[j], len - j, "%02x", (u_char)buf[i]);
63: j += 2;
64: if (i % 8 == 7) {
65: new[j++] = ' ';
66: new[j] = '\0';
67: }
68: }
69: new[j] = '\0';
70:
71: return(new);
72: }
73:
74: /*
75: * exchange a string based "base" to a value.
76: */
77: char *
78: str2val(str, base, len)
79: const char *str;
80: int base;
81: size_t *len;
82: {
83: int f;
84: size_t i;
85: char *dst;
86: char *rp;
87: const char *p;
88: char b[3];
89:
90: i = 0;
91: for (p = str; *p != '\0'; p++) {
92: if (isxdigit((int)*p))
93: i++;
94: else if (isspace((int)*p))
95: ;
96: else
97: return NULL;
98: }
99: if (i == 0 || (i % 2) != 0)
100: return NULL;
101: i /= 2;
102:
103: if ((dst = racoon_malloc(i)) == NULL)
104: return NULL;
105:
106: i = 0;
107: f = 0;
108: for (rp = dst, p = str; *p != '\0'; p++) {
109: if (isxdigit((int)*p)) {
110: if (!f) {
111: b[0] = *p;
112: f = 1;
113: } else {
114: b[1] = *p;
115: b[2] = '\0';
116: *rp++ = (char)strtol(b, NULL, base);
117: i++;
118: f = 0;
119: }
120: }
121: }
122:
123: *len = i;
124:
125: return(dst);
126: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>