1 /*
2 Copyright (C) 2014-2021, Dirk Krause
3 SPDX-License-Identifier: BSD-3-Clause
4 */
5
6 /*
7 WARNING: This file was generated by the dkct program (see
8 http://dktools.sourceforge.net/ for details).
9 Changes you make here will be lost if dkct is run again!
10 You should modify the original source and run dkct on it.
11 Original source: dk3kv.ctr
12 */
13
14 /** @file dk3kv.c The dk3kv module.
15 */
16
17
18
19 #include <libdk3c/dk3all.h>
20 #include <libdk3c/dk3kv.h>
21
22
23 int
dk3kv_compare(void const * l,void const * r,int cr)24 dk3kv_compare(void const *l, void const *r, int cr)
25 {
26 int back = 0;
27 dk3_key_value_t const *pl;
28 dk3_key_value_t const *pr;
29 if(l) {
30 if(r) {
31 pl = (dk3_key_value_t const *)l;
32 switch(cr) {
33 case 1: {
34 back = dk3str_cmp(pl->key, (dkChar const *)r);
35 } break;
36 default: {
37 pr = (dk3_key_value_t const *)r;
38 back = dk3str_cmp(pl->key, pr->key);
39 } break;
40 }
41 } else back = 1;
42 } else {
43 if(r) back = -1;
44 }
45 return back;
46 }
47
48
49
50 void
dk3kv_delete(dk3_key_value_t * p)51 dk3kv_delete(dk3_key_value_t *p)
52 {
53 if(p) {
54 dk3_release(p->key);
55 dk3_release(p->val);
56 dk3_delete(p);
57 }
58 }
59
60
61
62 dk3_key_value_t *
dk3kv_new_app(dkChar const * k,dkChar const * v,dk3_app_t * app)63 dk3kv_new_app(dkChar const *k, dkChar const *v, dk3_app_t *app)
64 {
65 dk3_key_value_t *back = NULL;
66 if(k) {
67 back = dk3_new_app(dk3_key_value_t,1,app);
68 if(back) {
69 back->key = NULL;
70 back->val = NULL;
71 back->key = dk3str_dup_app(k, app);
72 if(back->key) {
73 if(v) {
74 back->val = dk3str_dup_app(v, app);
75 if(!(back->val)) {
76 dk3kv_delete(back);
77 back = NULL;
78 }
79 }
80 } else {
81 dk3kv_delete(back);
82 back = NULL;
83 }
84 }
85 }
86 return back;
87 }
88
89
90
91