/* Copyright (C) 2015-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: dk4pref.ctr */ /** @file dk4pref.c The dk4pref module. */ #line 117 "dk4pref.ctr" #include "dk4conf.h" #include "dk4pref.h" #include "dk4mem.h" #if DK4_HAVE_ASSERT_H #ifndef ASSERT_H_INCLUDED #include #define ASSERT_H_INCLUDED 1 #endif #endif #line 132 "dk4pref.ctr" dk4_pref_t * dk4pref_open(dkChar const *name, dkChar const *value, dk4_er_t *erp) { dk4_pref_t *back = NULL; #line 140 "dk4pref.ctr" #if DK4_USE_ASSERT assert(NULL != name); assert(NULL != value); #endif if ((NULL != name) && (NULL != value)) { back = dk4mem_new(dk4_pref_t,1,erp); if (NULL != back) { back->name = NULL; back->value = NULL; back->name = dk4str_dup(name, erp); back->value = dk4str_dup(value, erp); if ((NULL == back->name) || (NULL == back->value)) { dk4pref_close(back); back = NULL; } } } else { dk4error_set_simple_error_code(erp, DK4_E_INVALID_ARGUMENTS); } #line 159 "dk4pref.ctr" return back; } void dk4pref_close(dk4_pref_t *ptr) { #line 168 "dk4pref.ctr" #if DK4_USE_ASSERT assert(NULL != ptr); #endif if (NULL != ptr) { #line 173 "dk4pref.ctr" #if 0 /* Original stuff. */ dk4mem_release(ptr->name); dk4mem_release(ptr->value); #endif /* 2016-12-10 Sanitize memory before releasing it. */ dk4str_release_sanitized(ptr->name); dk4str_release_sanitized(ptr->value); dk4mem_free(ptr); } #line 186 "dk4pref.ctr" } int dk4pref_compare(const void *l, const void *r, int cr) { const dk4_pref_t *pl; const dk4_pref_t *pr; int back = 0; #line 197 "dk4pref.ctr" if (NULL != l) { if (NULL != r) { pl = (const dk4_pref_t *)l; switch (cr) { case 1: { if (NULL != pl->name) { back = dk4str_cmp(pl->name, (const dkChar *)r); } else { back = -1; } } break; default: { pr = (const dk4_pref_t *)r; if (NULL != pl->name) { if (NULL != pr->name) { back = dk4str_cmp(pl->name, pr->name); } else { back = 1; } } else { if (NULL != pr->name) { back = -1; } } } break; } } else { back = 1; } } else { if (NULL != r) { back = -1; } } #line 231 "dk4pref.ctr" return back; }