/*************************************************************************
* (C) 2008 AITNET ltd - Sofia/Bulgaria - <misho@aitbg.com>
* by Michael Pounov <misho@openbsd-bg.org>
*
* $Author: misho $
* $Id: aitcfg.h,v 1.1.1.1.2.1 2008/09/30 20:00:26 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);
/*
* 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_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>