gwenhywfar  4.99.15beta
db.h
Go to the documentation of this file.
1 /***************************************************************************
2  begin : Tue Sep 09 2003
3  copyright : (C) 2003-2010 by Martin Preuss
4  email : martin@libchipcard.de
5 
6  ***************************************************************************
7  * *
8  * This library is free software; you can redistribute it and/or *
9  * modify it under the terms of the GNU Lesser General Public *
10  * License as published by the Free Software Foundation; either *
11  * version 2.1 of the License, or (at your option) any later version. *
12  * *
13  * This library is distributed in the hope that it will be useful, *
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of *
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
16  * Lesser General Public License for more details. *
17  * *
18  * You should have received a copy of the GNU Lesser General Public *
19  * License along with this library; if not, write to the Free Software *
20  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, *
21  * MA 02111-1307 USA *
22  * *
23  ***************************************************************************/
24 
25 
28 #ifndef GWENHYWFAR_DB_H
29 #define GWENHYWFAR_DB_H
30 
31 #include <gwenhywfar/gwenhywfarapi.h>
32 #include <gwenhywfar/path.h>
33 #include <gwenhywfar/fastbuffer.h>
34 #include <gwenhywfar/types.h>
35 #include <stdio.h>
36 
37 #ifdef __cplusplus
38 extern "C" {
39 #endif
40 
41 
102 #define GWEN_DB_LINE_MAXSIZE 1024
103 
119 #define GWEN_DB_FLAGS_ALLOW_EMPTY_STREAM 0x00008000
120 
121 #define GWEN_DB_FLAGS_OVERWRITE_VARS 0x00010000
122 
123 #define GWEN_DB_FLAGS_OVERWRITE_GROUPS 0x00020000
124 
125 #define GWEN_DB_FLAGS_QUOTE_VARNAMES 0x00040000
126 
127 #define GWEN_DB_FLAGS_QUOTE_VALUES 0x00080000
128 
129 #define GWEN_DB_FLAGS_WRITE_SUBGROUPS 0x00100000
130 
131 #define GWEN_DB_FLAGS_DETAILED_GROUPS 0x00200000
132 
134 #define GWEN_DB_FLAGS_INDEND 0x00400000
135 
137 #define GWEN_DB_FLAGS_ADD_GROUP_NEWLINES 0x00800000
138 
140 #define GWEN_DB_FLAGS_USE_COLON 0x01000000
141 
142 #define GWEN_DB_FLAGS_UNTIL_EMPTY_LINE 0x02000000
143 
145 #define GWEN_DB_FLAGS_OMIT_TYPES 0x04000000
146 
147 #define GWEN_DB_FLAGS_APPEND_FILE 0x08000000
148 
149 #define GWEN_DB_FLAGS_ESCAPE_CHARVALUES 0x10000000
150 
152 #define GWEN_DB_FLAGS_UNESCAPE_CHARVALUES 0x10000000
153 
155 #define GWEN_DB_FLAGS_LOCKFILE 0x20000000
156 
160 #define GWEN_DB_FLAGS_INSERT 0x40000000
161 
165 #define GWEN_DB_FLAGS_DOSMODE 0x80000000
166 
168 #define GWEN_DB_FLAGS_DEFAULT \
169  (\
170  GWEN_DB_FLAGS_QUOTE_VALUES | \
171  GWEN_DB_FLAGS_WRITE_SUBGROUPS | \
172  GWEN_DB_FLAGS_DETAILED_GROUPS | \
173  GWEN_DB_FLAGS_INDEND | \
174  GWEN_DB_FLAGS_ADD_GROUP_NEWLINES | \
175  GWEN_DB_FLAGS_ESCAPE_CHARVALUES | \
176  GWEN_DB_FLAGS_UNESCAPE_CHARVALUES\
177  )
178 
179 
182 #define GWEN_DB_FLAGS_COMPACT \
183  (\
184  GWEN_DB_FLAGS_QUOTE_VALUES | \
185  GWEN_DB_FLAGS_WRITE_SUBGROUPS | \
186  GWEN_DB_FLAGS_ESCAPE_CHARVALUES | \
187  GWEN_DB_FLAGS_UNESCAPE_CHARVALUES\
188  )
189 
193 #define GWEN_DB_FLAGS_HTTP \
194  (\
195  GWEN_DB_FLAGS_USE_COLON |\
196  GWEN_DB_FLAGS_UNTIL_EMPTY_LINE |\
197  GWEN_DB_FLAGS_OMIT_TYPES | \
198  GWEN_DB_FLAGS_DOSMODE \
199  )
200 
207 #define GWEN_DB_NODE_FLAGS_DIRTY 0x00000001
208 
209 #define GWEN_DB_NODE_FLAGS_VOLATILE 0x00000002
210 
212 #define GWEN_DB_NODE_FLAGS_INHERIT_HASH_MECHANISM 0x00000004
213 
214 #define GWEN_DB_NODE_FLAGS_SAFE 0x00000008
215 
218 #define GWEN_DB_DEFAULT_LOCK_TIMEOUT 1000
219 
220 
228 typedef struct GWEN_DB_NODE GWEN_DB_NODE;
229 
233 typedef enum {
251 
252 
253 
258 
266 GWEN_DB_NODE *GWEN_DB_Group_new(const char *name);
267 
275 
276 
285 
305 
330 
331 
344 GWEN_DB_NODE *GWEN_DB_FindFirstGroup(GWEN_DB_NODE *n, const char *name);
345 
365 GWEN_DB_NODE *GWEN_DB_FindNextGroup(GWEN_DB_NODE *n, const char *name);
366 
367 
378 typedef void *(*GWEN_DB_NODES_CB)(GWEN_DB_NODE *node, void *user_data);
379 
398  void *user_data);
399 
404 unsigned int GWEN_DB_Groups_Count(const GWEN_DB_NODE *node);
405 
411 
470 const char *GWEN_DB_GetCharValue(GWEN_DB_NODE *n,
471  const char *path,
472  int idx,
473  const char *defVal);
484  uint32_t flags,
485  const char *path,
486  const char *val);
487 
488 
489 
499  uint32_t flags,
500  const char *path,
501  int val);
502 
503 
516  const char *path,
517  const char *val,
518  int senseCase,
519  int check);
520 
521 
533  const char *path,
534  const char *val,
535  int senseCase);
536 
537 
547  const char *path,
548  int idx,
549  int defVal);
550 
561  uint32_t flags,
562  const char *path,
563  int val);
564 
565 
578 const void *GWEN_DB_GetBinValue(GWEN_DB_NODE *n,
579  const char *path,
580  int idx,
581  const void *defVal,
582  unsigned int defValSize,
583  unsigned int *returnValueSize);
584 
597  uint32_t flags,
598  const char *path,
599  const void *val,
600  unsigned int valSize);
601 
602 
612  const char *path,
613  int idx,
614  void *defVal);
615 
627  uint32_t flags,
628  const char *path,
629  void *val);
638 
650  uint32_t flags,
651  const char *path);
652 
657 const char *GWEN_DB_GroupName(GWEN_DB_NODE *n);
658 
665 void GWEN_DB_GroupRename(GWEN_DB_NODE *n, const char *newname);
666 
682 int GWEN_DB_AddGroup(GWEN_DB_NODE *parent, GWEN_DB_NODE *node);
683 
700 int GWEN_DB_InsertGroup(GWEN_DB_NODE *parent, GWEN_DB_NODE *node);
701 
713 
725 
734  const char *path);
744  const char *path);
745 
753 int GWEN_DB_IsGroup(const GWEN_DB_NODE *n);
754 
767 uint32_t GWEN_DB_GetNodeFlags(const GWEN_DB_NODE *n);
768 
776  uint32_t flags);
777 
788  uint32_t newflags,
789  uint32_t mask);
790 
801  uint32_t newflags,
802  uint32_t mask);
803 
817 
820  GWEN_FAST_BUFFER *fb,
821  uint32_t dbflags);
822 
824 int GWEN_DB_ReadFromIo(GWEN_DB_NODE *n, GWEN_SYNCIO *sio, uint32_t dbflags);
825 
828  const char *fname,
829  uint32_t dbflags);
830 
833  const char *str,
834  int len,
835  uint32_t dbflags);
836 
839  GWEN_FAST_BUFFER *fb,
840  uint32_t dbflags);
841 
844  GWEN_SYNCIO *sio,
845  uint32_t dbflags);
846 
847 
850  const char *fname,
851  uint32_t dbflags);
852 
855  GWEN_BUFFER *buf,
856  uint32_t dbflags);
857 
870  const char *fname,
871  const char *type,
872  GWEN_DB_NODE *params,
873  uint32_t dbflags);
874 
887  const char *fname,
888  const char *type,
889  GWEN_DB_NODE *params,
890  uint32_t dbflags);
891 
892 
907 
908 
932 
938 const char *GWEN_DB_VariableName(GWEN_DB_NODE *n);
939 
940 
942 void GWEN_DB_VariableRename(GWEN_DB_NODE *n, const char *newname);
943 
962  void *user_data);
963 
969 unsigned int GWEN_DB_Variables_Count(const GWEN_DB_NODE *node);
970 
978  const char *p);
979 
988  const char *path);
989 
998  const char *path);
999 
1009  const char *path,
1010  unsigned int idx);
1011 
1019 int GWEN_DB_IsVariable(const GWEN_DB_NODE *n);
1020 
1021 
1034 GWEN_DB_NODE *GWEN_DB_FindFirstVar(GWEN_DB_NODE *n, const char *name);
1035 
1055 GWEN_DB_NODE *GWEN_DB_FindNextVar(GWEN_DB_NODE *n, const char *name);
1056 
1071 
1090 
1109  void *user_data);
1110 
1115 unsigned int GWEN_DB_Values_Count(const GWEN_DB_NODE *node);
1116 
1123 
1126  const char *p,
1127  unsigned int i);
1128 
1134 const char *GWEN_DB_GetCharValueFromNode(const GWEN_DB_NODE *n);
1135 
1141 int GWEN_DB_SetCharValueInNode(GWEN_DB_NODE *n, const char *s);
1142 
1145 
1147 const void *GWEN_DB_GetBinValueFromNode(const GWEN_DB_NODE *n,
1148  unsigned int *size);
1149 
1150 
1158 int GWEN_DB_IsValue(const GWEN_DB_NODE *n);
1172 
1179 void GWEN_DB_Dump(GWEN_DB_NODE *n, int insert);
1188 
1189 
1195 int GWEN_DB_ReplaceVars(GWEN_DB_NODE *db, const char *s, GWEN_BUFFER *dbuf);
1201 
1202 
1203 #ifdef __cplusplus
1204 }
1205 #endif
1206 
1207 
1208 #endif
1209 
1210 
1211 
GWENHYWFAR_API int GWEN_DB_ReplaceVars(GWEN_DB_NODE *db, const char *s, GWEN_BUFFER *dbuf)
Definition: db.c:1938
GWENHYWFAR_API int GWEN_DB_WriteToBuffer(GWEN_DB_NODE *n, GWEN_BUFFER *buf, uint32_t dbflags)
Definition: dbrw.c:1061
GWENHYWFAR_API void GWEN_DB_ModifyBranchFlagsUp(GWEN_DB_NODE *n, uint32_t newflags, uint32_t mask)
Definition: db.c:1774
GWENHYWFAR_API void GWEN_DB_Dump(GWEN_DB_NODE *n, int insert)
Definition: db.c:1407
GWENHYWFAR_API void * GWEN_DB_Groups_Foreach(GWEN_DB_NODE *node, GWEN_DB_NODES_CB func, void *user_data)
Definition: db.c:1652
struct GWEN_DB_NODE GWEN_DB_NODE
Definition: db.h:228
GWENHYWFAR_API void GWEN_DB_Group_free(GWEN_DB_NODE *n)
Definition: db.c:408
GWENHYWFAR_API uint32_t GWEN_DB_GetNodeFlags(const GWEN_DB_NODE *n)
Definition: db.c:1757
GWENHYWFAR_API GWEN_DB_NODE * GWEN_DB_GetNextValue(GWEN_DB_NODE *n)
Definition: db.c:528
void *(* GWEN_DB_NODES_CB)(GWEN_DB_NODE *node, void *user_data)
Definition: db.h:378
GWENHYWFAR_API void GWEN_DB_GroupRename(GWEN_DB_NODE *n, const char *newname)
Definition: db.c:1612
GWENHYWFAR_API unsigned int GWEN_DB_Groups_Count(const GWEN_DB_NODE *node)
Definition: db.c:1684
GWENHYWFAR_API int GWEN_DB_ReadFromString(GWEN_DB_NODE *n, const char *str, int len, uint32_t dbflags)
Definition: dbrw.c:1035
GWENHYWFAR_API int GWEN_DB_WriteToFastBuffer(GWEN_DB_NODE *node, GWEN_FAST_BUFFER *fb, uint32_t dbflags)
Definition: dbrw.c:497
GWENHYWFAR_API void GWEN_DB_ModifyBranchFlagsDown(GWEN_DB_NODE *n, uint32_t newflags, uint32_t mask)
Definition: db.c:1792
GWENHYWFAR_API int GWEN_DB_ValueExists(GWEN_DB_NODE *n, const char *path, unsigned int idx)
Definition: db.c:1573
GWENHYWFAR_API int GWEN_DB_SetPtrValue(GWEN_DB_NODE *n, uint32_t flags, const char *path, void *val)
Definition: db.c:1319
int GWEN_DB_SetCharValueFromInt(GWEN_DB_NODE *n, uint32_t flags, const char *path, int val)
Definition: db.c:1023
GWENHYWFAR_API int GWEN_DB_InsertGroup(GWEN_DB_NODE *parent, GWEN_DB_NODE *node)
Definition: db.c:1490
GWENHYWFAR_API int GWEN_DB_AddGroup(GWEN_DB_NODE *parent, GWEN_DB_NODE *node)
Definition: db.c:1469
GWENHYWFAR_API GWEN_DB_NODE * GWEN_DB_GetFirstVar(GWEN_DB_NODE *n)
Definition: db.c:466
GWENHYWFAR_API GWEN_DB_NODE_TYPE GWEN_DB_GetVariableType(GWEN_DB_NODE *n, const char *p)
Definition: db.c:1582
GWENHYWFAR_API int GWEN_DB_IsVariable(const GWEN_DB_NODE *n)
Definition: db.c:1635
GWENHYWFAR_API int GWEN_DB_SetBinValue(GWEN_DB_NODE *n, uint32_t flags, const char *path, const void *val, unsigned int valSize)
Definition: db.c:1256
GWENHYWFAR_API void GWEN_DB_VariableRename(GWEN_DB_NODE *n, const char *newname)
Definition: db.c:1927
struct GWEN_SYNCIO GWEN_SYNCIO
Definition: syncio.h:40
GWENHYWFAR_API int GWEN_DB_ReadFromFastBuffer(GWEN_DB_NODE *n, GWEN_FAST_BUFFER *fb, uint32_t dbflags)
Definition: dbrw.c:777
GWENHYWFAR_API const char * GWEN_DB_GroupName(GWEN_DB_NODE *n)
Definition: db.c:1395
GWENHYWFAR_API int GWEN_DB_WriteToIo(GWEN_DB_NODE *node, GWEN_SYNCIO *sio, uint32_t dbflags)
Definition: dbrw.c:513
GWENHYWFAR_API int GWEN_DB_DeleteGroup(GWEN_DB_NODE *n, const char *path)
Definition: db.c:909
GWENHYWFAR_API int GWEN_DB_WriteFileAs(GWEN_DB_NODE *n, const char *fname, const char *type, GWEN_DB_NODE *params, uint32_t dbflags)
Definition: dbrw.c:159
GWENHYWFAR_API const void * GWEN_DB_GetBinValue(GWEN_DB_NODE *n, const char *path, int idx, const void *defVal, unsigned int defValSize, unsigned int *returnValueSize)
Definition: db.c:1224
GWENHYWFAR_API GWEN_DB_NODE * GWEN_DB_GetNextGroup(GWEN_DB_NODE *n)
Definition: db.c:448
GWENHYWFAR_API void * GWEN_DB_GetPtrValue(GWEN_DB_NODE *n, const char *path, int idx, void *defVal)
Definition: db.c:1293
GWENHYWFAR_API const void * GWEN_DB_GetBinValueFromNode(const GWEN_DB_NODE *n, unsigned int *size)
Definition: db.c:621
GWENHYWFAR_API const char * GWEN_DB_GetCharValue(GWEN_DB_NODE *n, const char *path, int idx, const char *defVal)
Definition: db.c:958
GWENHYWFAR_API GWEN_DB_NODE * GWEN_DB_Group_dup(const GWEN_DB_NODE *n)
Definition: db.c:415
GWENHYWFAR_API const char * GWEN_DB_VariableName(GWEN_DB_NODE *n)
Definition: db.c:1915
GWENHYWFAR_API int GWEN_DB_IsValue(const GWEN_DB_NODE *n)
Definition: db.c:1643
GWENHYWFAR_API int GWEN_DB_VariableExists(GWEN_DB_NODE *n, const char *path)
Definition: db.c:1552
GWENHYWFAR_API GWEN_DB_NODE * GWEN_DB_FindNextVar(GWEN_DB_NODE *n, const char *name)
Definition: db.c:1893
GWENHYWFAR_API GWEN_DB_NODE * GWEN_DB_GetGroup(GWEN_DB_NODE *n, uint32_t flags, const char *path)
Definition: db.c:1368
GWENHYWFAR_API int GWEN_DB_DeleteVar(GWEN_DB_NODE *n, const char *path)
Definition: db.c:886
struct GWEN_BUFFER GWEN_BUFFER
A dynamically resizeable text buffer.
Definition: buffer.h:41
#define GWENHYWFAR_API
Definition: gwenhywfarapi.h:67
GWENHYWFAR_API int GWEN_DB_ReadFileAs(GWEN_DB_NODE *n, const char *fname, const char *type, GWEN_DB_NODE *params, uint32_t dbflags)
Definition: dbrw.c:122
GWENHYWFAR_API GWEN_DB_NODE * GWEN_DB_FindFirstVar(GWEN_DB_NODE *n, const char *name)
Definition: db.c:1870
GWENHYWFAR_API int GWEN_DB_ReadFromIo(GWEN_DB_NODE *n, GWEN_SYNCIO *sio, uint32_t dbflags)
Definition: dbrw.c:978
GWENHYWFAR_API int GWEN_DB_SetCharValue(GWEN_DB_NODE *n, uint32_t flags, const char *path, const char *val)
Definition: db.c:984
GWENHYWFAR_API unsigned int GWEN_DB_Variables_Count(const GWEN_DB_NODE *node)
Definition: db.c:1716
GWENHYWFAR_API GWEN_DB_NODE * GWEN_DB_GetFirstValue(GWEN_DB_NODE *n)
Definition: db.c:505
GWENHYWFAR_API GWEN_DB_NODE_TYPE GWEN_DB_GetValueTypeByPath(GWEN_DB_NODE *n, const char *p, unsigned int i)
Definition: db.c:1599
GWENHYWFAR_API int GWEN_DB_IsGroup(const GWEN_DB_NODE *n)
Definition: db.c:1627
GWENHYWFAR_API int GWEN_DB_AddCharValue(GWEN_DB_NODE *n, const char *path, const char *val, int senseCase, int check)
Definition: db.c:1060
GWENHYWFAR_API GWEN_DB_NODE * GWEN_DB_GetNextVar(GWEN_DB_NODE *n)
Definition: db.c:487
GWENHYWFAR_API void GWEN_DB_UnlinkGroup(GWEN_DB_NODE *n)
Definition: db.c:1541
GWEN_DB_NODE_TYPE
Definition: db.h:233
GWENHYWFAR_API int GWEN_DB_ReadFile(GWEN_DB_NODE *n, const char *fname, uint32_t dbflags)
Definition: dbrw.c:1003
GWENHYWFAR_API int GWEN_DB_GetIntValue(GWEN_DB_NODE *n, const char *path, int idx, int defVal)
Definition: db.c:1150
GWENHYWFAR_API GWEN_DB_NODE * GWEN_DB_GetParentGroup(GWEN_DB_NODE *n)
Definition: db.c:1814
GWENHYWFAR_API GWEN_DB_NODE * GWEN_DB_FindFirstGroup(GWEN_DB_NODE *n, const char *name)
Definition: db.c:1827
GWENHYWFAR_API GWEN_DB_NODE * GWEN_DB_Group_new(const char *name)
Definition: db.c:160
GWENHYWFAR_API GWEN_DB_NODE * GWEN_DB_GetFirstGroup(GWEN_DB_NODE *n)
Definition: db.c:427
GWENHYWFAR_API int GWEN_DB_WriteFile(GWEN_DB_NODE *n, const char *fname, uint32_t dbflags)
Definition: dbrw.c:535
GWENHYWFAR_API int GWEN_DB_SetIntValue(GWEN_DB_NODE *n, uint32_t flags, const char *path, int val)
Definition: db.c:1189
GWENHYWFAR_API int GWEN_DB_GetIntValueFromNode(const GWEN_DB_NODE *n)
Definition: db.c:594
GWENHYWFAR_API int GWEN_DB_RemoveCharValue(GWEN_DB_NODE *n, const char *path, const char *val, int senseCase)
Definition: db.c:1108
GWENHYWFAR_API void * GWEN_DB_Variables_Foreach(GWEN_DB_NODE *node, GWEN_DB_NODES_CB func, void *user_data)
Definition: db.c:1693
GWENHYWFAR_API int GWEN_DB_ClearGroup(GWEN_DB_NODE *n, const char *path)
Definition: db.c:931
GWENHYWFAR_API int GWEN_DB_AddGroupChildren(GWEN_DB_NODE *n, GWEN_DB_NODE *nn)
Definition: db.c:1511
GWENHYWFAR_API int GWEN_DB_SetCharValueInNode(GWEN_DB_NODE *n, const char *s)
Definition: db.c:577
GWENHYWFAR_API GWEN_DB_NODE * GWEN_DB_FindNextGroup(GWEN_DB_NODE *n, const char *name)
Definition: db.c:1848
GWENHYWFAR_API void * GWEN_DB_Values_Foreach(GWEN_DB_NODE *node, GWEN_DB_NODES_CB func, void *user_data)
Definition: db.c:1725
GWENHYWFAR_API void GWEN_DB_SetNodeFlags(GWEN_DB_NODE *n, uint32_t flags)
Definition: db.c:1765
GWENHYWFAR_API GWEN_DB_NODE_TYPE GWEN_DB_GetValueType(GWEN_DB_NODE *n)
Definition: db.c:550
GWENHYWFAR_API unsigned int GWEN_DB_Values_Count(const GWEN_DB_NODE *node)
Definition: db.c:1748
GWENHYWFAR_API const char * GWEN_DB_GetCharValueFromNode(const GWEN_DB_NODE *n)
Definition: db.c:565