32 #include <gwenhywfar/debug.h>
33 #include <gwenhywfar/misc.h>
34 #include <gwenhywfar/text.h>
35 #include <gwenhywfar/directory.h>
36 #include <gwenhywfar/urlfns.h>
70 const char *fileName) {
86 GWEN_CONFIGMGR_DIR *xcfg;
108 if (*s!=
'/' && *s!=
'\\'
109 && !(isalpha(s[0]) && s[1] ==
':'
110 && (s[2] ==
'/' || s[2] ==
'\\'))) {
131 GWEN_CONFIGMGR_DIR *xcfg;
133 xcfg=(GWEN_CONFIGMGR_DIR*) p;
160 const char *groupName,
161 uint32_t *pUniqueId){
162 GWEN_CONFIGMGR_DIR *xcfg;
174 assert(xcfg->folder);
196 "Could not lock group [%s]: %d",
208 if (1!=fscanf(f,
"%d", &i))
226 fprintf(f,
"%d", (
int)uniqueId);
248 const char *groupName,
250 GWEN_CONFIGMGR_DIR *xcfg;
262 assert(xcfg->folder);
284 "Could not lock group [%s]: %d",
296 if (1!=fscanf(f,
"%d", &i))
315 fprintf(f,
"%d", (
int)uniqueId);
336 const char *groupName,
338 GWEN_CONFIGMGR_DIR *xcfg;
346 assert(xcfg->folder);
364 const char *groupName,
365 const char *subGroupName,
367 GWEN_CONFIGMGR_DIR *xcfg;
375 assert(xcfg->folder);
377 assert(subGroupName);
398 GWEN_CONFIGMGR_DIR *xcfg;
421 const char *groupName,
422 const char *subGroupName,
425 GWEN_CONFIGMGR_DIR *xcfg;
468 const char *groupName,
469 const char *subGroupName,
472 GWEN_CONFIGMGR_DIR *xcfg;
496 "Group [%s/%s] is not locked",
497 groupName, subGroupName);
519 const char *groupName,
520 const char *subGroupName) {
522 GWEN_CONFIGMGR_DIR *xcfg;
547 "Group [%s/%s] is already locked",
548 groupName, subGroupName);
557 "Could not lock group [%s/%s]: %d",
558 groupName, subGroupName, res);
572 const char *groupName,
573 const char *subGroupName) {
575 GWEN_CONFIGMGR_DIR *xcfg;
589 "Group [%s/%s] is not locked",
590 groupName, subGroupName);
598 "Could not unlock group [%s/%s]: %d",
599 groupName, subGroupName, res);
616 const char *groupName,
618 uint32_t bufferLen) {
619 GWEN_CONFIGMGR_DIR *xcfg;
633 snprintf(ubuf,
sizeof(ubuf)-1,
"uid::%08x", uid);
634 ubuf[
sizeof(ubuf)-1]=0;
637 strncpy(buffer, ubuf, bufferLen-1);
638 buffer[bufferLen-1]=0;
646 const char *groupName,
650 uint32_t bufferLen) {
651 GWEN_CONFIGMGR_DIR *xcfg;
659 snprintf(ubuf,
sizeof(ubuf)-1,
"%08x", uid);
660 ubuf[
sizeof(ubuf)-1]=0;
690 strncpy(buffer, ubuf, bufferLen-1);
691 buffer[bufferLen-1]=0;
699 const char *groupName,
700 const char *subGroupName) {
702 GWEN_CONFIGMGR_DIR *xcfg;
727 "Group [%s/%s] is still locked",
728 groupName, subGroupName);
737 "Could not lock group [%s/%s]: %d",
738 groupName, subGroupName, res);
757 GWEN_CONFIGMGR_DIR *xcfg;
764 assert(xcfg->folder);
778 const char *groupName,
781 GWEN_CONFIGMGR_DIR *xcfg;
821 buffer[
sizeof(buffer)-1]=0;
822 p=strrchr(buffer,
'.');
int GWEN_ConfigMgrDir_DeleteGroup(GWEN_CONFIGMGR *cfg, const char *groupName, const char *subGroupName)
GWEN_FSLOCK * GWEN_ConfigMgrDir_FindLock(GWEN_CONFIGMGR *cfg, const char *fname)
void GWEN_Url_free(GWEN_URL *st)
struct GWEN_CONFIGMGR GWEN_CONFIGMGR
GWENHYWFAR_API void GWEN_FSLock_free(GWEN_FSLOCK *fl)
struct GWEN_PLUGIN_MANAGER GWEN_PLUGIN_MANAGER
char * GWEN_Buffer_GetStart(const GWEN_BUFFER *bf)
struct GWEN_STRINGLISTENTRYSTRUCT GWEN_STRINGLISTENTRY
struct GWEN_DB_NODE GWEN_DB_NODE
struct GWEN_PLUGIN GWEN_PLUGIN
void GWEN_DB_Group_free(GWEN_DB_NODE *n)
GWENHYWFAR_CB void GWEN_ConfigMgrDir_FreeData(GWEN_UNUSED void *bp, void *p)
#define GWEN_DIR_SEPARATOR_S
int GWEN_ConfigMgrDir_GetUniqueId(GWEN_CONFIGMGR *cfg, const char *groupName, char *buffer, uint32_t bufferLen)
int GWEN_ConfigMgrDir_ListGroups(GWEN_CONFIGMGR *cfg, GWEN_STRINGLIST *sl)
GWEN_CONFIGMGR_DELETEGROUP_FN GWEN_ConfigMgr_SetDeleteGroupFn(GWEN_CONFIGMGR *mgr, GWEN_CONFIGMGR_DELETEGROUP_FN f)
GWEN_CONFIGMGR * GWEN_ConfigMgr_new(const char *url)
void GWEN_ConfigMgrDir_AddGroupFileName(GWEN_CONFIGMGR *cfg, const char *groupName, const char *subGroupName, GWEN_BUFFER *nbuf)
#define GWEN_FREE_OBJECT(varname)
#define GWEN_PATH_FLAGS_CREATE_GROUP
int GWEN_ConfigMgrDir_ListSubGroups(GWEN_CONFIGMGR *cfg, const char *groupName, GWEN_STRINGLIST *sl)
GWEN_CONFIGMGR_GETGROUP_FN GWEN_ConfigMgr_SetGetGroupFn(GWEN_CONFIGMGR *mgr, GWEN_CONFIGMGR_GETGROUP_FN f)
#define DBG_WARN(dbg_logger, format, args...)
int GWEN_ConfigMgrDir_GetGroup(GWEN_CONFIGMGR *cfg, const char *groupName, const char *subGroupName, GWEN_DB_NODE **pDb)
void GWEN_FSLock_List_free(GWEN_FSLOCK_LIST *l)
void GWEN_ConfigMgr_free(GWEN_CONFIGMGR *mgr)
void GWEN_ConfigMgrDir_AddGroupDirName(GWEN_CONFIGMGR *cfg, const char *groupName, GWEN_BUFFER *nbuf)
GWEN_FSLOCK_LIST * GWEN_FSLock_List_new()
uint32_t GWEN_Buffer_GetPos(const GWEN_BUFFER *bf)
GWEN_BUFFER * GWEN_Buffer_new(char *buffer, uint32_t size, uint32_t used, int take)
int GWEN_ConfigMgrDir_LockGroup(GWEN_CONFIGMGR *cfg, const char *groupName, const char *subGroupName)
GWEN_STRINGLISTENTRY * GWEN_StringList_FirstEntry(const GWEN_STRINGLIST *sl)
void GWEN_Buffer_Reset(GWEN_BUFFER *bf)
const char * GWEN_StringListEntry_Data(const GWEN_STRINGLISTENTRY *se)
GWEN_CONFIGMGR * GWEN_ConfigMgrDir_new(const char *url)
GWEN_PLUGIN * configmgr_dir_factory(GWEN_PLUGIN_MANAGER *pm, const char *modName, const char *fileName)
void GWEN_StringList_free(GWEN_STRINGLIST *sl)
GWEN_CONFIGMGR * GWEN_ConfigMgrDir_Factory(GWEN_UNUSED GWEN_PLUGIN *pl, const char *url)
GWEN_FSLOCK * GWEN_FSLock_List_First(const GWEN_FSLOCK_LIST *l)
#define GWEN_NEW_OBJECT(typ, varname)
int GWEN_ConfigMgrDir_MkUniqueIdFromId(GWEN_CONFIGMGR *cfg, const char *groupName, uint32_t uid, int doCheck, char *buffer, uint32_t bufferLen)
GWENHYWFAR_API GWEN_FSLOCK * GWEN_FSLock_new(const char *fname, GWEN_FSLOCK_TYPE t)
int GWEN_StringList_AppendString(GWEN_STRINGLIST *sl, const char *s, int take, int checkDouble)
GWEN_CONFIGMGR_GETUNIQUEID_FN GWEN_ConfigMgr_SetGetUniqueIdFn(GWEN_CONFIGMGR *mgr, GWEN_CONFIGMGR_GETUNIQUEID_FN f)
GWEN_CONFIGMGR_MKUNIQUEIDFROMID_FN GWEN_ConfigMgr_SetMkUniqueIdFromIdFn(GWEN_CONFIGMGR *mgr, GWEN_CONFIGMGR_MKUNIQUEIDFROMID_FN f)
#define GWEN_PATH_FLAGS_VARIABLE
int GWEN_Text_EscapeToBuffer(const char *src, GWEN_BUFFER *buf)
int GWEN_ConfigMgrDir__UpdateLastUniqueId(GWEN_CONFIGMGR *cfg, const char *groupName, uint32_t uid)
struct GWEN_STRINGLISTSTRUCT GWEN_STRINGLIST
GWEN_CONFIGMGR_UNLOCKGROUP_FN GWEN_ConfigMgr_SetUnlockGroupFn(GWEN_CONFIGMGR *mgr, GWEN_CONFIGMGR_UNLOCKGROUP_FN f)
void GWEN_ConfigMgr_Plugin_SetFactoryFn(GWEN_PLUGIN *pl, GWEN_CONFIGMGR_PLUGIN_FACTORYFN f)
GWENHYWFAR_API GWEN_FSLOCK_RESULT GWEN_FSLock_Lock(GWEN_FSLOCK *fl, int timeout, uint32_t gid)
GWENHYWFAR_API int GWEN_Directory_GetDirEntries(const char *folder, GWEN_STRINGLIST *sl, const char *mask)
void GWEN_Buffer_free(GWEN_BUFFER *bf)
struct GWEN_BUFFER GWEN_BUFFER
A dynamically resizeable text buffer.
const char * GWEN_Url_GetServer(const GWEN_URL *st)
int GWEN_Text_UnescapeToBuffer(const char *src, GWEN_BUFFER *buf)
void GWEN_FSLock_List_Del(GWEN_FSLOCK *element)
#define GWEN_PATH_FLAGS_CHECKROOT
GWEN_PLUGIN * GWEN_ConfigMgr_Plugin_new(GWEN_PLUGIN_MANAGER *pm, const char *name, const char *fileName)
int GWEN_ConfigMgrDir__GetUniqueId(GWEN_CONFIGMGR *cfg, const char *groupName, uint32_t *pUniqueId)
#define DBG_ERROR(dbg_logger, format, args...)
GWEN_FSLOCK * GWEN_FSLock_List_Next(const GWEN_FSLOCK *element)
GWEN_URL * GWEN_Url_fromString(const char *str)
void GWEN_FSLock_List_Add(GWEN_FSLOCK *element, GWEN_FSLOCK_LIST *list)
int GWEN_ConfigMgrDir_UnlockGroup(GWEN_CONFIGMGR *cfg, const char *groupName, const char *subGroupName)
GWEN_STRINGLISTENTRY * GWEN_StringListEntry_Next(const GWEN_STRINGLISTENTRY *se)
#define GWEN_PATH_FLAGS_PATHMUSTEXIST
GWEN_CONFIGMGR_LOCKGROUP_FN GWEN_ConfigMgr_SetLockGroupFn(GWEN_CONFIGMGR *mgr, GWEN_CONFIGMGR_LOCKGROUP_FN f)
#define DBG_INFO(dbg_logger, format, args...)
GWENHYWFAR_API int GWEN_Directory_GetPath(const char *path, unsigned int flags)
GWEN_CONFIGMGR_LISTSUBGROUPS_FN GWEN_ConfigMgr_SetListSubGroupsFn(GWEN_CONFIGMGR *mgr, GWEN_CONFIGMGR_LISTSUBGROUPS_FN f)
GWENHYWFAR_API int GWEN_DB_ReadFile(GWEN_DB_NODE *n, const char *fname, uint32_t dbflags)
GWENHYWFAR_API const char * GWEN_FSLock_GetName(const GWEN_FSLOCK *fl)
struct GWEN_FSLOCK GWEN_FSLOCK
GWEN_DB_NODE * GWEN_DB_Group_new(const char *name)
GWENHYWFAR_API int GWEN_Directory_GetFileEntries(const char *folder, GWEN_STRINGLIST *sl, const char *mask)
GWEN_CONFIGMGR_SETGROUP_FN GWEN_ConfigMgr_SetSetGroupFn(GWEN_CONFIGMGR *mgr, GWEN_CONFIGMGR_SETGROUP_FN f)
#define GWEN_INHERIT(bt, t)
GWENHYWFAR_API int GWEN_DB_WriteFile(GWEN_DB_NODE *n, const char *fname, uint32_t dbflags)
GWENHYWFAR_API GWEN_FSLOCK_RESULT GWEN_FSLock_Unlock(GWEN_FSLOCK *fl)
GWEN_CONFIGMGR_LISTGROUPS_FN GWEN_ConfigMgr_SetListGroupsFn(GWEN_CONFIGMGR *mgr, GWEN_CONFIGMGR_LISTGROUPS_FN f)
uint32_t GWEN_FSLock_List_GetCount(const GWEN_FSLOCK_LIST *l)
int GWEN_ConfigMgrDir_SetGroup(GWEN_CONFIGMGR *cfg, const char *groupName, const char *subGroupName, GWEN_DB_NODE *db)
#define GWEN_INHERIT_SETDATA(bt, t, element, data, fn)
GWEN_STRINGLIST * GWEN_StringList_new(void)
#define GWEN_PATH_FLAGS_NAMEMUSTEXIST
const char * GWEN_Url_GetPath(const GWEN_URL *st)
int GWEN_Buffer_AppendString(GWEN_BUFFER *bf, const char *buffer)
#define GWEN_DB_FLAGS_DEFAULT
#define GWEN_INHERIT_GETDATA(bt, t, element)
#define GWEN_DB_FLAGS_ALLOW_EMPTY_STREAM