diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/blogc-make/settings.c | 33 | 
1 files changed, 25 insertions, 8 deletions
| diff --git a/src/blogc-make/settings.c b/src/blogc-make/settings.c index 8ee4c64..0e80807 100644 --- a/src/blogc-make/settings.c +++ b/src/blogc-make/settings.c @@ -58,7 +58,7 @@ static const struct default_settings_map {  }; -static const char* required_environment[] = { +static const char* required_global[] = {      "AUTHOR_NAME",      "AUTHOR_EMAIL",      "SITE_TITLE", @@ -100,13 +100,30 @@ bm_settings_parse(const char *content, size_t content_len, bc_error_t **err)      rv->copy = NULL;      rv->tags = NULL; -    char **env = bc_config_list_keys(config, "environment"); +    // this is some code for compatibility with the [environment] section, +    // even if I never released a version with it, but some people is using +    // it already. +    const char *section = NULL; +    char **env = bc_config_list_keys(config, "global"); +    if (env != NULL) { +        section = "global"; +    } +    else { +        env = bc_config_list_keys(config, "environment"); +        if (env != NULL) { +            section = "environment"; +        } +        else { +            section = "global"; +        } +    } +      if (env != NULL) {          for (size_t i = 0; env[i] != NULL; i++) {              for (size_t j = 0; env[i][j] != '\0'; j++) {                  if (!((env[i][j] >= 'A' && env[i][j] <= 'Z') || env[i][j] == '_')) {                      *err = bc_error_new_printf(BLOGC_MAKE_ERROR_SETTINGS, -                        "Invalid [environment] key: %s", env[i]); +                        "Invalid [%s] key: %s", section, env[i]);                      bc_strv_free(env);                      bm_settings_free(rv);                      rv = NULL; @@ -114,17 +131,17 @@ bm_settings_parse(const char *content, size_t content_len, bc_error_t **err)                  }              }              bc_trie_insert(rv->env, env[i], -                bc_strdup(bc_config_get(config, "environment", env[i]))); +                bc_strdup(bc_config_get(config, section, env[i])));          }      }      bc_strv_free(env); -    for (size_t i = 0; required_environment[i] != NULL; i++) { -        const char *value = bc_trie_lookup(rv->env, required_environment[i]); +    for (size_t i = 0; required_global[i] != NULL; i++) { +        const char *value = bc_trie_lookup(rv->env, required_global[i]);          if (value == NULL || value[0] == '\0') {              *err = bc_error_new_printf(BLOGC_MAKE_ERROR_SETTINGS, -                "[environment] key required but not found or empty: %s", -                required_environment[i]); +                "[%s] key required but not found or empty: %s", section, +                required_global[i]);              bm_settings_free(rv);              rv = NULL;              goto cleanup; | 
