Read config file for fallback when no command line arguments are given.
This commit is contained in:
173
aqhome/aqhome.c
173
aqhome/aqhome.c
@@ -14,23 +14,125 @@
|
||||
|
||||
#include <gwenhywfar/gwenhywfar.h>
|
||||
#include <gwenhywfar/logger.h>
|
||||
#include <gwenhywfar/pathmanager.h>
|
||||
#include <gwenhywfar/debug.h>
|
||||
#include <gwenhywfar/i18n.h>
|
||||
|
||||
#include <stdlib.h>
|
||||
|
||||
|
||||
|
||||
#define AQHOME_PM_LIBNAME "aqhome"
|
||||
#define AQHOME_PM_SYSCONFDIR "sysconfdir"
|
||||
#define AQHOME_PM_DATADIR "datadir"
|
||||
#define AQHOME_PM_LOCALEDIR "localedir"
|
||||
|
||||
int AQH_Init()
|
||||
#define AQHOME_SYSCONFIG_FILE "aqhome.conf"
|
||||
|
||||
|
||||
|
||||
static void _initLogging(void);
|
||||
static void _finiLogging(void);
|
||||
static void _initPathManager(void);
|
||||
static void _finiPathManager(void);
|
||||
static void _initI18n(void);
|
||||
static void _definePath(const char *pathName, const char *pathValue);
|
||||
|
||||
|
||||
|
||||
int AQH_Init(void)
|
||||
{
|
||||
int rv;
|
||||
const char *s;
|
||||
|
||||
rv=GWEN_Init();
|
||||
if (rv) {
|
||||
DBG_ERROR_ERR(AQH_LOGDOMAIN, rv);
|
||||
return rv;
|
||||
}
|
||||
|
||||
_initLogging();
|
||||
_initPathManager();
|
||||
_initI18n();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
void AQH_Fini(void)
|
||||
{
|
||||
_finiPathManager();
|
||||
_finiLogging();
|
||||
|
||||
GWEN_Fini();
|
||||
}
|
||||
|
||||
|
||||
|
||||
GWEN_STRINGLIST *AQH_GetGlobalDataDirs(void)
|
||||
{
|
||||
return GWEN_PathManager_GetPaths(AQHOME_PM_LIBNAME, AQHOME_PM_DATADIR);
|
||||
}
|
||||
|
||||
|
||||
|
||||
GWEN_STRINGLIST *AQH_GetGlobalSysconfDirs(void)
|
||||
{
|
||||
return GWEN_PathManager_GetPaths(AQHOME_PM_LIBNAME, AQHOME_PM_SYSCONFDIR);
|
||||
}
|
||||
|
||||
|
||||
|
||||
GWEN_DB_NODE *AQH_LoadConfigFile(void)
|
||||
{
|
||||
GWEN_BUFFER *fbuf;
|
||||
int rv;
|
||||
|
||||
fbuf=GWEN_Buffer_new(0, 256, 0, 1);
|
||||
rv=GWEN_PathManager_FindFile(AQHOME_PM_LIBNAME, AQHOME_PM_SYSCONFDIR, AQHOME_SYSCONFIG_FILE, fbuf);
|
||||
if (rv<0) {
|
||||
DBG_INFO(AQH_LOGDOMAIN, "Config file \"%s\" not found (%d)", AQHOME_SYSCONFIG_FILE, rv);
|
||||
GWEN_Buffer_free(fbuf);
|
||||
return NULL;
|
||||
}
|
||||
else {
|
||||
GWEN_DB_NODE *db;
|
||||
|
||||
db=GWEN_DB_Group_new("aqhome-config");
|
||||
rv=GWEN_DB_ReadFile(db, GWEN_Buffer_GetStart(fbuf), GWEN_DB_FLAGS_DEFAULT);
|
||||
if (rv<0) {
|
||||
DBG_INFO(AQH_LOGDOMAIN, "Error reading config file \"%s\" (%d)", AQHOME_SYSCONFIG_FILE, rv);
|
||||
GWEN_Buffer_free(fbuf);
|
||||
GWEN_DB_Group_free(db);
|
||||
return NULL;
|
||||
}
|
||||
GWEN_Buffer_free(fbuf);
|
||||
return db;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
void AQH_MergeConfigFileIntoConfig(GWEN_DB_NODE *dbArgs, const char *destDbGroupName)
|
||||
{
|
||||
GWEN_DB_NODE *dbConfig;
|
||||
|
||||
dbConfig=AQH_LoadConfigFile();
|
||||
if (dbConfig) {
|
||||
GWEN_DB_GroupRename(dbConfig, destDbGroupName);
|
||||
GWEN_DB_AddGroup(dbArgs, dbConfig);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
void _initLogging(void)
|
||||
{
|
||||
const char *s;
|
||||
|
||||
if (!GWEN_Logger_IsOpen(AQH_LOGDOMAIN))
|
||||
GWEN_Logger_Open(AQH_LOGDOMAIN, "aqhome", 0, GWEN_LoggerType_Console, GWEN_LoggerFacility_User);
|
||||
|
||||
@@ -43,19 +145,76 @@ int AQH_Init()
|
||||
}
|
||||
else
|
||||
GWEN_Logger_SetLevel(AQH_LOGDOMAIN, GWEN_LoggerLevel_Notice);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
int AQH_Fini()
|
||||
void _finiLogging(void)
|
||||
{
|
||||
GWEN_Logger_Close(AQH_LOGDOMAIN);
|
||||
GWEN_Fini();
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
void _initPathManager(void)
|
||||
{
|
||||
_definePath(AQHOME_PM_SYSCONFDIR, AQHOME_SYSCONF_DIR);
|
||||
_definePath(AQHOME_PM_LOCALEDIR, AQHOME_SYSCONF_DIR);
|
||||
_definePath(AQHOME_PM_DATADIR, AQHOME_DATA_DIR);
|
||||
}
|
||||
|
||||
|
||||
|
||||
void _finiPathManager(void)
|
||||
{
|
||||
GWEN_PathManager_UndefinePath(AQHOME_PM_LIBNAME, AQHOME_PM_LOCALEDIR);
|
||||
GWEN_PathManager_UndefinePath(AQHOME_PM_LIBNAME, AQHOME_PM_DATADIR);
|
||||
GWEN_PathManager_UndefinePath(AQHOME_PM_LIBNAME, AQHOME_PM_SYSCONFDIR);
|
||||
GWEN_PathManager_RemovePaths(AQHOME_PM_LIBNAME);
|
||||
}
|
||||
|
||||
|
||||
|
||||
void _initI18n(void)
|
||||
{
|
||||
GWEN_STRINGLIST *sl;
|
||||
|
||||
sl=GWEN_PathManager_GetPaths(AQHOME_PM_LIBNAME, AQHOME_PM_LOCALEDIR);
|
||||
if (sl) {
|
||||
const char *localedir;
|
||||
int rv;
|
||||
|
||||
localedir=GWEN_StringList_FirstString(sl);
|
||||
|
||||
rv=GWEN_I18N_BindTextDomain_Dir(PACKAGE, localedir);
|
||||
if (rv) {
|
||||
DBG_ERROR(AQH_LOGDOMAIN, "Could not bind textdomain (%d)", rv);
|
||||
}
|
||||
else {
|
||||
rv=GWEN_I18N_BindTextDomain_Codeset(PACKAGE, "UTF-8");
|
||||
if (rv) {
|
||||
DBG_ERROR(AQH_LOGDOMAIN, "Could not set codeset (%d)", rv);
|
||||
}
|
||||
}
|
||||
|
||||
GWEN_StringList_free(sl);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
void _definePath(const char *pathName, const char *pathValue)
|
||||
{
|
||||
/* define sysconf paths */
|
||||
GWEN_PathManager_DefinePath(AQHOME_PM_LIBNAME, pathName);
|
||||
#if defined(OS_WIN32) || defined(ENABLE_LOCAL_INSTALL)
|
||||
/* add folder relative to EXE */
|
||||
GWEN_PathManager_AddRelPath(AQHOME_PM_LIBNAME, AQHOME_PM_LIBNAME, pathName, pathValue, GWEN_PathManager_RelModeExe);
|
||||
#else
|
||||
/* add absolute folder */
|
||||
GWEN_PathManager_AddPath(AQHOME_PM_LIBNAME, AQHOME_PM_LIBNAME, pathName, pathValue);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user