Annotation of libaitcfg/inc/aitcfg.h, revision 1.5
1.2 misho 1: /*************************************************************************
2: * (C) 2008 AITNET ltd - Sofia/Bulgaria - <misho@aitbg.com>
3: * by Michael Pounov <misho@openbsd-bg.org>
4: *
5: * $Author: misho $
1.4 misho 6: * $Id: aitcfg.h,v 1.3.2.2 2009/11/11 13:52:29 misho Exp $
1.2 misho 7: *
8: *************************************************************************/
1.1 misho 9: #ifndef __AITCFG_H
10: #define __AITCFG_H
11:
12:
13: struct tagPair {
14: unsigned int uLine;
15: unsigned char *psSection;
16: unsigned char *psAttribute;
17: unsigned char *psValue;
18: struct tagPair *sle_next;
19: };
20:
21: struct tagHead {
22: struct tagPair *slh_first;
23: };
24: typedef struct tagHead sl_config;
25:
26:
27: /*
1.4 misho 28: * Macros for config library. Typecast string to specific config string format.
29: */
30: #define CFG(x) (unsigned char *)(x)
31:
32: #define CFG_ISSET(x) ((long) cfg_FirstItem((x)))
33:
34:
35: /*
1.1 misho 36: * InitConfig() Head initializing function for config
37: * @cfg = New head element for init
38: * return: 0 ok; -1 error:: new head element is null
39: */
40: inline int InitConfig(sl_config * __restrict cfg);
41: /*
1.3 misho 42: * cfg_CreateConfig() Create config file from memory without whitespaces!
43: * @csConfigName = New config filename
44: * @cfg = Head list element
45: * return: 0 ok; -1 error:: can`t save new config
46: */
47: int cfg_CreateConfig(const char *csConfigName, sl_config * __restrict cfg);
48: /*
1.1 misho 49: * CreateConfig() Create config file from memory
50: * @csConfigName = New config filename
51: * @cfg = Head list element
52: * return: 0 ok; -1 error:: can`t save new config
53: */
54: int CreateConfig(const char *csConfigName, sl_config * __restrict cfg);
55: /*
56: * LoadConfig() Load config from file
57: * @csConfigName = Filename of config
58: * @cfg = Head list element
59: * return: 0 ok; -1 error:: can`t load config
60: */
61: int LoadConfig(const char *csConfigName, sl_config * __restrict cfg);
62: /*
63: * UnloadConfig() Unload config from memory and free resources
64: * @cfg = Head list element
65: */
66: void UnloadConfig(sl_config * __restrict cfg);
67:
68:
69: // cfg_GetErrno() Get error code of last operation
70: inline int cfg_GetErrno();
71: // cfg_GetError() Get error text of last operation
72: inline const char *cfg_GetError();
73:
74:
75: /*
76: * ReadConfig() Read from file and add new item to config list
77: * @f = file resource
78: * @cfg = Head list element
79: * return: 0 ok; -1 error:: can`t allocate memory
80: */
81: int ReadConfig(FILE *f, sl_config * __restrict cfg);
82: /*
83: * WriteConfig() Write to file from items in config list
84: * @f = file resource
85: * @cfg = Head list element
86: * return: 0 ok; -1 error:: can`t write to file
87: */
88: int WriteConfig(FILE *f, sl_config * __restrict cfg);
89:
1.3 misho 90: /*
91: * cfg_WriteConfig() Write to file from items in config list without whitespaces!
92: * @f = file resource
93: * @cfg = Head list element
94: * return: 0 ok; -1 error:: can`t write to file
95: */
96: int cfg_WriteConfig(FILE *f, sl_config * __restrict cfg);
97:
98: /*
99: * ConcatConfig() Concat two list in one
100: * @cfg = Head list element of main list
101: * @add_cfg = Head list element of added list
102: * return: 0 ok; -1 error:: can`t concat lists
103: */
104: int ConcatConfig(sl_config * __restrict cfg, sl_config * __restrict add_cfg);
105:
106: /*
107: * MergeConfig() Marge two list in one cfg and destroy add_cfg
108: * @cfg = Head list element of main list
109: * @add_cfg = Head list element of merged list (destroy after all!)
110: * return: 0 ok; -1 error:: can`t merge lists
111: */
112: int MergeConfig(sl_config * __restrict cfg, sl_config * __restrict add_cfg);
113:
1.1 misho 114:
115: /*
116: * cfg_FindAttribute() Find attribute position in config list
117: * @cfg = Head list element
118: * @csSec = Config section //[{csSec}]
119: * @csAttr = Config attribute //{csAttr} = ...
120: * return: 0 not found item; -1 error: null parameters; >0 position in list
121: */
122: inline int cfg_FindAttribute(sl_config * __restrict cfg, const u_char *csSec, const u_char *csAttr);
123: /*
124: * cfg_SetAttribute() Set item in config list or add new item if not exists
125: * @cfg = Head list element
126: * @csSec = Config section //[{csSec}], if NULL set in *default* section
127: * @csAttr = Config attribute //{csAttr} = ..., if NULL set as *any* attribute
128: * @csVal = Config value //... = {csVal} to setup
129: * return: 0 nothing changed, -1 error: not enough memory; 1 find and update item; 2 added new item
130: */
131: int cfg_SetAttribute(sl_config * __restrict cfg, const u_char *csSec, const u_char *csAttr, const u_char *csVal);
132: /*
133: * cfg_UnsetAttribute() Unset item from config list and free resources
134: * @cfg = Head list element
135: * @csSec = Config section //[{csSec}], if NULL unset in *default* section
136: * @csAttr = Config attribute //{csAttr} = ..., if NULL unset as *any* attribute
137: * return: 0 item not found, -1 error: null parameters; >0 position in list
138: */
139: int cfg_UnsetAttribute(sl_config * __restrict cfg, const u_char *csSec, const u_char *csAttr);
140: /*
141: * cfg_GetAttribute() Get item from config list and return his value
142: * @cfg = Head list element
143: * @csSec = Config section //[{csSec}], if NULL unset in *default* section
144: * @csAttr = Config attribute //{csAttr} = ..., if NULL unset as *any* attribute
145: * return: NULL item not found or null parameters; !=NULL value const string
146: */
147: inline const u_char *cfg_GetAttribute(sl_config * __restrict cfg, const u_char *csSec, const u_char *csAttr);
148:
149: /*
1.4 misho 150: * cfg_FirstItem() Get first item from config list and return his value
151: * @cfg = Head list element
152: * return: NULL if no items in list; !=NULL first pair item
153: */
154: inline struct tagPair *cfg_FirstItem(sl_config * __restrict cfg);
155:
156: /*
1.1 misho 157: * cfg_LoadAttribute() Extended get attribute, if not found item return *default value*
158: * @cfg = Head list element
159: * @csSec = Config section //[{csSec}], if NULL unset in *default* section
160: * @csAttr = Config attribute //{csAttr} = ..., if NULL unset as *any* attribute
161: * @psVal = Return buffer for item Value //... = {psVal}
162: * @ValLen = Length of buffer //{psVal} for return
163: * @csDefValue = *Default Value* for return in //{psVal}, if not found item in config list
164: * return: 0 item not found, -1 error: null parameters; >0 number of copied bytes in //{psVal}
165: */
166: int cfg_LoadAttribute(sl_config * __restrict cfg, const u_char *csSec, const u_char *csAttr,
167: u_char * __restrict psVal, int ValLen, const char *csDefValue);
168:
169:
170: #endif
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>