#include "Cli/Cli.h" #include "FileProcessor/FileProcessor.h" #include "Logger/Logger.h" #include "Path/Path.h" #include #include #include #include static const char *base_name(const char *path) { const char *slash = strrchr(path, '/'); return slash == NULL ? path : slash + 1; } static int run(int argc, char **argv) { CliOptions options; CliParseResult parse_result; char *automatic_output = NULL; const char *output_path; int result; parse_result = cli_parse(argc, argv, &options); if (parse_result != CLI_PARSE_OK) { cli_free_options(&options); return parse_result == CLI_PARSE_ERROR ? EXIT_FAILURE : EXIT_SUCCESS; } logger_set_level(options.log_level); output_path = options.output_path; if (output_path == NULL) { automatic_output = path_make_default_output(options.input_path); if (automatic_output == NULL) { logger_error("unable to allocate output path"); cli_free_options(&options); return EXIT_FAILURE; } output_path = automatic_output; } if (options.input_type == INPUT_TYPE_DIRECTORY) { result = process_directory(options.input_path, output_path, options.overwrite_output, &options.patterns); } else if (pattern_list_resolve( &options.patterns, base_name(options.input_path), 0, pattern_list_default_kind(&options.patterns)) == PATTERN_EXCLUDE) { logger_error("input file is excluded by the active patterns: %s", options.input_path); result = -1; } else { result = process_file(options.input_path, output_path); } free(automatic_output); cli_free_options(&options); return result == 0 ? EXIT_SUCCESS : EXIT_FAILURE; } int main(int argc, char **argv) { int result; xmlInitParser(); result = run(argc, argv); xmlCleanupParser(); return result; }