diff options
author | Scott Murray <scott.murray@konsulko.com> | 2018-12-18 12:43:42 -0500 |
---|---|---|
committer | Scott Murray <scott.murray@konsulko.com> | 2019-01-17 21:24:17 +0000 |
commit | a33cbe3e083318a4f48d44a645ee24447536e3a6 (patch) | |
tree | b3603fa28b97b9ccd9989365747a107268cdcaa1 /src/util.cpp | |
parent | 1d0966212b15c0481b506ba35374935601b0c861 (diff) |
Add configuration file over-ride mechanismhalibut_7.90.0halibut/7.90.0guppy_6.99.4guppy/6.99.47.90.06.99.4
Reusing the windowmanager on the cluster demo platform requires
modifications to the layers.json, areas.json, etc. configuration files.
To allow this without breaking potential shared package feeds by
building two versions, add a mechanism to allow over-riding the
configuration files present in the widget with files in the directory
/etc/xdg/windowmanager. Affected code has been refactored to use a new
common configuration file path determination helper function to reduce
duplication.
Cherry-picked from flounder branch with rework to accommodate changes
in master branch.
Bug-AGL: SPEC-1805
Change-Id: Ib0014756fe684167950ddac534ea2363a1b6e7c3
Signed-off-by: Scott Murray <scott.murray@konsulko.com>
Diffstat (limited to 'src/util.cpp')
-rw-r--r-- | src/util.cpp | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/src/util.cpp b/src/util.cpp index eb6425d..f26a4a1 100644 --- a/src/util.cpp +++ b/src/util.cpp @@ -1,5 +1,6 @@ /* * Copyright (c) 2017 TOYOTA MOTOR CORPORATION + * Copyright (c) 2018 Konsulko Group * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -20,6 +21,7 @@ #include <stdio.h> #include <stdarg.h> #include <stdlib.h> +#include <fstream> #include <unistd.h> @@ -140,3 +142,37 @@ void _DUMP(enum LOG_LEVEL level, const char *log, ...) va_end(args); free(message); } + +std::string get_file_path(const char *file_name, const char *root_path) +{ + char const *default_base_path = root_path; + std::string path(""); + + if(!file_name) { + return path; + } + + if (!default_base_path) { + default_base_path = getenv("AFM_APP_INSTALL_DIR"); + if (!default_base_path) { + HMI_ERROR("AFM_APP_INSTALL_DIR is not defined"); + } + } + if (default_base_path) { + path = default_base_path; + path.append("/etc/"); + path.append(file_name); + } + + // Check for over-ride in /etc/xdg/windowmanager + std::string override_path("/etc/xdg/windowmanager/"); + override_path.append(file_name); + std::ifstream i(override_path); + if (i.good()) { + path = override_path; + } + i.close(); + + HMI_INFO("Using %s", path.c_str()); + return path; +} |