31#define DISABLE_DEBUGLOG
33#include <gwenhywfar/text.h>
34#include <gwenhywfar/debug.h>
35#include <gwenhywfar/stringlist.h>
36#include <gwenhywfar/dbio_be.h>
37#include <gwenhywfar/syncio_file.h>
70static int _getNameAndIndex(
const char *name,
char *buffer,
unsigned int size);
110 const char *groupName;
126 DBG_ERROR(0,
"Error in configuration: No columns specified");
131 if (strcasecmp(p,
"TAB")==0)
133 else if (strcasecmp(p,
"SPACE")==0)
143 for (column=1; ; column++) {
166 DBG_INFO(0,
"Error in configuration: Bad name for column %d",
175 if (strlen(namebuffer)+strlen(numbuffer)+1>=
sizeof(namebuffer)) {
176 DBG_ERROR(0,
"Internal: namebuffer too small");
180 strcat(namebuffer, numbuffer);
230 for (column=1; ; column++) {
271 snprintf(valbuffer,
sizeof(valbuffer),
"%d", iv);
342 const char *groupName;
363 DBG_ERROR(0,
"Error in configuration: No columns specified");
368 if (strcasecmp(p,
"TAB")==0)
370 else if (strcasecmp(p,
"SPACE")==0)
374 delimiters[0]=delimiter;
408 if (lines<ignoreLines) {
481 "Found %d columns, file might be supported", i);
490 "Found no columns, file might not be supported");
504 unsigned int llength;
523 t=(
char *)malloc(w+1);
529 for (j=w-1; j>=0; j--) {
530 if ((
unsigned char)(t[j])>32) {
567 snprintf(nbuff,
sizeof(nbuff)-1,
"%i", col);
568 nbuff[
sizeof(nbuff)-1]=0;
576 bracket=strchr(vcol,
'[');
594 const char *delimiter;
621 const char *delimiters=
";\t,";
660 if (strchr(delimiters, *s))
680 while (name[i] && name[i]!=
'[' && i<size) {
686 DBG_INFO(0,
"Name too long (%d>=%d)", i, size);
698 while (name[i] && name[i]!=
']' && j<
sizeof(numbuffer)) {
699 numbuffer[j]=name[i];
703 if (j>=
sizeof(numbuffer)) {
704 DBG_INFO(0,
"Index number too long (%u>=%d)", j,
705 (
int)(
sizeof(numbuffer)));
GWEN_BUFFER * GWEN_Buffer_new(char *buffer, uint32_t size, uint32_t used, int take)
void GWEN_Buffer_Reset(GWEN_BUFFER *bf)
int GWEN_Buffer_AppendBytes(GWEN_BUFFER *bf, const char *buffer, uint32_t size)
void GWEN_Buffer_free(GWEN_BUFFER *bf)
char * GWEN_Buffer_GetStart(const GWEN_BUFFER *bf)
GWENHYWFAR_EXPORT GWEN_PLUGIN * dbio_csv_factory(GWEN_PLUGIN_MANAGER *pm, const char *modName, const char *fileName)
static int _readCsvLine(GWEN_FAST_BUFFER *fb, GWEN_STRINGLIST *sl)
static GWEN_DBIO_CHECKFILE_RESULT _csvCheckFile(GWEN_DBIO *dbio, const char *fname)
static int _csvImport(GWEN_DBIO *dbio, GWEN_SYNCIO *sio, GWEN_DB_NODE *data, GWEN_DB_NODE *cfg, uint32_t flags)
static int _csvExport(GWEN_DBIO *dbio, GWEN_SYNCIO *sio, GWEN_DB_NODE *data, GWEN_DB_NODE *cfg, uint32_t flags)
static int _getNameAndIndex(const char *name, char *buffer, unsigned int size)
static GWEN_STRINGLIST * _splitFixedWithStringIntoStringlist(const char *s, int condense, GWEN_DB_NODE *cfg)
static void _stringListToDb(GWEN_STRINGLIST *sl, GWEN_DB_NODE *colgr, GWEN_DB_NODE *dbData)
static GWEN_DBIO * _csvFactory(GWEN_PLUGIN *pl)
const char * GWEN_DB_GetCharValue(GWEN_DB_NODE *n, const char *path, int idx, const char *defVal)
int GWEN_DB_VariableExists(GWEN_DB_NODE *n, const char *path)
GWEN_DB_NODE * GWEN_DB_Group_new(const char *name)
const char * GWEN_DB_GroupName(GWEN_DB_NODE *n)
int GWEN_DB_AddGroup(GWEN_DB_NODE *n, GWEN_DB_NODE *nn)
GWEN_DB_NODE * GWEN_DB_GetGroup(GWEN_DB_NODE *n, uint32_t flags, const char *path)
GWEN_DB_NODE * GWEN_DB_GetFirstGroup(GWEN_DB_NODE *n)
int GWEN_DB_SetCharValue(GWEN_DB_NODE *n, uint32_t flags, const char *path, const char *val)
GWEN_DB_NODE_TYPE GWEN_DB_GetValueTypeByPath(GWEN_DB_NODE *n, const char *path, unsigned int i)
GWEN_DB_NODE * GWEN_DB_GetNextGroup(GWEN_DB_NODE *n)
int GWEN_DB_GetIntValue(GWEN_DB_NODE *n, const char *path, int idx, int defVal)
@ GWEN_DB_NodeType_ValueInt
@ GWEN_DB_NodeType_ValueChar
#define GWEN_DB_FLAGS_DEFAULT
struct GWEN_DB_NODE GWEN_DB_NODE
GWEN_PLUGIN * GWEN_DBIO_Plugin_new(GWEN_PLUGIN_MANAGER *pm, const char *name, const char *fileName)
void GWEN_DBIO_SetCheckFileFn(GWEN_DBIO *dbio, GWEN_DBIO_CHECKFILEFN f)
void GWEN_DBIO_SetImportFn(GWEN_DBIO *dbio, GWEN_DBIO_IMPORTFN f)
GWEN_DBIO * GWEN_DBIO_new(const char *name, const char *descr)
void GWEN_DBIO_Plugin_SetFactoryFn(GWEN_PLUGIN *pl, GWEN_DBIO_PLUGIN_FACTORYFN f)
void GWEN_DBIO_SetExportFn(GWEN_DBIO *dbio, GWEN_DBIO_EXPORTFN f)
GWEN_DBIO_CHECKFILE_RESULT
@ GWEN_DBIO_CheckFileResultUnknown
@ GWEN_DBIO_CheckFileResultNotOk
struct GWEN_DBIO GWEN_DBIO
#define DBG_DEBUG(dbg_logger, format, args...)
#define DBG_ERROR_ERR(dbg_logger, dbg_err)
#define DBG_VERBOUS(dbg_logger, format, args...)
#define DBG_INFO(dbg_logger, format, args...)
#define DBG_ERROR(dbg_logger, format, args...)
#define GWEN_ERROR_INVALID
#define GWEN_ERROR_GENERIC
void GWEN_FastBuffer_free(GWEN_FAST_BUFFER *fb)
GWEN_FAST_BUFFER * GWEN_FastBuffer_new(uint32_t bsize, GWEN_SYNCIO *io)
int GWEN_FastBuffer_ReadLineToBuffer(GWEN_FAST_BUFFER *fb, GWEN_BUFFER *buf)
#define GWEN_FASTBUFFER_WRITEBYTE(fb, var, chr)
#define GWEN_FASTBUFFER_FLUSH(fb, var)
#define GWEN_FASTBUFFER_WRITELINE(fb, var, p)
#define GWEN_FASTBUFFER_WRITEFORCED(fb, var, p, len)
struct GWEN_BUFFER GWEN_BUFFER
A dynamically resizeable text buffer.
#define GWENHYWFAR_EXPORT
#define GWEN_PATH_FLAGS_NAMEMUSTEXIST
struct GWEN_PLUGIN_MANAGER GWEN_PLUGIN_MANAGER
struct GWEN_PLUGIN GWEN_PLUGIN
void GWEN_StringList_free(GWEN_STRINGLIST *sl)
GWEN_STRINGLIST * GWEN_StringList_fromString2(const char *str, const char *delimiters, int checkDouble, uint32_t flags)
const char * GWEN_StringListEntry_Data(const GWEN_STRINGLISTENTRY *se)
GWEN_STRINGLISTENTRY * GWEN_StringListEntry_Next(const GWEN_STRINGLISTENTRY *se)
unsigned int GWEN_StringList_Count(const GWEN_STRINGLIST *sl)
int GWEN_StringList_AppendString(GWEN_STRINGLIST *sl, const char *s, int take, int checkDouble)
GWEN_STRINGLISTENTRY * GWEN_StringList_FirstEntry(const GWEN_STRINGLIST *sl)
GWEN_STRINGLIST * GWEN_StringList_new(void)
struct GWEN_STRINGLISTENTRYSTRUCT GWEN_STRINGLISTENTRY
struct GWEN_STRINGLISTSTRUCT GWEN_STRINGLIST
int GWEN_SyncIo_Connect(GWEN_SYNCIO *sio)
void GWEN_SyncIo_AddFlags(GWEN_SYNCIO *sio, uint32_t fl)
void GWEN_SyncIo_free(GWEN_SYNCIO *sio)
int GWEN_SyncIo_Disconnect(GWEN_SYNCIO *sio)
struct GWEN_SYNCIO GWEN_SYNCIO
@ GWEN_SyncIo_File_CreationMode_OpenExisting
GWENHYWFAR_API GWEN_SYNCIO * GWEN_SyncIo_File_new(const char *path, GWEN_SYNCIO_FILE_CREATIONMODE cm)
#define GWEN_SYNCIO_FILE_FLAGS_READ
int GWEN_Text_GetWordToBuffer(const char *src, const char *delims, GWEN_BUFFER *buf, uint32_t flags, const char **next)
int GWEN_Text_NumToString(int num, char *buffer, unsigned int bufsize, int fillchar)
#define GWEN_TEXT_FLAGS_DEL_LEADING_BLANKS
#define GWEN_TEXT_FLAGS_DEL_QUOTES
#define GWEN_TEXT_FLAGS_DEL_TRAILING_BLANKS
#define GWEN_TEXT_FLAGS_NULL_IS_DELIMITER