Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/krb5/lib/gssapi/error_map.h
34868 views
1
/*
2
* This file is generated, please don't edit it.
3
* script: ../../../util/gen-map.pl
4
* args:
5
* -oerror_map.new
6
* NAME=gsserrmap
7
* KEY=OM_uint32
8
* VALUE=char *
9
* COMPARE=compare_OM_uint32
10
* FREEVALUE=free_string
11
* The rest of this file is copied from a template, with
12
* substitutions. See the template for copyright info.
13
*/
14
/*
15
* map, generated from template
16
* map name: gsserrmap
17
* key: OM_uint32
18
* value: char *
19
* compare: compare_OM_uint32
20
* copy_key: 0
21
* free_key: 0
22
* free_value: free_string
23
*/
24
struct gsserrmap__element {
25
OM_uint32 key;
26
char * value;
27
struct gsserrmap__element *next;
28
};
29
struct gsserrmap__head {
30
struct gsserrmap__element *first;
31
};
32
typedef struct gsserrmap__head gsserrmap;
33
static inline int gsserrmap_init (struct gsserrmap__head *head)
34
{
35
head->first = NULL;
36
return 0;
37
}
38
static inline void gsserrmap_destroy (struct gsserrmap__head *head)
39
{
40
struct gsserrmap__element *e, *e_next;
41
void (*free_key)(OM_uint32) = 0;
42
void (*free_value)(char *) = free_string;
43
for (e = head->first; e; e = e_next) {
44
e_next = e->next;
45
if (free_key)
46
(*free_key)(e->key);
47
if (free_value)
48
(*free_value)(e->value);
49
free(e);
50
}
51
head->first = NULL;
52
}
53
/* Returns pointer to linked-list entry, or null if key not found. */
54
static inline struct gsserrmap__element *
55
gsserrmap__find_node (struct gsserrmap__head *head, OM_uint32 key)
56
{
57
struct gsserrmap__element *e;
58
for (e = head->first; e; e = e->next)
59
if (compare_OM_uint32 (key, e->key) == 0)
60
return e;
61
return 0;
62
}
63
/* Returns pointer to value, or null if key not found. */
64
static inline char * *
65
gsserrmap_find (struct gsserrmap__head *head, OM_uint32 key)
66
{
67
struct gsserrmap__element *e = gsserrmap__find_node(head, key);
68
if (e)
69
return &e->value;
70
return 0;
71
}
72
/* Returns 0 or error code. */
73
static inline int
74
gsserrmap__copy_key (OM_uint32 *out, OM_uint32 in)
75
{
76
int (*copykey)(OM_uint32 *, OM_uint32) = 0;
77
if (copykey == 0) {
78
*out = in;
79
return 0;
80
} else
81
return (*copykey)(out, in);
82
}
83
/* Returns 0 or error code. */
84
static inline int
85
gsserrmap_replace_or_insert (struct gsserrmap__head *head,
86
OM_uint32 key, char * new_value)
87
{
88
struct gsserrmap__element *e = gsserrmap__find_node(head, key);
89
int ret;
90
91
if (e) {
92
/* replace */
93
void (*free_value)(char *) = free_string;
94
if (free_value)
95
(*free_value)(e->value);
96
e->value = new_value;
97
} else {
98
/* insert */
99
e = malloc(sizeof(*e));
100
if (e == NULL)
101
return ENOMEM;
102
ret = gsserrmap__copy_key (&e->key, key);
103
if (ret) {
104
free(e);
105
return ret;
106
}
107
e->value = new_value;
108
e->next = head->first;
109
head->first = e;
110
}
111
return 0;
112
}
113
114