www.pudn.com > hipl.1.0.1.rar > str_var.c
/*
HIP Agent
License: GNU/GPL
Authors: Antti Partanen
*/
/******************************************************************************/
/* INCLUDES */
#include "str_var.h"
/******************************************************************************/
/* VARIABLES */
/** String data container. */
StringData *str_data = NULL;
/** Last string data. */
StringData *str_data_last = NULL;
/** Number of strings. */
int str_count = 0;
/******************************************************************************/
/* FUNCTIONS */
/******************************************************************************/
/** Initialize data strings. */
int str_var_init(void)
{
/* Variables. */
int err = 0;
str_data = NULL;
str_data_last = NULL;
str_count = 0;
return err;
}
/* END OF FUNCTION */
/******************************************************************************/
/** Deinitalize data strings. */
void str_var_quit(void)
{
/* Variables. */
StringData *st = str_data;
while (st)
{
st = (StringData *)str_data->next;
free(str_data);
str_data = st;
}
str_data = NULL;
str_data_last = NULL;
str_count = 0;
}
/* END OF FUNCTION */
/******************************************************************************/
/** Set or add data string, depending whether string is already defined. */
StringData *str_var_set(const char *name, const char *string, ...)
{
/* Variables. */
StringData *err = NULL, *st;
va_list args;
st = str_var_find(name);
if (!st)
{
st = (StringData *)malloc(sizeof(StringData));
HIP_IFEL(!st, NULL, "malloc()");
memset(st, 0, sizeof(StringData));
STRCPY(st->name, name);
if (str_data_last)
{
str_data_last->next = (void *)st;
str_data_last = st;
}
else
{
str_data = st;
str_data_last = st;
}
str_count++;
}
va_start(args, string);
VSPRINTHUGESTR(st->data, string, args);
va_end(args);
out_err:
return err;
}
/* END OF FUNCTION */
/******************************************************************************/
/**
Get data string.
@param name Name of data string to get.
@return Pointer to data string, or pointer to "" (empty string), if
no such data exists.
*/
char *str_var_get(const char *name)
{
/* Variables. */
StringData *st;
st = str_var_find(name);
if (st) return st->data;
return "";
}
/* END OF FUNCTION */
/******************************************************************************/
/**
Find data string.
@param name Name of data string to get.
@return Pointer to data string struct, or NULL.
*/
StringData *str_var_find(const char *name)
{
/* Variables. */
StringData *st = str_data;
int i;
while (st)
{
if (strcmp(name, st->name) == 0) break;
st = (StringData *)st->next;
}
return st;
}
/* END OF FUNCTION */
/******************************************************************************/
/**
Compare string variables value, and return 1 or 0.
@param name Name of data string to get.
@param value Value to be compared against.
@return 1 if value is same, 0 if not.
*/
int str_var_is(const char *name, const char *value)
{
/* Variables. */
StringData *st;
st = str_var_find(name);
if (st)
{
if (strcmp(st->data, value) == 0) return (1);
}
return (0);
}
/* END OF FUNCTION */
/******************************************************************************/
/**
Check whether string var has some content or is just empty string.
@param name Name of data string to get.
@return 0 if variable is non-empty string, 1 if it is empty.
*/
int str_var_empty(const char *name)
{
/* Variables. */
StringData *st;
st = str_var_find(name);
if (st)
{
if (strlen(st->data) < 1) return (1);
}
return (0);
}
/* END OF FUNCTION */
/* END OF SOURCE FILE */
/******************************************************************************/