int main (int argc, char **argv) { setlocale(LC_ALL, NULL); setlocale(LC_CTYPE, ""); alias = strdup (basename (argv[0])); if (argc == 1) { fprintf (stderr, "%s: %s: %s\n", alias, _("Error"), _("Missing subcommand")); fprintf (stderr, _("For details type: %s help\n"), alias); return 1; } subcommand_t sc = get_subcommand (argv[1]); int result = sc (argc - 1, argv + 1); free (alias); return result; }
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; }