File:  [ELWIX - Embedded LightWeight unIX -] / libaitcfg / inc / aitcfg.h
Revision 1.2.2.4: download - view: text, annotated - select for diffs - revision graph
Mon Oct 19 14:58:24 2009 UTC (14 years, 6 months ago) by misho
Branches: cfg3_1
Diff to: branchpoint 1.2: preferred, colored
add new feature !!!! MergeConfig
fix ConcatConfig
and add anti-loop in merge/concat features

/*************************************************************************
* (C) 2008 AITNET ltd - Sofia/Bulgaria - <misho@aitbg.com>
*  by Michael Pounov <misho@openbsd-bg.org>
*
* $Author: misho $
* $Id: aitcfg.h,v 1.2.2.4 2009/10/19 14:58:24 misho Exp $
*
*************************************************************************/
#ifndef __AITCFG_H
#define __AITCFG_H


struct tagPair {
	unsigned int	uLine;
	unsigned char	*psSection;
	unsigned char	*psAttribute;
	unsigned char	*psValue;
	struct tagPair *sle_next;
};

struct tagHead {
	struct tagPair *slh_first;
};
typedef struct tagHead sl_config;


/*
 * InitConfig() Head initializing function for config
 * @cfg = New head element for init
 * return: 0 ok; -1 error:: new head element is null
*/
inline int InitConfig(sl_config * __restrict cfg);
/*
 * cfg_CreateConfig() Create config file from memory without whitespaces!
 * @csConfigName = New config filename
 * @cfg = Head list element
 * return: 0 ok; -1 error:: can`t save new config
*/
int cfg_CreateConfig(const char *csConfigName, sl_config * __restrict cfg);
/*
 * CreateConfig() Create config file from memory
 * @csConfigName = New config filename
 * @cfg = Head list element
 * return: 0 ok; -1 error:: can`t save new config
*/
int CreateConfig(const char *csConfigName, sl_config * __restrict cfg);
/*
 * LoadConfig() Load config from file
 * @csConfigName = Filename of config
 * @cfg = Head list element
 * return: 0 ok; -1 error:: can`t load config
*/
int LoadConfig(const char *csConfigName, sl_config * __restrict cfg);
/*
 * UnloadConfig() Unload config from memory and free resources
 * @cfg = Head list element
*/
void UnloadConfig(sl_config * __restrict cfg);


// cfg_GetErrno() Get error code of last operation
inline int cfg_GetErrno();
// cfg_GetError() Get error text of last operation
inline const char *cfg_GetError();


/*
 * ReadConfig() Read from file and add new item to config list
 * @f = file resource
 * @cfg = Head list element
 * return: 0 ok; -1 error:: can`t allocate memory
*/
int ReadConfig(FILE *f, sl_config * __restrict cfg);
/*
 * WriteConfig() Write to file from items in config list
 * @f = file resource
 * @cfg = Head list element
 * return: 0 ok; -1 error:: can`t write to file
*/
int WriteConfig(FILE *f, sl_config * __restrict cfg);

/*
 * cfg_WriteConfig() Write to file from items in config list without whitespaces!
 * @f = file resource
 * @cfg = Head list element
 * return: 0 ok; -1 error:: can`t write to file
*/
int cfg_WriteConfig(FILE *f, sl_config * __restrict cfg);

/*
 * ConcatConfig() Concat two list in one
 * @cfg = Head list element of main list
 * @add_cfg = Head list element of added list
 * return: 0 ok; -1 error:: can`t concat lists
*/
int ConcatConfig(sl_config * __restrict cfg, sl_config * __restrict add_cfg);

/*
 * MergeConfig() Marge two list in one cfg and destroy add_cfg
 * @cfg = Head list element of main list
 * @add_cfg = Head list element of merged list (destroy after all!)
 * return: 0 ok; -1 error:: can`t merge lists
*/
int MergeConfig(sl_config * __restrict cfg, sl_config * __restrict add_cfg);


/*
 * cfg_FindAttribute() Find attribute position in config list
 * @cfg = Head list element
 * @csSec = Config section //[{csSec}]
 * @csAttr = Config attribute //{csAttr} = ...
 * return: 0 not found item; -1 error: null parameters; >0 position in list
*/
inline int cfg_FindAttribute(sl_config * __restrict cfg, const u_char *csSec, const u_char *csAttr);
/*
 * cfg_SetAttribute() Set item in config list or add new item if not exists
 * @cfg = Head list element
 * @csSec = Config section //[{csSec}], if NULL set in *default* section
 * @csAttr = Config attribute //{csAttr} = ..., if NULL set as *any* attribute
 * @csVal = Config value //... = {csVal} to setup
 * return: 0 nothing changed, -1 error: not enough memory; 1 find and update item; 2 added new item
*/
int cfg_SetAttribute(sl_config * __restrict cfg, const u_char *csSec, const u_char *csAttr, const u_char *csVal);
/*
 * cfg_UnsetAttribute() Unset item from config list and free resources
 * @cfg = Head list element
 * @csSec = Config section //[{csSec}], if NULL unset in *default* section
 * @csAttr = Config attribute //{csAttr} = ..., if NULL unset as *any* attribute
 * return: 0 item not found, -1 error: null parameters; >0 position in list
*/
int cfg_UnsetAttribute(sl_config * __restrict cfg, const u_char *csSec, const u_char *csAttr);
/*
 * cfg_GetAttribute() Get item from config list and return his value
 * @cfg = Head list element
 * @csSec = Config section //[{csSec}], if NULL unset in *default* section
 * @csAttr = Config attribute //{csAttr} = ..., if NULL unset as *any* attribute
 * return: NULL item not found or null parameters; !=NULL value const string
*/
inline const u_char *cfg_GetAttribute(sl_config * __restrict cfg, const u_char *csSec, const u_char *csAttr);

/*
 * cfg_LoadAttribute() Extended get attribute, if not found item return *default value*
 * @cfg = Head list element
 * @csSec = Config section //[{csSec}], if NULL unset in *default* section
 * @csAttr = Config attribute //{csAttr} = ..., if NULL unset as *any* attribute
 * @psVal = Return buffer for item Value //... = {psVal}
 * @ValLen = Length of buffer //{psVal} for return
 * @csDefValue = *Default Value* for return in //{psVal}, if not found item in config list
 * return: 0 item not found, -1 error: null parameters; >0 number of copied bytes in //{psVal}
*/
int cfg_LoadAttribute(sl_config * __restrict cfg, const u_char *csSec, const u_char *csAttr, 
		u_char * __restrict psVal, int ValLen, const char *csDefValue);


#endif

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>