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