[host] search the applications local directory for the config

This commit is contained in:
Geoffrey McRae 2020-05-30 12:31:26 +10:00
parent fcbdf7ba4f
commit 67dec216d2
5 changed files with 51 additions and 3 deletions

View file

@ -1 +1 @@
B2-rc2-7-ge8c949c1e7+1
B2-rc2-8-gfcbdf7ba4f+1

View file

@ -27,3 +27,4 @@ void app_quit();
// these must be implemented for each OS
const char * os_getExecutable();
const char * os_getDataPath();

View file

@ -30,6 +30,7 @@ Place, Suite 330, Boston, MA 02111-1307 USA
struct app
{
const char * executable;
char * dataPath;
};
struct app app = { 0 };
@ -37,7 +38,13 @@ struct app app = { 0 };
int main(int argc, char * argv[])
{
app.executable = argv[0];
struct passwd * pw = getpwuid(getuid());
alloc_sprintf(&app.dataPath, "%s/", pw->pw_dir);
int result = app_main(argc, argv);
free(app.dataPath);
return result;
}
@ -56,4 +63,9 @@ bool app_init()
const char * os_getExecutable()
{
return app.executable;
}
}
const char * os_getDataPath()
{
return app.dataPath;
}

View file

@ -303,6 +303,24 @@ const char * os_getExecutable()
return app.executable;
}
const char * os_getDataPath()
{
static char path[MAX_PATH] = { 0 };
if (!path[0])
{
if (!GetModuleFileName(NULL, path, MAX_PATH))
return NULL;
char *p = strrchr(path, '\\');
if (!p)
return NULL;
++p;
*p = '\0';
}
return path;
}
HWND os_getMessageWnd()
{
return app.messageWnd;

View file

@ -38,6 +38,8 @@ Place, Suite 330, Boston, MA 02111-1307 USA
#include <stdlib.h>
#include <string.h>
#define CONFIG_FILE "looking-glass-host.ini"
#define ALIGN_DN(x) ((uintptr_t)(x) & ~0x7F)
#define ALIGN_UP(x) ALIGN_DN(x + 0x7F)
@ -400,7 +402,22 @@ int app_main(int argc, char * argv[])
CaptureInterfaces[i]->initOptions();
// try load values from a config file
option_load("looking-glass-host.ini");
const char * dataPath = os_getDataPath();
if (!dataPath)
{
option_free();
DEBUG_ERROR("Failed to get the application's data path");
return -1;
}
const size_t len = strlen(dataPath) + sizeof(CONFIG_FILE) + 1;
char configFile[len];
snprintf(configFile, sizeof(configFile), "%s%s", dataPath, CONFIG_FILE);
DEBUG_INFO("Looking for configuration file at: %s", configFile);
if (option_load(configFile))
DEBUG_INFO("Configuration file loaded");
else
DEBUG_INFO("Configuration file not found or invalid");
// parse the command line arguments
if (!option_parse(argc, argv))