1 /* $OpenBSD: constants.c,v 1.10 2005/04/08 22:32:09 cloder Exp $ */
2 /* $EOM: constants.c,v 1.7 1999/04/02 00:57:31 niklas Exp $ */
3
4 /*
5 * Copyright (c) 1998, 1999 Niklas Hallqvist. 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 ``AS IS'' AND ANY EXPRESS OR
17 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
18 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
19 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
20 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
21 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
22 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
23 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
25 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28 /*
29 * This code was written under funding by Ericsson Radio Systems.
30 */
31
32 #include <stdio.h>
33 #include <string.h>
34
35 #include "constants.h"
36
37 int
constant_value(struct constant_map * map,char * name)38 constant_value(struct constant_map *map, char *name)
39 {
40 struct constant_map *entry = map;
41
42 for (entry = map; entry->name; entry++)
43 if (strcasecmp(entry->name, name) == 0)
44 return entry->value;
45 return 0;
46 }
47
48 char *
constant_lookup(struct constant_map * map,int value)49 constant_lookup(struct constant_map *map, int value)
50 {
51 struct constant_map *entry = map;
52
53 for (entry = map; entry->name; entry++)
54 if (entry->value == value)
55 return entry->name;
56 return 0;
57 }
58
59 struct constant_map *
constant_link_lookup(struct constant_map * map,int value)60 constant_link_lookup(struct constant_map *map, int value)
61 {
62 struct constant_map *entry = map;
63
64 for (entry = map; entry->name; entry++)
65 if (entry->value == value)
66 return entry->link;
67 return 0;
68 }
69
70 char *
constant_name(struct constant_map * map,int value)71 constant_name(struct constant_map *map, int value)
72 {
73 static char tmp[32];/* XXX Ugly, I know. */
74 char *retval = constant_lookup(map, value);
75
76 if (!retval) {
77 snprintf(tmp, sizeof tmp, "<Unknown %d>", value);
78 return tmp;
79 }
80 return retval;
81 }
82
83 char *
constant_name_maps(struct constant_map ** maps,int value)84 constant_name_maps(struct constant_map **maps, int value)
85 {
86 static char tmp[32];/* XXX Ugly, I know. */
87 char *retval;
88 struct constant_map **map;
89
90 for (map = maps; *map; map++) {
91 retval = constant_lookup(*map, value);
92 if (retval)
93 return retval;
94 }
95 snprintf(tmp, sizeof tmp, "<Unknown %d>", value);
96 return tmp;
97 }
98