34 x=(
unsigned char)*src;
51 c=(((
unsigned char)(*src))>>4)&0xf;
56 c=((
unsigned char)(*src))&0xf;
83 if (isxdigit((
int)src[1]) && isxdigit((
int)src[2])) {
87 d1=(
unsigned char)(toupper(*src));
91 d2=(
unsigned char)(toupper(*src));
193 n=GWEN_DB_Node_List_First(node->children);
216 for (i=0; i<insert; i++) {
251 if (dbflags & GWEN_DB_FLAGS_INDEND) {
252 for (i=0; i<insert; i++) {
280 if (dbflags & GWEN_DB_FLAGS_ADD_GROUP_NEWLINES) {
281 if (GWEN_DB_Node_List_Next(n)) {
296 cn=GWEN_DB_Node_List_First(n->children);
307 char *binbuffer=
NULL;
309 const char *pvalue=
NULL;
315 pvalue=cn->data.dataChar;
340 bbsize=cn->dataSize*2+1;
368 for (i=0; i<insert; i++) {
403 if (dbflags & GWEN_DB_FLAGS_QUOTE_VARNAMES) {
450 if (dbflags & GWEN_DB_FLAGS_QUOTE_VALUES) {
463 cn=GWEN_DB_Node_List_Next(cn);
484 n=GWEN_DB_Node_List_Next(n);
542 "Could not apply lock to file \"%s\" (%d)",
600 "Could not remove lock on file \"%s\" (%d)",
613 const char *typeName,
625 if (strcasecmp(typeName,
"int")==0)
627 else if (strcasecmp(typeName,
"char")==0)
629 else if (strcasecmp(typeName,
"bin")==0)
648 while(*p && isspace(*p))
697 if (*p==
',' || *p==
';' || *p==
'#')
715 if (1!=sscanf(v,
"%d", &i)) {
747 while(*p && isspace(*p))
749 if (!*p || *p==
';' || *p==
'#')
806 while(*p && isspace(*p))
832 while(*p && !isspace(*p) &&
849 while(*p && isspace(*p))
881 else if (*p==
'=' || *p==
':') {
893 else if (*p==
',' || *p==
';') {
905 *p!=((dbflags & GWEN_DB_FLAGS_USE_COLON)?
':':
'=') &&
918 while(*p && isspace(*p))
927 if (*p!=
'=' && *p!=
':') {
int GWEN_DB_WriteToBuffer(GWEN_DB_NODE *n, GWEN_BUFFER *buf, uint32_t dbflags)
GWENHYWFAR_API void GWEN_FSLock_free(GWEN_FSLOCK *fl)
char * GWEN_Buffer_GetStart(const GWEN_BUFFER *bf)
int GWEN_SyncIo_Connect(GWEN_SYNCIO *sio)
struct GWEN_DB_NODE GWEN_DB_NODE
#define GWEN_SYNCIO_FILE_FLAGS_WRITE
uint32_t GWEN_Buffer_GetUsedBytes(const GWEN_BUFFER *bf)
#define GWEN_SYNCIO_FILE_FLAGS_READ
int GWEN_DB__ReadValues(GWEN_DB_NODE *n, uint32_t dbflags, const char *typeName, const char *varName, uint8_t *p)
#define GWEN_DB_FLAGS_DETAILED_GROUPS
#define GWEN_DB_FLAGS_INDEND
#define GWEN_DB_FLAGS_UNTIL_EMPTY_LINE
#define GWEN_DB_FLAGS_OMIT_TYPES
int GWEN_FastBuffer_ReadLineToBuffer(GWEN_FAST_BUFFER *fb, GWEN_BUFFER *buf)
void GWEN_Memory_dealloc(void *p)
#define GWEN_SYNCIO_FILE_FLAGS_UREAD
int GWEN_Text_EscapeToBufferTolerant(const char *src, GWEN_BUFFER *buf)
#define DBG_VERBOUS(dbg_logger, format, args...)
int GWEN_DB_UnescapeToBufferTolerant(const char *src, GWEN_BUFFER *buf)
#define GWEN_DB_FLAGS_WRITE_SUBGROUPS
void GWEN_FastBuffer_free(GWEN_FAST_BUFFER *fb)
#define DBG_WARN(dbg_logger, format, args...)
int GWEN_DB_ReadFromString(GWEN_DB_NODE *n, const char *str, int len, uint32_t dbflags)
int GWEN_DB_WriteToFastBuffer(GWEN_DB_NODE *node, GWEN_FAST_BUFFER *fb, uint32_t dbflags)
GWEN_BUFFER * GWEN_Buffer_new(char *buffer, uint32_t size, uint32_t used, int take)
#define GWEN_DB_FLAGS_QUOTE_VARNAMES
void GWEN_Buffer_Dump(GWEN_BUFFER *bf, unsigned int insert)
void GWEN_Buffer_Reset(GWEN_BUFFER *bf)
#define GWEN_FASTBUFFER_FLUSH(fb, var)
#define GWEN_DB_DEFAULT_LOCK_TIMEOUT
GWEN_DB_NODE * GWEN_DB_ValueBin_new(const void *data, unsigned int datasize)
GWEN_DB_NODE * GWEN_DB_GetNode(GWEN_DB_NODE *n, const char *path, uint32_t flags)
#define GWEN_ERROR_BAD_DATA
struct GWEN_SYNCIO GWEN_SYNCIO
GWENHYWFAR_API GWEN_FSLOCK * GWEN_FSLock_new(const char *fname, GWEN_FSLOCK_TYPE t)
int GWEN_DB_ReadFromFastBuffer(GWEN_DB_NODE *n, GWEN_FAST_BUFFER *fb, uint32_t dbflags)
GWEN_SYNCIO * GWEN_SyncIo_Memory_new(GWEN_BUFFER *buffer, int take)
int GWEN_DBIO_Import(GWEN_DBIO *dbio, GWEN_SYNCIO *sio, GWEN_DB_NODE *db, GWEN_DB_NODE *params, uint32_t flags)
#define DBG_DEBUG(dbg_logger, format, args...)
int GWEN_DB_WriteToIo(GWEN_DB_NODE *node, GWEN_SYNCIO *sio, uint32_t dbflags)
#define GWEN_DB_FLAGS_QUOTE_VALUES
void GWEN_DB_Node_Append(GWEN_DB_NODE *parent, GWEN_DB_NODE *n)
int GWEN_DB_WriteFileAs(GWEN_DB_NODE *db, const char *fname, const char *type, GWEN_DB_NODE *params, uint32_t dbflags)
#define GWEN_PATH_FLAGS_VARIABLE
void * GWEN_Memory_malloc(size_t wsize)
#define GWEN_ERROR_GENERIC
int GWEN_Buffer_AppendByte(GWEN_BUFFER *bf, char c)
#define GWEN_SYNCIO_FILE_FLAGS_UWRITE
GWENHYWFAR_API GWEN_FSLOCK_RESULT GWEN_FSLock_Lock(GWEN_FSLOCK *fl, int timeout, uint32_t gid)
#define GWEN_DB_FLAGS_APPEND_FILE
#define GWEN_FAST_BUFFER_FLAGS_DOSMODE
GWEN_DB_NODE * GWEN_DB_GetGroup(GWEN_DB_NODE *n, uint32_t flags, const char *path)
GWEN_DB_NODE * GWEN_DB_ValueChar_new(const char *data)
GWEN_SYNCIO * GWEN_SyncIo_Memory_fromBuffer(const uint8_t *buffer, int size)
void GWEN_Buffer_free(GWEN_BUFFER *bf)
struct GWEN_BUFFER GWEN_BUFFER
A dynamically resizeable text buffer.
void GWEN_SyncIo_free(GWEN_SYNCIO *sio)
#define GWEN_DB_FLAGS_USE_COLON
void GWEN_SyncIo_AddFlags(GWEN_SYNCIO *sio, uint32_t fl)
int GWEN_Text_NumToString(int num, char *buffer, unsigned int bufsize, int fillchar)
#define DBG_ERROR(dbg_logger, format, args...)
int GWEN_DB_ReadFileAs(GWEN_DB_NODE *db, const char *fname, const char *type, GWEN_DB_NODE *params, uint32_t dbflags)
char * GWEN_Text_ToHex(const char *src, unsigned l, char *buffer, unsigned int maxsize)
struct GWEN_DBIO GWEN_DBIO
#define GWEN_FASTBUFFER_WRITEFORCED(fb, var, p, len)
int GWEN_SyncIo_Disconnect(GWEN_SYNCIO *sio)
int GWEN_DB_ReadFromIo(GWEN_DB_NODE *n, GWEN_SYNCIO *sio, uint32_t dbflags)
#define GWEN_ERROR_NOT_SUPPORTED
#define GWEN_DB_FLAGS_LOCKFILE
#define GWEN_FASTBUFFER_WRITEBYTE(fb, var, chr)
#define DBG_INFO(dbg_logger, format, args...)
int GWEN_DB_EscapeToBufferTolerant(const char *src, GWEN_BUFFER *buf)
#define GWEN_DB_NODE_FLAGS_VOLATILE
#define GWEN_DB_FLAGS_DOSMODE
int GWEN_DB_ReadFile(GWEN_DB_NODE *n, const char *fname, uint32_t dbflags)
#define GWEN_DB_FLAGS_ESCAPE_CHARVALUES
struct GWEN_FSLOCK GWEN_FSLOCK
#define GWEN_DB_FLAGS_ADD_GROUP_NEWLINES
GWENHYWFAR_API GWEN_SYNCIO * GWEN_SyncIo_File_new(const char *path, GWEN_SYNCIO_FILE_CREATIONMODE cm)
#define GWEN_FASTBUFFER_WRITELINE(fb, var, p)
int GWEN_DB_WriteGroupToIoLayer(GWEN_DB_NODE *node, GWEN_FAST_BUFFER *fb, uint32_t dbflags, int insert)
int GWEN_DB_WriteFile(GWEN_DB_NODE *n, const char *fname, uint32_t dbflags)
void GWEN_FastBuffer_AddFlags(GWEN_FAST_BUFFER *fb, uint32_t fl)
GWENHYWFAR_API GWEN_FSLOCK_RESULT GWEN_FSLock_Unlock(GWEN_FSLOCK *fl)
int GWEN_Text_FromHexBuffer(const char *src, GWEN_BUFFER *buf)
GWEN_FAST_BUFFER * GWEN_FastBuffer_new(uint32_t bsize, GWEN_SYNCIO *io)
int GWEN_DBIO_ExportToFile(GWEN_DBIO *dbio, const char *fname, GWEN_DB_NODE *db, GWEN_DB_NODE *params, uint32_t dbflags)
GWEN_DBIO * GWEN_DBIO_GetPlugin(const char *modname)
GWEN_DB_NODE * GWEN_DB_ValueInt_new(int data)
#define GWEN_SYNCIO_FILE_FLAGS_APPEND
#define GWEN_DB_FLAGS_ALLOW_EMPTY_STREAM