Example #1
0
// 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);
}