xref: /freebsd/crypto/krb5/src/lib/gssapi/generic/util_set.c (revision b670c9bafc0e31c7609969bf374b2e80bdc00211)
1 /* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil -*- */
2 /*
3  * Copyright 1995 by OpenVision Technologies, Inc.
4  *
5  * Permission to use, copy, modify, distribute, and sell this software
6  * and its documentation for any purpose is hereby granted without fee,
7  * provided that the above copyright notice appears in all copies and
8  * that both that copyright notice and this permission notice appear in
9  * supporting documentation, and that the name of OpenVision not be used
10  * in advertising or publicity pertaining to distribution of the software
11  * without specific, written prior permission. OpenVision makes no
12  * representations about the suitability of this software for any
13  * purpose.  It is provided "as is" without express or implied warranty.
14  *
15  * OPENVISION DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
16  * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
17  * EVENT SHALL OPENVISION BE LIABLE FOR ANY SPECIAL, INDIRECT OR
18  * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
19  * USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
20  * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
21  * PERFORMANCE OF THIS SOFTWARE.
22  */
23 
24 /*
25  * $Id$
26  */
27 
28 #include "gssapiP_generic.h"
29 
30 struct _g_set_elt {
31     void *key;
32     void *value;
33     struct _g_set_elt *next;
34 };
35 
36 int g_set_init(g_set_elt *s)
37 {
38     *s = NULL;
39 
40     return(0);
41 }
42 
43 int g_set_entry_add(g_set_elt *s, void *key, void *value)
44 {
45     g_set_elt first;
46 
47     if ((first = (struct _g_set_elt *) malloc(sizeof(struct _g_set_elt))) == NULL)
48         return(ENOMEM);
49 
50     first->key = key;
51     first->value = value;
52     first->next = *s;
53 
54     *s = first;
55 
56     return(0);
57 }
58 
59 int g_set_entry_delete(g_set_elt *s, void *key)
60 {
61     g_set_elt *p;
62 
63     for (p=s; *p; p = &((*p)->next)) {
64         if ((*p)->key == key) {
65             g_set_elt next = (*p)->next;
66             free(*p);
67             *p = next;
68 
69             return(0);
70         }
71     }
72 
73     return(-1);
74 }
75 
76 int g_set_entry_get(g_set_elt *s, void *key, void **value)
77 {
78     g_set_elt p;
79 
80     for (p = *s; p; p = p->next) {
81         if (p->key == key) {
82             *value = p->value;
83 
84             return(0);
85         }
86     }
87 
88     *value = NULL;
89 
90     return(-1);
91 }
92