Beispiel #1
0
bool config_file_exec(const char * config_line, GlUniversEns* env) {
  bool succeeded = true;
  bool parser_succeeded = true;
  string regex_val_macro = "(-?[0-9]+\\.?[0-9]*(e[0-9]+)?)";
  string regex_triple_macro =  "\\( *" + regex_val_macro + " *, *" + regex_val_macro + " *, *" + regex_val_macro + " *\\)";
  string regex_macro = "(univers|astre) (add|set|delete)( *-m " + regex_val_macro + ")?( *-r " + regex_val_macro + ")?( *-p " + regex_triple_macro + ")?( *-v " + regex_triple_macro + ")?( *-a " + regex_triple_macro + ")? (([a-z]|[A-Z]|_|[0-9])+)( (([a-z]|[A-Z]|_|[0-9])+))* *";
  const char * cmd_regex = regex_macro.c_str();
  const char * cmd_request = config_line;
  int err;
  regex_t preg;
  err = regcomp(&preg, cmd_regex, REG_EXTENDED);
  if ( err == 0 ) {
    int match;
    size_t nmatch= 0;
    regmatch_t * pmatch = NULL;

    nmatch = preg.re_nsub;
    pmatch = (regmatch_t *) malloc ( sizeof (*pmatch) * nmatch );

    if ( pmatch ) {
      
      match = regexec(&preg, cmd_request, nmatch, pmatch, 0);
      regfree(&preg);

      if ( match == 0 ) {
        char ** command = new char*[nmatch];
        for ( int i = 0 ; i < nmatch ; i++ ) {
          command[i] = new char[20];
          command[i] = get_subcommand(i, pmatch, cmd_request);
          //cout << "[" << i << "] " << command[i] << endl;
        }
        parser_succeeded &= config_file_parser((const char **) command, env);
      }
      else {
        cerr << "error : config line : '" << config_line << "' doesnt match" << endl;
        succeeded = false;
      }
    } // du a la compilation de l'expression régulière
    // paramètre constant qui ne devrait pas faillir
  } // de même
  return succeeded && parser_succeeded;
}
CHttpDataManage::CHttpDataManage(char_t* config_file_path)
{
	config_file_parser(config_file_path);
}