1 /*
2 * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
3 * Use is subject to license terms.
4 */
5
6 /*
7 * Copyright 1995 by OpenVision Technologies, Inc.
8 *
9 * Permission to use, copy, modify, distribute, and sell this software
10 * and its documentation for any purpose is hereby granted without fee,
11 * provided that the above copyright notice appears in all copies and
12 * that both that copyright notice and this permission notice appear in
13 * supporting documentation, and that the name of OpenVision not be used
14 * in advertising or publicity pertaining to distribution of the software
15 * without specific, written prior permission. OpenVision makes no
16 * representations about the suitability of this software for any
17 * purpose. It is provided "as is" without express or implied warranty.
18 *
19 * OPENVISION DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
20 * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
21 * EVENT SHALL OPENVISION BE LIABLE FOR ANY SPECIAL, INDIRECT OR
22 * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
23 * USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
24 * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
25 * PERFORMANCE OF THIS SOFTWARE.
26 */
27
28 /*
29 * $Id: util_set.c 16165 2004-03-14 05:31:43Z raeburn $
30 */
31
32 #include <mechglueP.h> /* SUNW15resync - for MALLOC/FREE */
33 #include "gssapiP_generic.h"
34
35 struct _g_set_elt {
36 void *key;
37 void *value;
38 struct _g_set_elt *next;
39 };
40
g_set_init(g_set_elt * s)41 int g_set_init(g_set_elt *s)
42 {
43 *s = NULL;
44
45 return(0);
46 }
47
48 #if 0
49 int g_set_destroy(g_set_elt *s)
50 {
51 g_set next;
52
53 while (*s) {
54 next = (*s)->next;
55 FREE(*s, sizeof(struct _g_set));
56 *s = next;
57 }
58
59 return(0);
60 }
61 #endif
62
g_set_entry_add(g_set_elt * s,void * key,void * value)63 int g_set_entry_add(g_set_elt *s, void *key, void *value)
64 {
65 g_set_elt first;
66
67 if ((first = (struct _g_set_elt *) MALLOC(sizeof(struct _g_set_elt))) == NULL)
68 return(ENOMEM);
69
70 first->key = key;
71 first->value = value;
72 first->next = *s;
73
74 *s = first;
75
76 return(0);
77 }
78
g_set_entry_delete(g_set_elt * s,void * key)79 int g_set_entry_delete(g_set_elt *s, void *key)
80 {
81 g_set_elt *p;
82
83 for (p=s; *p; p = &((*p)->next)) {
84 if ((*p)->key == key) {
85 g_set_elt next = (*p)->next;
86 FREE(*p, sizeof(struct _g_set_elt));
87 *p = next;
88
89 return(0);
90 }
91 }
92
93 return(-1);
94 }
95
g_set_entry_get(g_set_elt * s,void * key,void ** value)96 int g_set_entry_get(g_set_elt *s, void *key, void **value)
97 {
98 g_set_elt p;
99
100 for (p = *s; p; p = p->next) {
101 if (p->key == key) {
102 *value = p->value;
103
104 return(0);
105 }
106 }
107
108 *value = NULL;
109
110 return(-1);
111 }
112