diff options
author | David Sommerseth <dazo@users.sourceforge.net> | 2008-10-15 00:39:53 +0200 |
---|---|---|
committer | David Sommerseth <dazo@users.sourceforge.net> | 2008-10-15 00:39:53 +0200 |
commit | 0ea1a3e2e6a10300388e01ac89504abe3624ae56 (patch) | |
tree | fff59c70d4db431c2114e89d0819af8921aff463 /common/eurephia_values.c | |
parent | b65b0802ead5e863ca8cb41fff77528735a1466c (diff) | |
download | eurephia-0ea1a3e2e6a10300388e01ac89504abe3624ae56.tar.gz eurephia-0ea1a3e2e6a10300388e01ac89504abe3624ae56.tar.xz eurephia-0ea1a3e2e6a10300388e01ac89504abe3624ae56.zip |
Reorganised the source code
Moved all OpenVPN plug-in related things into ./plugins, including firewall
Moved all shared code into ./common and moved the generic part of the
database files into ./database
Updated all CMakeLists.txt files and created a new one for the root directory
Diffstat (limited to 'common/eurephia_values.c')
-rw-r--r-- | common/eurephia_values.c | 120 |
1 files changed, 120 insertions, 0 deletions
diff --git a/common/eurephia_values.c b/common/eurephia_values.c new file mode 100644 index 0000000..d5473f9 --- /dev/null +++ b/common/eurephia_values.c @@ -0,0 +1,120 @@ +/* eurephia_values.c -- Generic interface for processing key->value pairs + * + * GPLv2 - Copyright (C) 2008 David Sommerseth <dazo@users.sourceforge.net> + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; version 2 + * of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +#include <eurephia_nullsafe.h> +#include <eurephia_struct.h> +#include <eurephia_log.h> + + +eurephiaVALUES *eGet_valuestruct(eurephiaVALUES *vls, const char *key) +{ + eurephiaVALUES *ptr = NULL; + + if( vls == NULL ) { + return NULL; + } + + ptr = vls; + while( ptr != NULL ) { + if( (key != NULL) && (ptr->key != NULL) && (strcmp(key, ptr->key) == 0) ) { + return ptr; + } + ptr = ptr->next; + } + return NULL; +} + + +char *eGet_value(eurephiaVALUES *vls, const char *key) +{ + eurephiaVALUES *ptr = NULL; + + ptr = eGet_valuestruct(vls, key); + return (ptr != NULL ? ptr->val : NULL); +} + + +eurephiaVALUES *eCreate_value_space(eurephiaCTX *ctx, int evgid) +{ + eurephiaVALUES *ptr = NULL; + + DEBUG(ctx, 32, "Function call: eCreate_value_space(ctx, %i)", evgid); + + ptr = (eurephiaVALUES *) malloc(sizeof(eurephiaVALUES) + 2); + if( ptr == NULL ) { + eurephia_log(ctx, LOG_PANIC, 0, "Could not allocate memory for a new eurephiaVALUE struct"); + return NULL; + } + memset(ptr, 0, sizeof(eurephiaVALUES) + 2); + ptr->evgid = evgid; + return ptr; +} + + +void eAdd_value(eurephiaCTX *ctx, eurephiaVALUES *vls, const char *key, const char *val) +{ + eurephiaVALUES *ptr = NULL, *ptr2 = NULL; + int vid = 0; + + DEBUG(ctx, 31, "Function call: eAdd_value(ctx, vls(%i), '%s', '%s')", + (vls != NULL ? vls->evid : -1), key, val); + + // Allocate buffer and safe values + ptr = eCreate_value_space(ctx, vls->evid); + if( ptr == NULL ) { + eurephia_log(ctx, LOG_FATAL, 0, "Could not add the new value"); + return; + } + ptr->key = strdup_nullsafe(key); + ptr->val = strdup_nullsafe(val); + ptr->evgid = vls->evgid; + + // Add values to the value chain, loop to the end and append it + ptr2 = vls; + while( ptr2->next != NULL ) { + vid = ptr2->evid; + ptr2 = ptr2->next; + } + ptr->evid = vid+1; // Increase the value counter + ptr2->next = ptr; +} + + +void do_free_vals(eurephiaVALUES *vls) { + if( vls->next != NULL ) { + do_free_vals(vls->next); + } + free_nullsafe(vls->key); + free_nullsafe(vls->val); + free_nullsafe(vls); +} + +void eFree_values_func(eurephiaCTX *ctx, eurephiaVALUES *vls) { + DEBUG(ctx, 31, "Function call: eFree_values(ctx, vls(%i))", + (vls != NULL ? vls->evid : -1)); + + if( (vls == NULL) ) { + return; + } + do_free_vals(vls); +} |