/* Copyright (C) 2014-2020, Dirk Krause SPDX-License-Identifier: BSD-3-Clause */ /* WARNING: This file was generated by the dkct program (see http://dktools.sourceforge.net/ for details). Changes you make here will be lost if dkct is run again! You should modify the original source and run dkct on it. Original source: dk3kv.ctr */ /** @file dk3kv.c The dk3kv module. */ #line 43 "dk3kv.ctr" #include "dk3all.h" #include "dk3kv.h" int dk3kv_compare(void const *l, void const *r, int cr) { int back = 0; dk3_key_value_t const *pl; dk3_key_value_t const *pr; if(l) { if(r) { pl = (dk3_key_value_t const *)l; switch(cr) { case 1: { back = dk3str_cmp(pl->key, (dkChar const *)r); } break; default: { pr = (dk3_key_value_t const *)r; back = dk3str_cmp(pl->key, pr->key); } break; } } else back = 1; } else { if(r) back = -1; } return back; } void dk3kv_delete(dk3_key_value_t *p) { if(p) { dk3_release(p->key); dk3_release(p->val); dk3_delete(p); } } dk3_key_value_t * dk3kv_new_app(dkChar const *k, dkChar const *v, dk3_app_t *app) { dk3_key_value_t *back = NULL; if(k) { back = dk3_new_app(dk3_key_value_t,1,app); if(back) { back->key = NULL; back->val = NULL; back->key = dk3str_dup_app(k, app); if(back->key) { if(v) { back->val = dk3str_dup_app(v, app); if(!(back->val)) { dk3kv_delete(back); back = NULL; } } } else { dk3kv_delete(back); back = NULL; } } } return back; }