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> 90 GWEN_CONFIGMGR_DIR *xcfg;
112 if (*s!=
'/' && *s!=
'\\' 113 && !(isalpha(s[0]) && s[1] ==
':' 114 && (s[2] ==
'/' || s[2] ==
'\\'))) {
136 GWEN_CONFIGMGR_DIR *xcfg;
138 xcfg=(GWEN_CONFIGMGR_DIR *) p;
165 const char *groupName,
168 GWEN_CONFIGMGR_DIR *xcfg;
180 assert(xcfg->folder);
202 "Could not lock group [%s]: %d",
214 if (1!=fscanf(f,
"%d", &i))
232 fprintf(f,
"%d", (
int)uniqueId);
254 const char *groupName,
257 GWEN_CONFIGMGR_DIR *xcfg;
269 assert(xcfg->folder);
291 "Could not lock group [%s]: %d",
303 if (1!=fscanf(f,
"%d", &i))
322 fprintf(f,
"%d", (
int)uniqueId);
343 const char *groupName,
346 GWEN_CONFIGMGR_DIR *xcfg;
354 assert(xcfg->folder);
372 const char *groupName,
373 const char *subGroupName,
376 GWEN_CONFIGMGR_DIR *xcfg;
384 assert(xcfg->folder);
386 assert(subGroupName);
408 GWEN_CONFIGMGR_DIR *xcfg;
431 const char *groupName,
432 const char *subGroupName,
436 GWEN_CONFIGMGR_DIR *xcfg;
479 const char *groupName,
480 const char *subGroupName,
484 GWEN_CONFIGMGR_DIR *xcfg;
508 "Group [%s/%s] is not locked",
509 groupName, subGroupName);
531 const char *groupName,
532 const char *subGroupName)
535 GWEN_CONFIGMGR_DIR *xcfg;
563 const char *groupName,
564 const char *subGroupName)
567 GWEN_CONFIGMGR_DIR *xcfg;
592 "Group [%s/%s] is already locked",
593 groupName, subGroupName);
602 "Could not lock group [%s/%s]: %d",
603 groupName, subGroupName, res);
617 const char *groupName,
618 const char *subGroupName)
621 GWEN_CONFIGMGR_DIR *xcfg;
635 "Group [%s/%s] is not locked",
636 groupName, subGroupName);
644 "Could not unlock group [%s/%s]: %d",
645 groupName, subGroupName, res);
662 const char *groupName,
666 GWEN_CONFIGMGR_DIR *xcfg;
680 snprintf(ubuf,
sizeof(ubuf)-1,
"uid::%08x", uid);
681 ubuf[
sizeof(ubuf)-1]=0;
684 strncpy(buffer, ubuf, bufferLen-1);
685 buffer[bufferLen-1]=0;
693 const char *groupName,
699 GWEN_CONFIGMGR_DIR *xcfg;
707 rv=snprintf(ubuf,
sizeof(ubuf)-1,
"%08x", uid);
708 if (rv>=
sizeof(ubuf)-1) {
746 strncpy(buffer, ubuf, bufferLen-1);
747 buffer[bufferLen-1]=0;
755 const char *groupName,
756 const char *subGroupName)
759 GWEN_CONFIGMGR_DIR *xcfg;
784 "Group [%s/%s] is still locked",
785 groupName, subGroupName);
794 "Could not lock group [%s/%s]: %d",
795 groupName, subGroupName, res);
815 GWEN_CONFIGMGR_DIR *xcfg;
822 assert(xcfg->folder);
836 const char *groupName,
840 GWEN_CONFIGMGR_DIR *xcfg;
880 buffer[
sizeof(buffer)-1]=0;
881 p=strrchr(buffer,
'.');
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
int GWENHYWFAR_CB GWEN_ConfigMgrDir_DeleteGroup(GWEN_CONFIGMGR *cfg, const char *groupName, const char *subGroupName)
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
GWEN_CONFIGMGR_DELETEGROUP_FN GWEN_ConfigMgr_SetDeleteGroupFn(GWEN_CONFIGMGR *mgr, GWEN_CONFIGMGR_DELETEGROUP_FN f)
int GWENHYWFAR_CB GWEN_ConfigMgrDir_GetGroup(GWEN_CONFIGMGR *cfg, const char *groupName, const char *subGroupName, GWEN_DB_NODE **pDb)
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
GWEN_CONFIGMGR_GETGROUP_FN GWEN_ConfigMgr_SetGetGroupFn(GWEN_CONFIGMGR *mgr, GWEN_CONFIGMGR_GETGROUP_FN f)
int GWENHYWFAR_CB GWEN_ConfigMgrDir_ListGroups(GWEN_CONFIGMGR *cfg, GWEN_STRINGLIST *sl)
#define DBG_WARN(dbg_logger, format, args...)
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)
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)
int GWENHYWFAR_CB GWEN_ConfigMgrDir_SetGroup(GWEN_CONFIGMGR *cfg, const char *groupName, const char *subGroupName, GWEN_DB_NODE *db)
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)
GWENHYWFAR_API GWEN_FSLOCK * GWEN_FSLock_new(const char *fname, GWEN_FSLOCK_TYPE t)
int GWENHYWFAR_CB GWEN_ConfigMgrDir_LockGroup(GWEN_CONFIGMGR *cfg, const char *groupName, const char *subGroupName)
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)
int GWENHYWFAR_CB GWEN_ConfigMgrDir_HasGroup(GWEN_CONFIGMGR *cfg, const char *groupName, const char *subGroupName)
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)
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...)
int GWENHYWFAR_CB GWEN_ConfigMgrDir_UnlockGroup(GWEN_CONFIGMGR *cfg, const char *groupName, const char *subGroupName)
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)
int GWENHYWFAR_CB GWEN_ConfigMgrDir_GetUniqueId(GWEN_CONFIGMGR *cfg, const char *groupName, char *buffer, uint32_t bufferLen)
#define GWEN_INHERIT(bt, t)
GWENHYWFAR_API int GWEN_DB_WriteFile(GWEN_DB_NODE *n, const char *fname, uint32_t dbflags)
#define GWEN_ERROR_INTERNAL
GWENHYWFAR_API GWEN_FSLOCK_RESULT GWEN_FSLock_Unlock(GWEN_FSLOCK *fl)
int GWENHYWFAR_CB GWEN_ConfigMgrDir_ListSubGroups(GWEN_CONFIGMGR *cfg, const char *groupName, GWEN_STRINGLIST *sl)
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)
#define GWEN_INHERIT_SETDATA(bt, t, element, data, fn)
int GWENHYWFAR_CB GWEN_ConfigMgrDir_MkUniqueIdFromId(GWEN_CONFIGMGR *cfg, const char *groupName, uint32_t uid, int doCheck, char *buffer, uint32_t bufferLen)
GWEN_STRINGLIST * GWEN_StringList_new(void)
GWEN_CONFIGMGR_HASGROUP_FN GWEN_ConfigMgr_SetHasGroupFn(GWEN_CONFIGMGR *mgr, GWEN_CONFIGMGR_HASGROUP_FN f)
#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