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