gwenhywfar
4.3.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); 00403 00407 GWENHYWFAR_API 00408 GWEN_DB_NODE *GWEN_DB_GetParentGroup(GWEN_DB_NODE *n); 00409 00467 GWENHYWFAR_API 00468 const char *GWEN_DB_GetCharValue(GWEN_DB_NODE *n, 00469 const char *path, 00470 int idx, 00471 const char *defVal); 00480 GWENHYWFAR_API 00481 int GWEN_DB_SetCharValue(GWEN_DB_NODE *n, 00482 uint32_t flags, 00483 const char *path, 00484 const char *val); 00485 00486 00497 GWENHYWFAR_API 00498 int GWEN_DB_AddCharValue(GWEN_DB_NODE *n, 00499 const char *path, 00500 const char *val, 00501 int senseCase, 00502 int check); 00503 00504 00514 GWENHYWFAR_API 00515 int GWEN_DB_RemoveCharValue(GWEN_DB_NODE *n, 00516 const char *path, 00517 const char *val, 00518 int senseCase); 00519 00520 00528 GWENHYWFAR_API 00529 int GWEN_DB_GetIntValue(GWEN_DB_NODE *n, 00530 const char *path, 00531 int idx, 00532 int defVal); 00533 00542 GWENHYWFAR_API 00543 int GWEN_DB_SetIntValue(GWEN_DB_NODE *n, 00544 uint32_t flags, 00545 const char *path, 00546 int val); 00547 00548 00560 GWENHYWFAR_API 00561 const void *GWEN_DB_GetBinValue(GWEN_DB_NODE *n, 00562 const char *path, 00563 int idx, 00564 const void *defVal, 00565 unsigned int defValSize, 00566 unsigned int *returnValueSize); 00567 00578 GWENHYWFAR_API 00579 int GWEN_DB_SetBinValue(GWEN_DB_NODE *n, 00580 uint32_t flags, 00581 const char *path, 00582 const void *val, 00583 unsigned int valSize); 00584 00585 00593 GWENHYWFAR_API 00594 void *GWEN_DB_GetPtrValue(GWEN_DB_NODE *n, 00595 const char *path, 00596 int idx, 00597 void *defVal); 00598 00608 GWENHYWFAR_API 00609 int GWEN_DB_SetPtrValue(GWEN_DB_NODE *n, 00610 uint32_t flags, 00611 const char *path, 00612 void *val); 00621 00631 GWENHYWFAR_API 00632 GWEN_DB_NODE *GWEN_DB_GetGroup(GWEN_DB_NODE *n, 00633 uint32_t flags, 00634 const char *path); 00635 00639 GWENHYWFAR_API 00640 const char *GWEN_DB_GroupName(GWEN_DB_NODE *n); 00641 00647 GWENHYWFAR_API 00648 void GWEN_DB_GroupRename(GWEN_DB_NODE *n, const char *newname); 00649 00664 GWENHYWFAR_API 00665 int GWEN_DB_AddGroup(GWEN_DB_NODE *parent, GWEN_DB_NODE *node); 00666 00682 GWENHYWFAR_API 00683 int GWEN_DB_InsertGroup(GWEN_DB_NODE *parent, GWEN_DB_NODE *node); 00684 00694 GWENHYWFAR_API 00695 int GWEN_DB_AddGroupChildren(GWEN_DB_NODE *n, GWEN_DB_NODE *nn); 00696 00706 GWENHYWFAR_API 00707 void GWEN_DB_UnlinkGroup(GWEN_DB_NODE *n); 00708 00715 GWENHYWFAR_API 00716 int GWEN_DB_DeleteGroup(GWEN_DB_NODE *n, 00717 const char *path); 00725 GWENHYWFAR_API 00726 int GWEN_DB_ClearGroup(GWEN_DB_NODE *n, 00727 const char *path); 00728 00735 GWENHYWFAR_API 00736 int GWEN_DB_IsGroup(const GWEN_DB_NODE *n); 00737 00749 GWENHYWFAR_API 00750 uint32_t GWEN_DB_GetNodeFlags(const GWEN_DB_NODE *n); 00751 00757 GWENHYWFAR_API 00758 void GWEN_DB_SetNodeFlags(GWEN_DB_NODE *n, 00759 uint32_t flags); 00760 00769 GWENHYWFAR_API 00770 void GWEN_DB_ModifyBranchFlagsUp(GWEN_DB_NODE *n, 00771 uint32_t newflags, 00772 uint32_t mask); 00773 00782 GWENHYWFAR_API 00783 void GWEN_DB_ModifyBranchFlagsDown(GWEN_DB_NODE *n, 00784 uint32_t newflags, 00785 uint32_t mask); 00786 00800 00801 GWENHYWFAR_API 00802 int GWEN_DB_ReadFromFastBuffer(GWEN_DB_NODE *n, 00803 GWEN_FAST_BUFFER *fb, 00804 uint32_t dbflags); 00805 00806 GWENHYWFAR_API 00807 int GWEN_DB_ReadFromIo(GWEN_DB_NODE *n, GWEN_SYNCIO *sio, uint32_t dbflags); 00808 00809 GWENHYWFAR_API 00810 int GWEN_DB_ReadFile(GWEN_DB_NODE *n, 00811 const char *fname, 00812 uint32_t dbflags); 00813 00814 GWENHYWFAR_API 00815 int GWEN_DB_ReadFromString(GWEN_DB_NODE *n, 00816 const char *str, 00817 int len, 00818 uint32_t dbflags); 00819 00820 GWENHYWFAR_API 00821 int GWEN_DB_WriteToFastBuffer(GWEN_DB_NODE *node, 00822 GWEN_FAST_BUFFER *fb, 00823 uint32_t dbflags); 00824 00825 GWENHYWFAR_API 00826 int GWEN_DB_WriteToIo(GWEN_DB_NODE *node, 00827 GWEN_SYNCIO *sio, 00828 uint32_t dbflags); 00829 00830 00831 GWENHYWFAR_API 00832 int GWEN_DB_WriteFile(GWEN_DB_NODE *n, 00833 const char *fname, 00834 uint32_t dbflags); 00835 00836 GWENHYWFAR_API 00837 int GWEN_DB_WriteToBuffer(GWEN_DB_NODE *n, 00838 GWEN_BUFFER *buf, 00839 uint32_t dbflags); 00840 00851 GWENHYWFAR_API 00852 int GWEN_DB_ReadFileAs(GWEN_DB_NODE *n, 00853 const char *fname, 00854 const char *type, 00855 GWEN_DB_NODE *params, 00856 uint32_t dbflags); 00857 00868 GWENHYWFAR_API 00869 int GWEN_DB_WriteFileAs(GWEN_DB_NODE *n, 00870 const char *fname, 00871 const char *type, 00872 GWEN_DB_NODE *params, 00873 uint32_t dbflags); 00874 00875 00888 GWENHYWFAR_API 00889 GWEN_DB_NODE *GWEN_DB_GetFirstVar(GWEN_DB_NODE *n); 00890 00891 00913 GWENHYWFAR_API 00914 GWEN_DB_NODE *GWEN_DB_GetNextVar(GWEN_DB_NODE *n); 00915 00920 GWENHYWFAR_API 00921 const char *GWEN_DB_VariableName(GWEN_DB_NODE *n); 00922 00923 00924 GWENHYWFAR_API 00925 void GWEN_DB_VariableRename(GWEN_DB_NODE *n, const char *newname); 00926 00943 GWENHYWFAR_API 00944 void *GWEN_DB_Variables_Foreach(GWEN_DB_NODE *node, GWEN_DB_NODES_CB func, 00945 void *user_data); 00946 00951 GWENHYWFAR_API 00952 unsigned int GWEN_DB_Variables_Count(const GWEN_DB_NODE *node); 00953 00959 GWENHYWFAR_API 00960 GWEN_DB_NODE_TYPE GWEN_DB_GetVariableType(GWEN_DB_NODE *n, 00961 const char *p); 00962 00969 GWENHYWFAR_API 00970 int GWEN_DB_DeleteVar(GWEN_DB_NODE *n, 00971 const char *path); 00972 00979 GWENHYWFAR_API 00980 int GWEN_DB_VariableExists(GWEN_DB_NODE *n, 00981 const char *path); 00982 00990 GWENHYWFAR_API 00991 int GWEN_DB_ValueExists(GWEN_DB_NODE *n, 00992 const char *path, 00993 unsigned int idx); 00994 01001 GWENHYWFAR_API 01002 int GWEN_DB_IsVariable(const GWEN_DB_NODE *n); 01003 01004 01016 GWENHYWFAR_API 01017 GWEN_DB_NODE *GWEN_DB_FindFirstVar(GWEN_DB_NODE *n, const char *name); 01018 01037 GWENHYWFAR_API 01038 GWEN_DB_NODE *GWEN_DB_FindNextVar(GWEN_DB_NODE *n, const char *name); 01039 01052 GWENHYWFAR_API 01053 GWEN_DB_NODE *GWEN_DB_GetFirstValue(GWEN_DB_NODE *n); 01054 01071 GWENHYWFAR_API 01072 GWEN_DB_NODE *GWEN_DB_GetNextValue(GWEN_DB_NODE *n); 01073 01090 GWENHYWFAR_API 01091 void *GWEN_DB_Values_Foreach(GWEN_DB_NODE *node, GWEN_DB_NODES_CB func, 01092 void *user_data); 01093 01097 GWENHYWFAR_API 01098 unsigned int GWEN_DB_Values_Count(const GWEN_DB_NODE *node); 01099 01104 GWENHYWFAR_API 01105 GWEN_DB_NODE_TYPE GWEN_DB_GetValueType(GWEN_DB_NODE *n); 01106 01107 GWENHYWFAR_API 01108 GWEN_DB_NODE_TYPE GWEN_DB_GetValueTypeByPath(GWEN_DB_NODE *n, 01109 const char *p, 01110 unsigned int i); 01111 01116 GWENHYWFAR_API 01117 const char *GWEN_DB_GetCharValueFromNode(const GWEN_DB_NODE *n); 01118 01123 GWENHYWFAR_API 01124 int GWEN_DB_SetCharValueInNode(GWEN_DB_NODE *n, const char *s); 01125 01126 GWENHYWFAR_API 01127 int GWEN_DB_GetIntValueFromNode(const GWEN_DB_NODE *n); 01128 01129 GWENHYWFAR_API 01130 const void *GWEN_DB_GetBinValueFromNode(const GWEN_DB_NODE *n, 01131 unsigned int *size); 01132 01133 01140 GWENHYWFAR_API 01141 int GWEN_DB_IsValue(const GWEN_DB_NODE *n); 01155 01161 GWENHYWFAR_API 01162 void GWEN_DB_Dump(GWEN_DB_NODE *n, int insert); 01167 01168 01169 #ifdef __cplusplus 01170 } 01171 #endif 01172 01173 01174 #endif 01175 01176 01177