/** * Free memory allocated by the file_search_data structure */ void destroy_file_search_data(file_search_data* data) { size_t i; /* clean the memory allocated by file_t elements */ for (i = 0; i < data->root_files.size; i++) { file_t* file = get_root_file(data, i); file_cleanup(file); } rsh_blocks_vector_destroy(&data->root_files); }
/** * Parse command line options. * * @param argv program arguments */ void read_options(int argc, char *argv[]) { struct parsed_cmd_line_t cmd_line; #ifdef _WIN32 int i; vector_t *expanded_cnames; #endif memset(&opt, 0, sizeof(opt)); opt.mem = rsh_vector_new_simple(); opt.find_max_depth = -1; /* initialize cmd_line */ memset(&cmd_line, 0, sizeof(cmd_line)); rsh_blocks_vector_init(&cmd_line.options); cmd_line.argv = argv; cmd_line.argc = argc; /* parse command line and apply encoding options */ parse_cmdline_options(&cmd_line); read_config(); #ifdef _WIN32 /* set default encoding if no encoding options were specified, */ /* this should be done here, even if config file was not found. */ if( (opt.flags & OPT_ENCODING) == 0 ) opt.flags |= OPT_UTF8; #endif /* note: encoding and -o/-l options are already applied */ IF_WINDOWS(setup_console()); setup_output(); /* setup program output */ apply_cmdline_options(&cmd_line); /* process the rest of command options */ /* options were processed, so we don't need them anymore */ rsh_blocks_vector_destroy(&cmd_line.options); #ifdef _WIN32 expanded_cnames = rsh_vector_new_simple(); /* convert paths to internal encoding and expand wildcards. */ for(i = 0; i < cmd_line.n_files; i++) { wchar_t* path = cmd_line.files[i]; wchar_t* p = wcschr(path, L'\0') - 1; /* strip trailing '\','/' symbols (if not preceded by ':') */ for(; p > path && IS_PATH_SEPARATOR_W(*p) && p[-1] != L':'; p--) *p = 0; expand_wildcards(expanded_cnames, path); } opt.cmd_vec = expanded_cnames; opt.files = (char**)expanded_cnames->array; opt.n_files = (int)expanded_cnames->size; free(cmd_line.files); LocalFree(cmd_line.warg); #else opt.files = cmd_line.files; opt.n_files = cmd_line.n_files; rsh_vector_add_ptr(opt.mem, opt.files); #endif make_final_options_checks(); set_default_sums_flags(argv[0]); /* detect default hashes from program name */ }