Read config file for fallback when no command line arguments are given.

This commit is contained in:
Martin Preuss
2023-10-03 16:51:15 +02:00
parent 0740378ad8
commit 831c94f898
24 changed files with 324 additions and 34 deletions

View File

@@ -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
}