config: include: add support for ~-expansion

Closes #659
This commit is contained in:
Daniel Eklöf 2021-07-30 14:44:16 +02:00
parent 46d30406be
commit 02f0e0d912
No known key found for this signature in database
GPG key ID: 5BBD4992C116573F
2 changed files with 17 additions and 1 deletions

View file

@ -35,6 +35,8 @@
* Window title in the CSDs
(https://codeberg.org/dnkl/foot/issues/638).
* `-Ddocs=disabled|enabled|auto` meson command line option.
* Support for `~`-expansion in the `include` directive
(https://codeberg.org/dnkl/foot/issues/659).
### Changed

View file

@ -644,12 +644,24 @@ parse_section_main(const char *key, const char *value, struct config *conf,
const char *path, unsigned lineno, bool errors_are_fatal)
{
if (strcmp(key, "include") == 0) {
const char *include_path = value;
char *_include_path = NULL;
const char *include_path = NULL;
if (value[0] == '~' && value[1] == '/') {
const char *home_dir = get_user_home_dir();
int chars = snprintf(NULL, 0, "%s/%s", home_dir, &value[2]);
_include_path = malloc(chars + 1);
snprintf(_include_path, chars + 1, "%s/%s", home_dir, &value[2]);
include_path = _include_path;
} else
include_path = value;
if (include_path[0] != '/') {
LOG_AND_NOTIFY_ERR(
"%s:%d: [default]: %s: not an absolute path",
path, lineno, include_path);
free(_include_path);
return false;
}
@ -659,6 +671,7 @@ parse_section_main(const char *key, const char *value, struct config *conf,
LOG_AND_NOTIFY_ERRNO(
"%s:%d: [default]: %s: failed to open",
path, lineno, include_path);
free(_include_path);
return false;
}
@ -667,6 +680,7 @@ parse_section_main(const char *key, const char *value, struct config *conf,
fclose(include);
LOG_INFO("imported sub-configuration from %s", include_path);
free(_include_path);
return ret;
}