static void test_binary_extensions(void) { char buf[][20] = { "archive.tar.gz", "photos.tar.bz2", }; assert_string_equal("tar.gz", cut_extension(buf[0])); assert_string_equal("archive", buf[0]); assert_string_equal("tar.bz2", cut_extension(buf[1])); assert_string_equal("photos", buf[1]); }
static void test_no_extension(void) { char buf[] = "file"; assert_string_equal("", cut_extension(buf)); assert_string_equal("file", buf); }
static void test_unary_extensions(void) { char buf[][20] = { "file.jpg", "program-1.0.zip", "tar.zip", }; assert_string_equal("jpg", cut_extension(buf[0])); assert_string_equal("file", buf[0]); assert_string_equal("zip", cut_extension(buf[1])); assert_string_equal("program-1.0", buf[1]); assert_string_equal("zip", cut_extension(buf[2])); assert_string_equal("tar", buf[2]); }
static void parse_options(int argc, char *argv[]) { int32 args_left = argc - 1; // ToDo: use getopt_long() for (int32 i = 1; i < argc; ++i) { if (strcmp(argv[i], "-o") == 0 || strcmp(argv[i], "--output") == 0) { if (i + 1 >= argc) error("%s should be followed by a file name", argv[i]); strcpy(sOutputFile, argv[i + 1]); argv[i] = NULL; argv[i + 1] = NULL; ++i; args_left -= 2; } else if (strcmp(argv[i], "-I") == 0 || strcmp(argv[i], "--include") == 0) { if (i + 1 >= argc) error("%s should be followed by a directory name", argv[i]); rdef_add_include_dir(argv[i + 1], true); argv[i] = NULL; argv[i + 1] = NULL; ++i; args_left -= 2; } else if (strcmp(argv[i], "-d") == 0 || strcmp(argv[i], "--decompile") == 0) { sDecompile = true; argv[i] = NULL; --args_left; } else if (strcmp(argv[i], "-m") == 0 || strcmp(argv[i], "--merge") == 0) { sFlags |= RDEF_MERGE_RESOURCES; argv[i] = NULL; --args_left; } else if (strcmp(argv[i], "--auto-names") == 0) { sFlags |= RDEF_AUTO_NAMES; argv[i] = NULL; --args_left; } else if (strcmp(argv[i], "-q") == 0 || strcmp(argv[i], "--quiet") == 0) { sQuiet = true; argv[i] = NULL; --args_left; } else if (strcmp(argv[i], "-h") == 0 || strcmp(argv[i], "--help") == 0) { usage(); } else if (strcmp(argv[i], "-V") == 0 || strcmp(argv[i], "--version") == 0) { version(); } else if (!strcmp(argv[i], "-")) { // stdin input file break; } else if (argv[i][0] == '-') { error("unknown option %s", argv[i]); argv[i] = NULL; --args_left; } } if (args_left < 1) { error("no input files"); usage(); } for (int i = 1; i < argc; ++i) { if (argv[i] == NULL) continue; if (sFirstInputFile == NULL) sFirstInputFile = argv[i]; rdef_add_input_file(argv[i]); } if (sOutputFile[0] == '\0') { // no output file name was given, use the name of the // first source file as base strlcpy(sOutputFile, sFirstInputFile, sizeof(sOutputFile)); cut_extension(sOutputFile, sDecompile ? ".rsrc" : ".rdef"); add_extension(sOutputFile, sDecompile ? ".rdef" : ".rsrc"); } }