gwenhywfar 4.0.3
|
00001 /*************************************************************************** 00002 begin : Tue Sep 09 2003 00003 copyright : (C) 2003-2010 by Martin Preuss 00004 email : martin@libchipcard.de 00005 00006 *************************************************************************** 00007 * * 00008 * This library is free software; you can redistribute it and/or * 00009 * modify it under the terms of the GNU Lesser General Public * 00010 * License as published by the Free Software Foundation; either * 00011 * version 2.1 of the License, or (at your option) any later version. * 00012 * * 00013 * This library is distributed in the hope that it will be useful, * 00014 * but WITHOUT ANY WARRANTY; without even the implied warranty of * 00015 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * 00016 * Lesser General Public License for more details. * 00017 * * 00018 * You should have received a copy of the GNU Lesser General Public * 00019 * License along with this library; if not, write to the Free Software * 00020 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * 00021 * MA 02111-1307 USA * 00022 * * 00023 ***************************************************************************/ 00024 00025 00028 #ifndef GWENHYWFAR_DB_H 00029 #define GWENHYWFAR_DB_H 00030 00031 #include <gwenhywfar/gwenhywfarapi.h> 00032 #include <gwenhywfar/path.h> 00033 #include <gwenhywfar/fastbuffer.h> 00034 #include <gwenhywfar/types.h> 00035 #include <stdio.h> 00036 00037 #ifdef __cplusplus 00038 extern "C" { 00039 #endif 00040 00041 00102 #define GWEN_DB_LINE_MAXSIZE 1024 00103 00119 #define GWEN_DB_FLAGS_ALLOW_EMPTY_STREAM 0x00008000 00120 00121 #define GWEN_DB_FLAGS_OVERWRITE_VARS 0x00010000 00122 00123 #define GWEN_DB_FLAGS_OVERWRITE_GROUPS 0x00020000 00124 00125 #define GWEN_DB_FLAGS_QUOTE_VARNAMES 0x00040000 00126 00127 #define GWEN_DB_FLAGS_QUOTE_VALUES 0x00080000 00128 00129 #define GWEN_DB_FLAGS_WRITE_SUBGROUPS 0x00100000 00130 00131 #define GWEN_DB_FLAGS_DETAILED_GROUPS 0x00200000 00132 00134 #define GWEN_DB_FLAGS_INDEND 0x00400000 00135 00137 #define GWEN_DB_FLAGS_ADD_GROUP_NEWLINES 0x00800000 00138 00140 #define GWEN_DB_FLAGS_USE_COLON 0x01000000 00141 00142 #define GWEN_DB_FLAGS_UNTIL_EMPTY_LINE 0x02000000 00143 00145 #define GWEN_DB_FLAGS_OMIT_TYPES 0x04000000 00146 00147 #define GWEN_DB_FLAGS_APPEND_FILE 0x08000000 00148 00149 #define GWEN_DB_FLAGS_ESCAPE_CHARVALUES 0x10000000 00150 00152 #define GWEN_DB_FLAGS_UNESCAPE_CHARVALUES 0x10000000 00153 00155 #define GWEN_DB_FLAGS_LOCKFILE 0x20000000 00156 00160 #define GWEN_DB_FLAGS_INSERT 0x40000000 00161 00165 #define GWEN_DB_FLAGS_DOSMODE 0x80000000 00166 00168 #define GWEN_DB_FLAGS_DEFAULT \ 00169 (\ 00170 GWEN_DB_FLAGS_QUOTE_VALUES | \ 00171 GWEN_DB_FLAGS_WRITE_SUBGROUPS | \ 00172 GWEN_DB_FLAGS_DETAILED_GROUPS | \ 00173 GWEN_DB_FLAGS_INDEND | \ 00174 GWEN_DB_FLAGS_ADD_GROUP_NEWLINES | \ 00175 GWEN_DB_FLAGS_ESCAPE_CHARVALUES | \ 00176 GWEN_DB_FLAGS_UNESCAPE_CHARVALUES\ 00177 ) 00178 00179 00182 #define GWEN_DB_FLAGS_COMPACT \ 00183 (\ 00184 GWEN_DB_FLAGS_QUOTE_VALUES | \ 00185 GWEN_DB_FLAGS_WRITE_SUBGROUPS | \ 00186 GWEN_DB_FLAGS_ESCAPE_CHARVALUES | \ 00187 GWEN_DB_FLAGS_UNESCAPE_CHARVALUES\ 00188 ) 00189 00193 #define GWEN_DB_FLAGS_HTTP \ 00194 (\ 00195 GWEN_DB_FLAGS_USE_COLON |\ 00196 GWEN_DB_FLAGS_UNTIL_EMPTY_LINE |\ 00197 GWEN_DB_FLAGS_OMIT_TYPES | \ 00198 GWEN_DB_FLAGS_DOSMODE \ 00199 ) 00200 00207 #define GWEN_DB_NODE_FLAGS_DIRTY 0x00000001 00208 00209 #define GWEN_DB_NODE_FLAGS_VOLATILE 0x00000002 00210 00212 #define GWEN_DB_NODE_FLAGS_INHERIT_HASH_MECHANISM 0x00000004 00213 00216 #define GWEN_DB_DEFAULT_LOCK_TIMEOUT 1000 00217 00218 00226 typedef struct GWEN_DB_NODE GWEN_DB_NODE; 00227 00231 typedef enum { 00233 GWEN_DB_NodeType_Unknown=-1, 00235 GWEN_DB_NodeType_Group=0, 00237 GWEN_DB_NodeType_Var, 00239 GWEN_DB_NodeType_ValueChar, 00241 GWEN_DB_NodeType_ValueInt, 00243 GWEN_DB_NodeType_ValueBin, 00245 GWEN_DB_NodeType_ValuePtr, 00247 GWEN_DB_NodeType_ValueLast 00248 } GWEN_DB_NODE_TYPE; 00249 00250 00251 00256 00263 GWENHYWFAR_API 00264 GWEN_DB_NODE *GWEN_DB_Group_new(const char *name); 00265 00271 GWENHYWFAR_API 00272 void GWEN_DB_Group_free(GWEN_DB_NODE *n); 00273 00274 00281 GWENHYWFAR_API 00282 GWEN_DB_NODE *GWEN_DB_Group_dup(const GWEN_DB_NODE *n); 00283 00301 GWENHYWFAR_API 00302 GWEN_DB_NODE *GWEN_DB_GetFirstGroup(GWEN_DB_NODE *n); 00303 00326 GWENHYWFAR_API 00327 GWEN_DB_NODE *GWEN_DB_GetNextGroup(GWEN_DB_NODE *n); 00328 00329 00341 GWENHYWFAR_API 00342 GWEN_DB_NODE *GWEN_DB_FindFirstGroup(GWEN_DB_NODE *n, const char *name); 00343 00362 GWENHYWFAR_API 00363 GWEN_DB_NODE *GWEN_DB_FindNextGroup(GWEN_DB_NODE *n, const char *name); 00364 00365 00376 typedef void *(*GWEN_DB_NODES_CB)(GWEN_DB_NODE *node, void *user_data); 00377 00394 GWENHYWFAR_API 00395 void *GWEN_DB_Groups_Foreach(GWEN_DB_NODE *node, GWEN_DB_NODES_CB func, 00396 void *user_data); 00397 00401 GWENHYWFAR_API 00402 unsigned int GWEN_DB_Groups_Count(const GWEN_DB_NODE *node); 00460 GWENHYWFAR_API 00461 const char *GWEN_DB_GetCharValue(GWEN_DB_NODE *n, 00462 const char *path, 00463 int idx, 00464 const char *defVal); 00473 GWENHYWFAR_API 00474 int GWEN_DB_SetCharValue(GWEN_DB_NODE *n, 00475 uint32_t flags, 00476 const char *path, 00477 const char *val); 00478 00479 00490 GWENHYWFAR_API 00491 int GWEN_DB_AddCharValue(GWEN_DB_NODE *n, 00492 const char *path, 00493 const char *val, 00494 int senseCase, 00495 int check); 00496 00497 00507 GWENHYWFAR_API 00508 int GWEN_DB_RemoveCharValue(GWEN_DB_NODE *n, 00509 const char *path, 00510 const char *val, 00511 int senseCase); 00512 00513 00521 GWENHYWFAR_API 00522 int GWEN_DB_GetIntValue(GWEN_DB_NODE *n, 00523 const char *path, 00524 int idx, 00525 int defVal); 00526 00535 GWENHYWFAR_API 00536 int GWEN_DB_SetIntValue(GWEN_DB_NODE *n, 00537 uint32_t flags, 00538 const char *path, 00539 int val); 00540 00541 00553 GWENHYWFAR_API 00554 const void *GWEN_DB_GetBinValue(GWEN_DB_NODE *n, 00555 const char *path, 00556 int idx, 00557 const void *defVal, 00558 unsigned int defValSize, 00559 unsigned int *returnValueSize); 00560 00571 GWENHYWFAR_API 00572 int GWEN_DB_SetBinValue(GWEN_DB_NODE *n, 00573 uint32_t flags, 00574 const char *path, 00575 const void *val, 00576 unsigned int valSize); 00577 00578 00586 GWENHYWFAR_API 00587 void *GWEN_DB_GetPtrValue(GWEN_DB_NODE *n, 00588 const char *path, 00589 int idx, 00590 void *defVal); 00591 00601 GWENHYWFAR_API 00602 int GWEN_DB_SetPtrValue(GWEN_DB_NODE *n, 00603 uint32_t flags, 00604 const char *path, 00605 void *val); 00614 00624 GWENHYWFAR_API 00625 GWEN_DB_NODE *GWEN_DB_GetGroup(GWEN_DB_NODE *n, 00626 uint32_t flags, 00627 const char *path); 00628 00632 GWENHYWFAR_API 00633 const char *GWEN_DB_GroupName(GWEN_DB_NODE *n); 00634 00640 GWENHYWFAR_API 00641 void GWEN_DB_GroupRename(GWEN_DB_NODE *n, const char *newname); 00642 00657 GWENHYWFAR_API 00658 int GWEN_DB_AddGroup(GWEN_DB_NODE *parent, GWEN_DB_NODE *node); 00659 00675 GWENHYWFAR_API 00676 int GWEN_DB_InsertGroup(GWEN_DB_NODE *parent, GWEN_DB_NODE *node); 00677 00687 GWENHYWFAR_API 00688 int GWEN_DB_AddGroupChildren(GWEN_DB_NODE *n, GWEN_DB_NODE *nn); 00689 00699 GWENHYWFAR_API 00700 void GWEN_DB_UnlinkGroup(GWEN_DB_NODE *n); 00701 00708 GWENHYWFAR_API 00709 int GWEN_DB_DeleteGroup(GWEN_DB_NODE *n, 00710 const char *path); 00718 GWENHYWFAR_API 00719 int GWEN_DB_ClearGroup(GWEN_DB_NODE *n, 00720 const char *path); 00721 00728 GWENHYWFAR_API 00729 int GWEN_DB_IsGroup(const GWEN_DB_NODE *n); 00730 00742 GWENHYWFAR_API 00743 uint32_t GWEN_DB_GetNodeFlags(const GWEN_DB_NODE *n); 00744 00750 GWENHYWFAR_API 00751 void GWEN_DB_SetNodeFlags(GWEN_DB_NODE *n, 00752 uint32_t flags); 00753 00762 GWENHYWFAR_API 00763 void GWEN_DB_ModifyBranchFlagsUp(GWEN_DB_NODE *n, 00764 uint32_t newflags, 00765 uint32_t mask); 00766 00775 GWENHYWFAR_API 00776 void GWEN_DB_ModifyBranchFlagsDown(GWEN_DB_NODE *n, 00777 uint32_t newflags, 00778 uint32_t mask); 00779 00793 00794 GWENHYWFAR_API 00795 int GWEN_DB_ReadFromFastBuffer(GWEN_DB_NODE *n, 00796 GWEN_FAST_BUFFER *fb, 00797 uint32_t dbflags); 00798 00799 GWENHYWFAR_API 00800 int GWEN_DB_ReadFromIo(GWEN_DB_NODE *n, GWEN_SYNCIO *sio, uint32_t dbflags); 00801 00802 GWENHYWFAR_API 00803 int GWEN_DB_ReadFile(GWEN_DB_NODE *n, 00804 const char *fname, 00805 uint32_t dbflags); 00806 00807 GWENHYWFAR_API 00808 int GWEN_DB_ReadFromString(GWEN_DB_NODE *n, 00809 const char *str, 00810 int len, 00811 uint32_t dbflags); 00812 00813 GWENHYWFAR_API 00814 int GWEN_DB_WriteToFastBuffer(GWEN_DB_NODE *node, 00815 GWEN_FAST_BUFFER *fb, 00816 uint32_t dbflags); 00817 00818 GWENHYWFAR_API 00819 int GWEN_DB_WriteToIo(GWEN_DB_NODE *node, 00820 GWEN_SYNCIO *sio, 00821 uint32_t dbflags); 00822 00823 00824 GWENHYWFAR_API 00825 int GWEN_DB_WriteFile(GWEN_DB_NODE *n, 00826 const char *fname, 00827 uint32_t dbflags); 00828 00829 GWENHYWFAR_API 00830 int GWEN_DB_WriteToBuffer(GWEN_DB_NODE *n, 00831 GWEN_BUFFER *buf, 00832 uint32_t dbflags); 00833 00844 GWENHYWFAR_API 00845 int GWEN_DB_ReadFileAs(GWEN_DB_NODE *n, 00846 const char *fname, 00847 const char *type, 00848 GWEN_DB_NODE *params, 00849 uint32_t dbflags); 00850 00861 GWENHYWFAR_API 00862 int GWEN_DB_WriteFileAs(GWEN_DB_NODE *n, 00863 const char *fname, 00864 const char *type, 00865 GWEN_DB_NODE *params, 00866 uint32_t dbflags); 00867 00868 00881 GWENHYWFAR_API 00882 GWEN_DB_NODE *GWEN_DB_GetFirstVar(GWEN_DB_NODE *n); 00883 00884 00906 GWENHYWFAR_API 00907 GWEN_DB_NODE *GWEN_DB_GetNextVar(GWEN_DB_NODE *n); 00908 00913 GWENHYWFAR_API 00914 const char *GWEN_DB_VariableName(GWEN_DB_NODE *n); 00915 00916 00917 GWENHYWFAR_API 00918 void GWEN_DB_VariableRename(GWEN_DB_NODE *n, const char *newname); 00919 00936 GWENHYWFAR_API 00937 void *GWEN_DB_Variables_Foreach(GWEN_DB_NODE *node, GWEN_DB_NODES_CB func, 00938 void *user_data); 00939 00944 GWENHYWFAR_API 00945 unsigned int GWEN_DB_Variables_Count(const GWEN_DB_NODE *node); 00946 00952 GWENHYWFAR_API 00953 GWEN_DB_NODE_TYPE GWEN_DB_GetVariableType(GWEN_DB_NODE *n, 00954 const char *p); 00955 00962 GWENHYWFAR_API 00963 int GWEN_DB_DeleteVar(GWEN_DB_NODE *n, 00964 const char *path); 00965 00972 GWENHYWFAR_API 00973 int GWEN_DB_VariableExists(GWEN_DB_NODE *n, 00974 const char *path); 00975 00983 GWENHYWFAR_API 00984 int GWEN_DB_ValueExists(GWEN_DB_NODE *n, 00985 const char *path, 00986 unsigned int idx); 00987 00994 GWENHYWFAR_API 00995 int GWEN_DB_IsVariable(const GWEN_DB_NODE *n); 00996 00997 01009 GWENHYWFAR_API 01010 GWEN_DB_NODE *GWEN_DB_FindFirstVar(GWEN_DB_NODE *n, const char *name); 01011 01030 GWENHYWFAR_API 01031 GWEN_DB_NODE *GWEN_DB_FindNextVar(GWEN_DB_NODE *n, const char *name); 01032 01045 GWENHYWFAR_API 01046 GWEN_DB_NODE *GWEN_DB_GetFirstValue(GWEN_DB_NODE *n); 01047 01064 GWENHYWFAR_API 01065 GWEN_DB_NODE *GWEN_DB_GetNextValue(GWEN_DB_NODE *n); 01066 01083 GWENHYWFAR_API 01084 void *GWEN_DB_Values_Foreach(GWEN_DB_NODE *node, GWEN_DB_NODES_CB func, 01085 void *user_data); 01086 01090 GWENHYWFAR_API 01091 unsigned int GWEN_DB_Values_Count(const GWEN_DB_NODE *node); 01092 01097 GWENHYWFAR_API 01098 GWEN_DB_NODE_TYPE GWEN_DB_GetValueType(GWEN_DB_NODE *n); 01099 01100 GWENHYWFAR_API 01101 GWEN_DB_NODE_TYPE GWEN_DB_GetValueTypeByPath(GWEN_DB_NODE *n, 01102 const char *p, 01103 unsigned int i); 01104 01109 GWENHYWFAR_API 01110 const char *GWEN_DB_GetCharValueFromNode(const GWEN_DB_NODE *n); 01111 01116 GWENHYWFAR_API 01117 int GWEN_DB_SetCharValueInNode(GWEN_DB_NODE *n, const char *s); 01118 01119 GWENHYWFAR_API 01120 int GWEN_DB_GetIntValueFromNode(const GWEN_DB_NODE *n); 01121 01122 GWENHYWFAR_API 01123 const void *GWEN_DB_GetBinValueFromNode(const GWEN_DB_NODE *n, 01124 unsigned int *size); 01125 01126 01133 GWENHYWFAR_API 01134 int GWEN_DB_IsValue(const GWEN_DB_NODE *n); 01148 01154 GWENHYWFAR_API 01155 void GWEN_DB_Dump(GWEN_DB_NODE *n, int insert); 01160 01161 01162 #ifdef __cplusplus 01163 } 01164 #endif 01165 01166 01167 #endif 01168 01169 01170