static void processInternalSettings ( OptionProcessingInformation *info, int config ) { for (unsigned int optionIndex=0; optionIndex<info->optionCount; ++optionIndex) { const OptionEntry *option = &info->optionTable[optionIndex]; if (!(option->flags & OPT_Config) == !config) { const char *setting = option->internal.setting; char *newSetting = NULL; if (!setting) setting = option->argument? "": FLAG_FALSE_WORD; if (option->internal.adjust) { if (*setting) { if ((newSetting = strdup(setting))) { if (option->internal.adjust(&newSetting)) { setting = newSetting; } } else { logMallocError(); } } } ensureSetting(info, option, setting); if (newSetting) free(newSetting); } } }
static void setDefaultOptions ( OptionProcessingInformation *info, int config ) { int optionIndex; for (optionIndex=0; optionIndex<info->optionCount; ++optionIndex) { const OptionEntry *option = &info->optionTable[optionIndex]; if (!(option->flags & OPT_Config) == !config) { const char *setting = option->defaultSetting; if (!setting) setting = option->argument? "": FLAG_FALSE_WORD; ensureSetting(info, option, setting); } } }
static void processConfigurationFile ( OptionProcessingInformation *info, const char *path, int optional ) { FILE *file = openDataFile(path, "r", optional); if (file) { ConfigurationFileProcessingData conf; conf.info = info; ; if ((conf.settings = malloc(info->optionCount * sizeof(*conf.settings)))) { int processed; unsigned int index; for (index=0; index<info->optionCount; index+=1) conf.settings[index] = NULL; processed = processLines(file, processConfigurationLine, &conf); for (index=0; index<info->optionCount; index+=1) { char *setting = conf.settings[index]; if (setting) { ensureSetting(info, &info->optionTable[index], setting); free(setting); } } if (!processed) { logMessage(LOG_ERR, gettext("file '%s' processing error."), path); info->warning = 1; } free(conf.settings); } else { logMallocError(); } fclose(file); } else if (!optional || (errno != ENOENT)) { info->warning = 1; } }
static void processBootParameters ( OptionProcessingInformation *info, const char *parameter ) { const char *value; char *allocated = NULL; if (!(value = allocated = getBootParameters(parameter))) { if (!(value = getenv(parameter))) { return; } } { int parameterCount = 0; char **parameters = splitString(value, ',', ¶meterCount); for (unsigned int optionIndex=0; optionIndex<info->optionCount; optionIndex+=1) { const OptionEntry *option = &info->optionTable[optionIndex]; if ((option->bootParameter) && (option->bootParameter <= parameterCount)) { char *parameter = parameters[option->bootParameter-1]; if (*parameter) { { char *byte = parameter; do { if (*byte == '+') *byte = ','; } while (*++byte); } ensureSetting(info, option, parameter); } } } deallocateStrings(parameters); } if (allocated) free(allocated); }
static int processEnvironmentVariable ( OptionProcessingInformation *info, const OptionEntry *option, const char *prefix ) { size_t prefixLength = strlen(prefix); if ((option->flags & OPT_Environ) && option->word) { size_t nameSize = prefixLength + 1 + strlen(option->word) + 1; char name[nameSize]; snprintf(name, nameSize, "%s_%s", prefix, option->word); { char *character = name; while (*character) { if (*character == '-') { *character = '_'; } else if (islower((unsigned char)*character)) { *character = toupper((unsigned char)*character); } character += 1; } } { const char *setting = getenv(name); if (setting && *setting) { if (!ensureSetting(info, option, setting)) { return 0; } } } } return 1; }
static void processEnvironmentVariables ( OptionProcessingInformation *info, const char *prefix ) { size_t prefixLength = strlen(prefix); unsigned int optionIndex; for (optionIndex=0; optionIndex<info->optionCount; optionIndex+=1) { const OptionEntry *option = &info->optionTable[optionIndex]; if ((option->flags & OPT_Environ) && option->word) { size_t nameSize = prefixLength + 1 + strlen(option->word) + 1; char name[nameSize]; snprintf(name, nameSize, "%s_%s", prefix, option->word); { char *character = name; while (*character) { if (*character == '-') { *character = '_'; } else if (islower(*character)) { *character = toupper(*character); } character += 1; } } { const char *setting = getenv(name); if (setting && *setting) ensureSetting(info, option, setting); } } } }