// TODO: Change all the 0 linenos below into real line numbers void parseConfigFile(const char* configFilename, int32_t lineno, int32_t filename) { FILE* argFile = fopen(configFilename, "r"); if (!argFile) { char* message = chpl_glom_strings(2, "Unable to open ", configFilename); chpl_error(message, lineno, filename); } chpl_saveFilename(configFilename); // CHPL_FILE_IDX_SAVED_FILENAME will now // give us configFilename while (!feof(argFile)) { int numScans = 0; char setConfigBuffer[_default_string_length]; numScans = fscanf(argFile, _default_format_read_string, setConfigBuffer); if (numScans == 1) { if (*setConfigBuffer == '#') { if (!feof(argFile)) { do { char ch = fgetc(argFile); if (ch == '\n') break; } while (!feof(argFile)); } } else if (!aParsedString(argFile, setConfigBuffer, 0, CHPL_FILE_IDX_SAVED_FILENAME)) { char* equalsSign; const char* moduleName; char* varName; configVarType *configVar = breakIntoPiecesAndLookup(setConfigBuffer, &equalsSign, &moduleName, &varName, 0, CHPL_FILE_IDX_SAVED_FILENAME); if (configVar == NULL) { handleUnexpectedConfigVar(moduleName, varName, 0, CHPL_FILE_IDX_SAVED_FILENAME); } else { char* value = equalsSign + 1; if (equalsSign && *value) { initSetValue(varName, value, moduleName, 0, CHPL_FILE_IDX_SAVED_FILENAME); } else { char configValBuffer[_default_string_length]; numScans = fscanf(argFile, _default_format_read_string, configValBuffer); if (numScans != 1) { char *message = chpl_glom_strings(3, "Configuration variable '", varName, "' is missing its initialization value"); chpl_error(message, 0, CHPL_FILE_IDX_SAVED_FILENAME); } else { initSetValue(varName, configValBuffer, moduleName, 0, CHPL_FILE_IDX_SAVED_FILENAME); } } } } } } fclose(argFile); }
// TODO: Change all the 0 linenos below into real line numbers void parseConfigFile(const char* configFilename, int32_t lineno, chpl_string filename) { FILE* argFile = fopen(configFilename, "r"); if (!argFile) { char* message = chpl_glom_strings(2, "Unable to open ", configFilename); chpl_error(message, lineno, filename); } while (!feof(argFile)) { int numScans = 0; char setConfigBuffer[_default_string_length]; numScans = fscanf(argFile, _default_format_read_string, setConfigBuffer); if (numScans == 1) { if (!aParsedString(argFile, setConfigBuffer, 0, configFilename)) { char* equalsSign; const char* moduleName; char* varName; configVarType* configVar = breakIntoPiecesAndLookup(setConfigBuffer, &equalsSign, &moduleName, &varName, 0, configFilename); if (configVar == NULL) { handleUnexpectedConfigVar(moduleName, varName, 0, configFilename); } else { char* value = equalsSign + 1; checkDeprecatedConfig(varName, equalsSign ? value : equalsSign); if (equalsSign && *value) { initSetValue(varName, value, moduleName, 0, configFilename); } else { char configValBuffer[_default_string_length]; numScans = fscanf(argFile, _default_format_read_string, configValBuffer); if (numScans != 1) { char* message = chpl_glom_strings(3, "Configuration variable '", varName, "' is missing its initialization value"); chpl_error(message, 0, configFilename); } else { initSetValue(varName, configValBuffer, moduleName, 0, configFilename); } } } } } } fclose(argFile); }
int handlePossibleConfigVar(int* argc, char* argv[], int argnum, int32_t lineno, chpl_string filename) { int retval = 0; int arglen = strlen(argv[argnum]+2)+1; char* argCopy = chpl_mem_allocMany(arglen, sizeof(char), CHPL_RT_MD_CONFIG_ARG_COPY_DATA, argnum, "<command-line>"); char* equalsSign; const char* moduleName; char* varName; configVarType* configVar; strcpy(argCopy, argv[argnum]+2); configVar = breakIntoPiecesAndLookup(argCopy, &equalsSign, &moduleName, &varName, lineno, filename); if (configVar == NULL) { if (argv[argnum][1] == '-') { // this is a -- argument retval = handleNonstandardArg(argc, argv, argnum, lineno, filename); } else { // this is a -s argument handleUnexpectedConfigVar(moduleName, varName, lineno, filename); } } else { char* value = equalsSign + 1; checkDeprecatedConfig(varName, equalsSign ? value : equalsSign); if (equalsSign && *value) { initSetValue(varName, value, moduleName, lineno, filename); } else if (!strcmp(configVar->defaultValue, "bool")) { initSetValue(varName, "true", moduleName, lineno, filename); } else { if (argnum + 1 >= *argc) { char* message = chpl_glom_strings(3, "Configuration variable '", varName, "' is missing its initialization value"); chpl_error(message, lineno, filename); } else { initSetValue(varName, argv[argnum+1], moduleName, lineno, filename); retval = 1; } } } chpl_mem_free(argCopy, argnum, "<command-line>"); return retval; }