Changeset 68817 in vbox for trunk/src/VBox/Runtime/common/fs/isomakercmd.cpp
- Timestamp:
- Sep 22, 2017 12:34:16 PM (8 years ago)
- svn:sync-xref-src-repo-rev:
- 118071
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Runtime/common/fs/isomakercmd.cpp
r68814 r68817 100 100 RTFSISOMAKERCMD_OPT_RANDOM_ORDER_VERIFICATION, 101 101 RTFSISOMAKERCMD_OPT_NAME_SETUP, 102 103 RTFSISOMAKERCMD_OPT_ROCK_RIDGE, 104 RTFSISOMAKERCMD_OPT_LIMITED_ROCK_RIDGE, 105 RTFSISOMAKERCMD_OPT_NO_ROCK_RIDGE, 102 106 RTFSISOMAKERCMD_OPT_NO_JOLIET, 107 103 108 RTFSISOMAKERCMD_OPT_IMPORT_ISO, 104 109 RTFSISOMAKERCMD_OPT_PUSH_ISO, … … 114 119 RTFSISOMAKERCMD_OPT_ELTORITO_FLOPPY_288, 115 120 121 RTFSISOMAKERCMD_OPT_RATIONAL_ATTRIBS, 122 RTFSISOMAKERCMD_OPT_STRICT_ATTRIBS, 116 123 RTFSISOMAKERCMD_OPT_NO_FILE_MODE, 117 124 RTFSISOMAKERCMD_OPT_NO_DIR_MODE, 125 RTFSISOMAKERCMD_OPT_CHMOD, 126 RTFSISOMAKERCMD_OPT_CHOWN, 127 RTFSISOMAKERCMD_OPT_CHGRP, 118 128 119 129 /* … … 441 451 { 442 452 /* 443 * Un quie IPRT ISO maker options.453 * Unique IPRT ISO maker options. 444 454 */ 445 { "--iprt-iso-maker-file-marker", RTFSISOMAKERCMD_OPT_IPRT_ISO_MAKER_FILE_MARKER, RTGETOPT_REQ_STRING },446 { "--iprt-iso-maker-file-marker-ms", RTFSISOMAKERCMD_OPT_IPRT_ISO_MAKER_FILE_MARKER, RTGETOPT_REQ_STRING },447 { "--iprt-iso-maker-file-marker-ms-crt", RTFSISOMAKERCMD_OPT_IPRT_ISO_MAKER_FILE_MARKER, RTGETOPT_REQ_STRING },448 { "--iprt-iso-maker-file-marker-bourne", RTFSISOMAKERCMD_OPT_IPRT_ISO_MAKER_FILE_MARKER, RTGETOPT_REQ_STRING },449 { "--iprt-iso-maker-file-marker-bourne-sh", RTFSISOMAKERCMD_OPT_IPRT_ISO_MAKER_FILE_MARKER, RTGETOPT_REQ_STRING },450 451 { "--output-buffer-size", RTFSISOMAKERCMD_OPT_OUTPUT_BUFFER_SIZE, RTGETOPT_REQ_UINT32 },452 { "--random-output-buffer-size", RTFSISOMAKERCMD_OPT_RANDOM_OUTPUT_BUFFER_SIZE, RTGETOPT_REQ_NOTHING },453 { "--random-order-verficiation", RTFSISOMAKERCMD_OPT_RANDOM_ORDER_VERIFICATION, RTGETOPT_REQ_UINT32 },454 455 { "--name-setup", RTFSISOMAKERCMD_OPT_NAME_SETUP, RTGETOPT_REQ_STRING }, 455 { "--no-joliet", RTFSISOMAKERCMD_OPT_NO_JOLIET, RTGETOPT_REQ_NOTHING },456 456 { "--import-iso", RTFSISOMAKERCMD_OPT_IMPORT_ISO, RTGETOPT_REQ_STRING }, 457 457 { "--push-iso", RTFSISOMAKERCMD_OPT_PUSH_ISO, RTGETOPT_REQ_STRING }, … … 461 461 { "--pop", RTFSISOMAKERCMD_OPT_POP, RTGETOPT_REQ_NOTHING }, 462 462 463 { "--rock-ridge", RTFSISOMAKERCMD_OPT_ROCK_RIDGE, RTGETOPT_REQ_NOTHING }, 464 { "--limited-rock-ridge", RTFSISOMAKERCMD_OPT_LIMITED_ROCK_RIDGE, RTGETOPT_REQ_NOTHING }, 465 { "--no-rock-ridge", RTFSISOMAKERCMD_OPT_NO_ROCK_RIDGE, RTGETOPT_REQ_NOTHING }, 466 { "--no-joliet", RTFSISOMAKERCMD_OPT_NO_JOLIET, RTGETOPT_REQ_NOTHING }, 467 { "--joliet-ucs-level", RTFSISOMAKERCMD_OPT_JOLIET_LEVEL, RTGETOPT_REQ_UINT8 }, 468 469 { "--rational-attribs", RTFSISOMAKERCMD_OPT_RATIONAL_ATTRIBS, RTGETOPT_REQ_NOTHING }, 470 { "--strict-attribs", RTFSISOMAKERCMD_OPT_STRICT_ATTRIBS, RTGETOPT_REQ_NOTHING }, 471 { "--no-file-mode", RTFSISOMAKERCMD_OPT_NO_FILE_MODE, RTGETOPT_REQ_NOTHING }, 472 { "--no-dir-mode", RTFSISOMAKERCMD_OPT_NO_DIR_MODE, RTGETOPT_REQ_NOTHING }, 473 { "--chmod", RTFSISOMAKERCMD_OPT_CHMOD, RTGETOPT_REQ_STRING }, 474 { "--chown", RTFSISOMAKERCMD_OPT_CHOWN, RTGETOPT_REQ_STRING }, 475 { "--chgrp", RTFSISOMAKERCMD_OPT_CHGRP, RTGETOPT_REQ_STRING }, 463 476 464 477 { "--eltorito-new-entry", RTFSISOMAKERCMD_OPT_ELTORITO_NEW_ENTRY, RTGETOPT_REQ_NOTHING }, … … 468 481 { "--eltorito-floppy-288", RTFSISOMAKERCMD_OPT_ELTORITO_FLOPPY_288, RTGETOPT_REQ_NOTHING }, 469 482 470 { "--no-file-mode", RTFSISOMAKERCMD_OPT_NO_FILE_MODE, RTGETOPT_REQ_NOTHING }, 471 { "--no-dir-mode", RTFSISOMAKERCMD_OPT_NO_DIR_MODE, RTGETOPT_REQ_NOTHING }, 483 { "--iprt-iso-maker-file-marker", RTFSISOMAKERCMD_OPT_IPRT_ISO_MAKER_FILE_MARKER, RTGETOPT_REQ_STRING }, 484 { "--iprt-iso-maker-file-marker-ms", RTFSISOMAKERCMD_OPT_IPRT_ISO_MAKER_FILE_MARKER, RTGETOPT_REQ_STRING }, 485 { "--iprt-iso-maker-file-marker-ms-crt", RTFSISOMAKERCMD_OPT_IPRT_ISO_MAKER_FILE_MARKER, RTGETOPT_REQ_STRING }, 486 { "--iprt-iso-maker-file-marker-bourne", RTFSISOMAKERCMD_OPT_IPRT_ISO_MAKER_FILE_MARKER, RTGETOPT_REQ_STRING }, 487 { "--iprt-iso-maker-file-marker-bourne-sh", RTFSISOMAKERCMD_OPT_IPRT_ISO_MAKER_FILE_MARKER, RTGETOPT_REQ_STRING }, 488 489 { "--output-buffer-size", RTFSISOMAKERCMD_OPT_OUTPUT_BUFFER_SIZE, RTGETOPT_REQ_UINT32 }, 490 { "--random-output-buffer-size", RTFSISOMAKERCMD_OPT_RANDOM_OUTPUT_BUFFER_SIZE, RTGETOPT_REQ_NOTHING }, 491 { "--random-order-verficiation", RTFSISOMAKERCMD_OPT_RANDOM_ORDER_VERIFICATION, RTGETOPT_REQ_UINT32 }, 472 492 473 493 #define DD(a_szLong, a_chShort, a_fFlags) { a_szLong, a_chShort, a_fFlags }, { "-" a_szLong, a_chShort, a_fFlags } … … 498 518 DD("-sysid", RTFSISOMAKERCMD_OPT_SYSTEM_ID, RTGETOPT_REQ_STRING ), 499 519 { "--volume-id", RTFSISOMAKERCMD_OPT_VOLUME_ID, RTGETOPT_REQ_STRING }, /* should've been '-V' */ 500 DD("-volid -id",RTFSISOMAKERCMD_OPT_VOLUME_ID, RTGETOPT_REQ_STRING ),520 DD("-volid", RTFSISOMAKERCMD_OPT_VOLUME_ID, RTGETOPT_REQ_STRING ), 501 521 DD("-volset", RTFSISOMAKERCMD_OPT_VOLUME_SET_ID, RTGETOPT_REQ_STRING ), 502 522 … … 508 528 DD("--iso-level", RTFSISOMAKERCMD_OPT_ISO_LEVEL, RTGETOPT_REQ_UINT8 ), 509 529 { "--long-names", 'l', RTGETOPT_REQ_NOTHING }, 530 { "--output", 'o', RTGETOPT_REQ_STRING }, 531 { "--joliet", 'J', RTGETOPT_REQ_NOTHING }, 532 DD("-ucs-level", RTFSISOMAKERCMD_OPT_JOLIET_LEVEL, RTGETOPT_REQ_UINT8 ), 533 DD("-rock", 'R', RTGETOPT_REQ_NOTHING ), 534 DD("-rational-rock", 'r', RTGETOPT_REQ_NOTHING ), 535 DD("-pad", RTFSISOMAKERCMD_OPT_PAD, RTGETOPT_REQ_NOTHING ), 536 DD("-no-pad", RTFSISOMAKERCMD_OPT_NO_PAD, RTGETOPT_REQ_NOTHING ), 510 537 511 538 /* … … 547 574 DD("-input-charset", RTFSISOMAKERCMD_OPT_INPUT_CHARSET, RTGETOPT_REQ_STRING ), 548 575 DD("-output-charset", RTFSISOMAKERCMD_OPT_OUTPUT_CHARSET, RTGETOPT_REQ_STRING ), 549 { "--joliet", 'J', RTGETOPT_REQ_NOTHING },550 576 DD("-joliet-long", RTFSISOMAKERCMD_OPT_JOLIET_LONG, RTGETOPT_REQ_NOTHING ), 551 577 DD("-jcharset", RTFSISOMAKERCMD_OPT_JOLIET_CHARSET, RTGETOPT_REQ_STRING ), … … 573 599 DD("-no-split-symlink-components", RTFSISOMAKERCMD_OPT_NO_SPLIT_SYMLINK_COMPONENTS, RTGETOPT_REQ_NOTHING ), 574 600 DD("-no-split-symlink-fields", RTFSISOMAKERCMD_OPT_NO_SPLIT_SYMLINK_FIELDS, RTGETOPT_REQ_NOTHING ), 575 { "--output", 'o', RTGETOPT_REQ_STRING },576 DD("-pad", RTFSISOMAKERCMD_OPT_PAD, RTGETOPT_REQ_NOTHING ),577 DD("-no-pad", RTFSISOMAKERCMD_OPT_NO_PAD, RTGETOPT_REQ_NOTHING ),578 601 DD("-path-list", RTFSISOMAKERCMD_OPT_PATH_LIST, RTGETOPT_REQ_STRING ), 579 602 DD("-print-size", RTFSISOMAKERCMD_OPT_PRINT_SIZE, RTGETOPT_REQ_NOTHING ), 580 603 DD("-quiet", RTFSISOMAKERCMD_OPT_QUIET, RTGETOPT_REQ_NOTHING ), 581 { "--rock-ridge", 'R', RTGETOPT_REQ_NOTHING },582 { "--rock-ridge-relaxed", 'r', RTGETOPT_REQ_NOTHING },583 604 DD("-relaxed-filenames", RTFSISOMAKERCMD_OPT_RELAXED_FILENAMES, RTGETOPT_REQ_NOTHING ), 584 605 DD("-root", RTFSISOMAKERCMD_OPT_ROOT, RTGETOPT_REQ_STRING ), … … 594 615 { "--trans-tbl", 'T', RTGETOPT_REQ_NOTHING }, 595 616 DD("-table-name", RTFSISOMAKERCMD_OPT_TRANS_TBL_NAME, RTGETOPT_REQ_STRING ), 596 DD("-ucs-level", RTFSISOMAKERCMD_OPT_JOLIET_LEVEL, RTGETOPT_REQ_UINT8 ),597 617 DD("-udf", RTFSISOMAKERCMD_OPT_UDF, RTGETOPT_REQ_NOTHING ), 598 618 DD("-uid", RTFSISOMAKERCMD_OPT_UID, RTGETOPT_REQ_UINT32 ), … … 849 869 "\n" 850 870 "\n" 851 "Options:\n" 871 "Options - General:\n" 872 "\n" 873 " -o <output-file>\n" 874 " --output <output-file>\n" 875 " The output filename. This option is not supported in VISO mode.\n" 852 876 "\n" 853 877 " --name-setup <spec>\n" … … 873 897 " - hfs-trans-tbl\n" 874 898 "\n" 875 " --iso-level <0|1|2|3>\n"876 " Sets the ISO level:\n"877 " - 0: Disable primary ISO namespace.\n"878 " - 1: ISO level 1: Filenames 8.3 format and limited to 4GB - 1.\n"879 " - 2: ISO level 2: 31 char long names and limited to 4GB - 1.\n"880 " - 3: ISO level 3: 31 char long names and support for >=4GB files.\n"881 " - 4: Fictive level used by other tools. Not yet implemented.\n"882 " Default: 3\n"883 "\n"884 " --no-joliet\n"885 " Disable the joliet namespace entirely. This option must be specified\n"886 " before any file specifications\n"887 "\n"888 899 " --push-iso <iso-file>\n" 889 900 " --push-iso-no-joliet <iso-file>\n" … … 903 914 " omit namespaces.\n" 904 915 "\n" 916 "\n" 917 "Options - Namespaces:\n" 918 "\n" 919 " --iso-level <0|1|2|3>\n" 920 " Sets the ISO level:\n" 921 " - 0: Disable primary ISO namespace.\n" 922 " - 1: ISO level 1: Filenames 8.3 format and limited to 4GB - 1.\n" 923 " - 2: ISO level 2: 31 char long names and limited to 4GB - 1.\n" 924 " - 3: ISO level 3: 31 char long names and support for >=4GB files.\n" 925 " - 4: Fictive level used by other tools. Not yet implemented.\n" 926 " Default: 3\n" 927 "\n" 928 " --rock-ridge\n" 929 " --limited-rock-ridge\n" 930 " --no-rock-ridge\n" 931 " Enables or disables rock ridge support for the primary ISO 9660\n" 932 " namespace. The --limited-rock-ridge option omits a couple of bits in\n" 933 " the root directory that would make Linux pick rock ridge over joliet.\n" 934 " Default: --limited-rock-ridge" 935 "\n" 936 " -J\n" 937 " --joliet\n" 938 " --no-joliet\n" 939 " Enables or disable the joliet namespace. This option must precede any\n" 940 " file specifications. Default: --joliet\n" 941 "\n" 942 " --joliet-ucs-level <1|2|3>\n" 943 " --ucs-level <1|2|3>\n" 944 " Set the Joliet UCS support level. This is currently only flagged in the\n" 945 " image but not enforced on the actual path names. Default level: 3\n" 946 "\n" 947 "\n" 948 "Options - File attributes:\n" 949 "\n" 950 " --rational-attribs\n" 951 " Enables rational file attribute handling:\n" 952 " * Owner ID is set to zero\n" 953 " * Group ID is set to zero\n" 954 " * Mode is set to 0444 for non-executable files.\n" 955 " * Mode is set to 0555 for executable files.\n" 956 " * Mode is set to 0555 for directories, preserving stick bits.\n" 957 " This is default.\n" 958 "\n" 959 " --strict-attribs\n" 960 " Counters --rational-attribs and causes attributes to be recorded\n" 961 " exactly as they appear in the source.\n" 962 "\n" 905 963 " --file-mode <mode>\n" 906 964 " --no-file-mode\n" 907 " Controls the forced file mode mask .\n"965 " Controls the forced file mode mask for rock ridge, UDF and HFS.\n" 908 966 "\n" 909 967 " --dir-mode <mode>\n" 910 968 " --no-dir-mode\n" 911 " Controls the forced directory mode mask .\n"969 " Controls the forced directory mode mask for rock ridge, UDF and HFS.\n" 912 970 "\n" 913 971 " --new-dir-mode <mode>\n" 914 " Controls the default mode mask for directories that are created " 915 " implicitly. The --dir-mode option overrides this.\n" 972 " Controls the default mode mask (rock ridge, UDF, HFS) for directories\n" 973 " that are created implicitly. The --dir-mode option overrides this.\n" 974 "\n" 975 " --chmod <mode>:<on-iso-file>\n" 976 " Explictily sets the rock ridge, UDF and HFS file mode for a\n" 977 " file/dir/whatever that has already been added to the ISO. The mode can\n" 978 " be octal, a+x, a+r, or a+rx. (Support for more complicated mode\n" 979 " specifications may be implemented at a later point.)\n" 980 " Note that only namespaces in the current --name-setup are affected.\n" 981 "\n" 982 " --chown <owner-id>:<on-iso-file>\n" 983 " Explictily sets the rock ridge, UDF and HFS file owner ID (numeric) for a\n" 984 " file/dir/whatever that has already been added to the ISO.\n" 985 " Note that only namespaces in the current --name-setup are affected.\n" 986 "\n" 987 " --chgrp <group-id>:<on-iso-file>\n" 988 " Explictily sets the rock ridge, UDF and HFS file group ID (numeric) for a\n" 989 " file/dir/whatever that has already been added to the ISO.\n" 990 " Note that only namespaces in the current --name-setup are affected.\n" 916 991 "\n" 917 992 "\n" … … 926 1001 " as the El Torito boot image of the current boot entry.\n" 927 1002 "\n" 928 " -b <on- ISO-file>\n"929 " --eltorito-boot <on- ISO-file>\n"1003 " -b <on-iso-file>\n" 1004 " --eltorito-boot <on-iso-file>\n" 930 1005 " Specifies a file on the ISO as the El Torito boot image for the current\n" 931 1006 " boot entry.\n" … … 972 1047 "\n" 973 1048 "\n" 974 "Options - String properties :\n"1049 "Options - String properties (applied to active namespaces only):\n" 975 1050 "\n" 976 1051 " --abstract <file-id>\n" … … 1003 1078 " --volid <text>\n" 1004 1079 " --volume-id <text>\n" 1005 " Volume ID string.\n" 1080 " Volume ID string (label). (It is possible to set different labels for\n" 1081 " primary ISO 9660, joliet, UDF and HFS by changing the active namespaces\n" 1082 " using the --name-setup option between --volume-id occurences.)\n" 1006 1083 "\n" 1007 1084 " --volset <text>\n" … … 1017 1094 " --long-names\n" 1018 1095 " Allow 31 charater filenames. Just ensure ISO level >= 2 here.\n" 1096 "\n" 1097 " -R\n" 1098 " --rock\n" 1099 " Same as --rock-ridge and --strict-attribs.\n" 1100 "\n" 1101 " -r\n" 1102 " --rational-rock\n" 1103 " Same as --rock-ridge and --rational-attribs.\n" 1104 "\n" 1019 1105 "\n" 1020 1106 "Options - VISO specific:\n" … … 1092 1178 * Do the verification. 1093 1179 */ 1094 rtFsIsoMakerPrintf(pOpts, "Verifying image in random order using %zu (%#zx) byte blocks: %# zxin blocks\n",1180 rtFsIsoMakerPrintf(pOpts, "Verifying image in random order using %zu (%#zx) byte blocks: %#RX32 in blocks\n", 1095 1181 cbBuf, cbBuf, cBlocks); 1096 1182 … … 2356 2442 2357 2443 /** 2444 * Deals with: --iso-level, -l 2445 * 2446 * @returns IPRT status code 2447 * @param pOpts The ISO maker command instance. 2448 * @param uLevel The new ISO level. 2449 */ 2450 static int rtFsIsoMakerCmdOptSetIsoLevel(PRTFSISOMAKERCMDOPTS pOpts, uint8_t uLevel) 2451 { 2452 int rc = RTFsIsoMakerSetIso9660Level(pOpts->hIsoMaker, uLevel); 2453 if (RT_SUCCESS(rc)) 2454 return rc; 2455 if (rc == VERR_WRONG_ORDER) 2456 return rtFsIsoMakerCmdErrorRc(pOpts, rc, "Cannot change ISO level to %d after having added files!", uLevel); 2457 return rtFsIsoMakerCmdErrorRc(pOpts, rc, "Failed to set ISO level to %d: %Rrc", uLevel, rc); 2458 } 2459 2460 2461 /** 2462 * Deals with: --rock-ridge, --limited-rock-ridge, --no-rock-ridge 2463 * 2464 * @returns IPRT status code 2465 * @param pOpts The ISO maker command instance. 2466 * @param uLevel The new rock ridge level. 2467 */ 2468 static int rtFsIsoMakerCmdOptSetPrimaryRockLevel(PRTFSISOMAKERCMDOPTS pOpts, uint8_t uLevel) 2469 { 2470 int rc = RTFsIsoMakerSetRockRidgeLevel(pOpts->hIsoMaker, uLevel); 2471 if (RT_SUCCESS(rc)) 2472 return rc; 2473 if (rc == VERR_WRONG_ORDER) 2474 return rtFsIsoMakerCmdErrorRc(pOpts, rc, "Cannot change rock ridge level to %d after having added files!", uLevel); 2475 return rtFsIsoMakerCmdErrorRc(pOpts, rc, "Failed to set rock ridge level to %d: %Rrc", uLevel, rc); 2476 } 2477 2478 2479 /** 2480 * Deals with: --joliet, --no-joliet, --joliet-ucs-level, --ucs-level 2481 * 2482 * @returns IPRT status code 2483 * @param pOpts The ISO maker command instance. 2484 * @param uLevel The new rock ridge level. 2485 */ 2486 static int rtFsIsoMakerCmdOptSetJolietUcs2Level(PRTFSISOMAKERCMDOPTS pOpts, uint8_t uLevel) 2487 { 2488 int rc = RTFsIsoMakerSetJolietUcs2Level(pOpts->hIsoMaker, uLevel); 2489 if (RT_SUCCESS(rc)) 2490 return rc; 2491 if (rc == VERR_WRONG_ORDER) 2492 return rtFsIsoMakerCmdErrorRc(pOpts, rc, "Cannot change joliet UCS level to %d after having added files!", uLevel); 2493 return rtFsIsoMakerCmdErrorRc(pOpts, rc, "Failed to set joliet UCS level to %d: %Rrc", uLevel, rc); 2494 } 2495 2496 2497 /** 2498 * Deals with: --rational-attribs, --strict-attribs, -R, -r 2499 * 2500 * @returns IPRT status code 2501 * @param pOpts The ISO maker command instance. 2502 * @param uLevel The new rock ridge level. 2503 */ 2504 static int rtFsIsoMakerCmdOptSetAttribInheritStyle(PRTFSISOMAKERCMDOPTS pOpts, bool fStrict) 2505 { 2506 int rc = RTFsIsoMakerSetAttribInheritStyle(pOpts->hIsoMaker, fStrict); 2507 if (RT_SUCCESS(rc)) 2508 return rc; 2509 return rtFsIsoMakerCmdErrorRc(pOpts, rc, "Failed to change attributes handling style to %s: %Rrc", 2510 fStrict ? "strict" : "rational", rc); 2511 } 2512 2513 2514 /** 2358 2515 * Deals with: -G|--generic-boot {file} 2359 2516 * … … 2860 3017 static int rtFsIsoMakerCmdOptSetStringProp(PRTFSISOMAKERCMDOPTS pOpts, const char *pszValue, RTFSISOMAKERSTRINGPROP enmStringProp) 2861 3018 { 2862 int rc = RTFsIsoMakerSetStringProp(pOpts->hIsoMaker, enmStringProp, RTFSISOMAKER_NAMESPACE_ALL, pszValue);3019 int rc = RTFsIsoMakerSetStringProp(pOpts->hIsoMaker, enmStringProp, pOpts->fDstNamespaces, pszValue); 2863 3020 if (RT_FAILURE(rc)) 2864 3021 rc = rtFsIsoMakerCmdErrorRc(pOpts, rc, "Failed to set string property %d to '%s': %Rrc", enmStringProp, pszValue, rc); … … 2933 3090 return VINF_SUCCESS; 2934 3091 return rtFsIsoMakerCmdErrorRc(pOpts, rc, "Failed to set default dir mode mask to %04o: %Rrc", fMode, rc); 3092 } 3093 3094 3095 /** 3096 * Handles the --chmod option. 3097 * 3098 * @returns IPRT status code 3099 * @param pOpts The ISO maker command instance. 3100 * @param pszSpec The option value. 3101 */ 3102 static int rtFsIsoMakerCmdOptChmod(PRTFSISOMAKERCMDOPTS pOpts, const char *pszSpec) 3103 { 3104 /* 3105 * Parse the mode part. 3106 */ 3107 int rc; 3108 uint32_t fUnset = 07777; 3109 uint32_t fSet = 0; 3110 const char *pszPath = pszSpec; 3111 if (RT_C_IS_DIGIT(*pszPath)) 3112 { 3113 rc = RTStrToUInt32Ex(pszSpec, (char **)&pszPath, 8, &fSet); 3114 if (rc != VWRN_TRAILING_CHARS) 3115 return rtFsIsoMakerCmdSyntaxError(pOpts, "Malformed --chmod, octal mode parse failed: %s (%Rrc)", pszSpec, rc); 3116 if (fSet & ~07777) 3117 return rtFsIsoMakerCmdSyntaxError(pOpts, "Malformed --chmod, invalid mode mask: 0%o, max 07777", fSet); 3118 if (*pszPath != ':') 3119 return rtFsIsoMakerCmdSyntaxError(pOpts, "Malformed --chmod, expected colon after mode: %s", pszSpec); 3120 } 3121 else 3122 { 3123 pszPath = strchr(pszPath, ':'); 3124 if (pszPath == NULL) 3125 return rtFsIsoMakerCmdSyntaxError(pOpts, "Malformed --chmod, expected colon after mode: %s", pszSpec); 3126 size_t const cchMode = pszPath - pszSpec; 3127 3128 /* We currently only matches certain patterns. Later this needs to be generalized into a RTFile or RTPath method. */ 3129 fUnset = 0; 3130 #define MATCH_MODE_STR(a_szMode) (cchMode == sizeof(a_szMode) - 1U && memcmp(pszSpec, a_szMode, sizeof(a_szMode) - 1) == 0) 3131 if (MATCH_MODE_STR("a+x")) 3132 fSet = 0111; 3133 else if (MATCH_MODE_STR("a+r")) 3134 fSet = 0444; 3135 else if (MATCH_MODE_STR("a+rx")) 3136 fSet = 0555; 3137 else 3138 return rtFsIsoMakerCmdSyntaxError(pOpts, "Sorry, --chmod doesn't understand complicated mode expressions: %s", pszSpec); 3139 #undef MATCH_MODE_STR 3140 } 3141 3142 /* 3143 * Check that the file starts with a slash. 3144 */ 3145 pszPath++; 3146 if (!RTPATH_IS_SLASH(*pszPath)) 3147 return rtFsIsoMakerCmdSyntaxError(pOpts, "Malformed --chmod, path must start with a slash: %s", pszSpec); 3148 3149 /* 3150 * Do the job. 3151 */ 3152 rc = RTFsIsoMakerSetPathMode(pOpts->hIsoMaker, pszPath, pOpts->fDstNamespaces, fSet, fUnset, 0 /*fFlags*/, NULL /*pcHits*/); 3153 if (rc == VWRN_NOT_FOUND) 3154 return rtFsIsoMakerCmdSyntaxError(pOpts, "Could not find --chmod path: %s", pszPath); 3155 if (RT_SUCCESS(rc)) 3156 return VINF_SUCCESS; 3157 return rtFsIsoMakerCmdSyntaxError(pOpts, "RTFsIsoMakerSetPathMode(,%s,%#x,%o,%o,0,) failed: %Rrc", 3158 pszPath, pOpts->fDstNamespaces, fSet, fUnset, rc); 3159 } 3160 3161 3162 /** 3163 * Handles the --chown and --chgrp options. 3164 * 3165 * @returns IPRT status code 3166 * @param pOpts The ISO maker command instance. 3167 * @param pszSpec The option value. 3168 * @param fIsChOwn Set if 'chown', clear if 'chgrp'. 3169 */ 3170 static int rtFsIsoMakerCmdOptChangeOwnerGroup(PRTFSISOMAKERCMDOPTS pOpts, const char *pszSpec, bool fIsChOwn) 3171 { 3172 const char * const pszOpt = fIsChOwn ? "chown" : "chgrp"; 3173 3174 /* 3175 * Parse out the ID and path . 3176 */ 3177 uint32_t idValue; 3178 const char *pszPath = pszSpec; 3179 int rc = RTStrToUInt32Ex(pszSpec, (char **)&pszPath, 0, &idValue); 3180 if (rc != VWRN_TRAILING_CHARS) 3181 return rtFsIsoMakerCmdSyntaxError(pOpts, "Malformed --%s, numeric ID parse failed: %s (%Rrc)", pszOpt, pszSpec, rc); 3182 if (*pszPath != ':') 3183 return rtFsIsoMakerCmdSyntaxError(pOpts, "Malformed --%s, expected colon after ID: %s", pszOpt, pszSpec); 3184 pszPath++; 3185 if (!RTPATH_IS_SLASH(*pszPath)) 3186 return rtFsIsoMakerCmdSyntaxError(pOpts, "Malformed --%s, path must start with a slash: %s", pszOpt, pszSpec); 3187 3188 /* 3189 * Do the job. 3190 */ 3191 if (fIsChOwn) 3192 rc = RTFsIsoMakerSetPathOwnerId(pOpts->hIsoMaker, pszPath, pOpts->fDstNamespaces, idValue, NULL /*pcHits*/); 3193 else 3194 rc = RTFsIsoMakerSetPathGroupId(pOpts->hIsoMaker, pszPath, pOpts->fDstNamespaces, idValue, NULL /*pcHits*/); 3195 if (rc == VWRN_NOT_FOUND) 3196 return rtFsIsoMakerCmdSyntaxError(pOpts, "Could not find --%s path: %s", pszOpt, pszPath); 3197 if (RT_SUCCESS(rc)) 3198 return VINF_SUCCESS; 3199 return rtFsIsoMakerCmdSyntaxError(pOpts, "RTFsIsoMakerSetPath%sId(,%s,%#x,%u,) failed: %Rrc", 3200 fIsChOwn ? "Owner" : "Group", pszPath, pOpts->fDstNamespaces, idValue, rc); 2935 3201 } 2936 3202 … … 3057 3323 break; 3058 3324 3325 3059 3326 /* 3060 * Options specific to our ISO maker. 3061 */ 3062 case RTFSISOMAKERCMD_OPT_NAME_SETUP: 3063 rc = rtFsIsoMakerCmdOptNameSetup(pOpts, ValueUnion.psz); 3064 break; 3065 3066 case RTFSISOMAKERCMD_OPT_IPRT_ISO_MAKER_FILE_MARKER: 3067 /* ignored */ 3068 break; 3069 3070 case RTFSISOMAKERCMD_OPT_OUTPUT_BUFFER_SIZE: /* --output-buffer-size {cb} */ 3071 pOpts->cbOutputReadBuffer = ValueUnion.u32; 3072 break; 3073 3074 case RTFSISOMAKERCMD_OPT_RANDOM_OUTPUT_BUFFER_SIZE: /* --random-output-buffer-size */ 3075 pOpts->fRandomOutputReadBufferSize = true; 3076 break; 3077 3078 case RTFSISOMAKERCMD_OPT_RANDOM_ORDER_VERIFICATION: /* --random-order-verficiation {cb} */ 3079 pOpts->cbRandomOrderVerifciationBlock = ValueUnion.u32; 3080 break; 3081 3082 case RTFSISOMAKERCMD_OPT_PUSH_ISO: 3083 rc = rtFsIsoMakerCmdOptPushIso(pOpts, ValueUnion.psz, "--push-iso", 0); 3084 break; 3085 3086 case RTFSISOMAKERCMD_OPT_PUSH_ISO_NO_JOLIET: 3087 rc = rtFsIsoMakerCmdOptPushIso(pOpts, ValueUnion.psz, "--push-iso-no-joliet", RTFSISO9660_F_NO_JOLIET); 3088 break; 3089 3090 case RTFSISOMAKERCMD_OPT_PUSH_ISO_NO_ROCK: 3091 rc = rtFsIsoMakerCmdOptPushIso(pOpts, ValueUnion.psz, "--push-iso-no-rock", RTFSISO9660_F_NO_ROCK); 3092 break; 3093 3094 case RTFSISOMAKERCMD_OPT_PUSH_ISO_NO_ROCK_NO_JOLIET: 3095 rc = rtFsIsoMakerCmdOptPushIso(pOpts, ValueUnion.psz, "--push-iso-no-rock-no-joliet", 3096 RTFSISO9660_F_NO_ROCK | RTFSISO9660_F_NO_JOLIET); 3097 break; 3098 3099 case RTFSISOMAKERCMD_OPT_POP: 3100 rc = rtFsIsoMakerCmdOptPop(pOpts); 3101 break; 3102 3103 3104 case RTFSISOMAKERCMD_OPT_IMPORT_ISO: 3105 rc = rtFsIsoMakerCmdOptImportIso(pOpts, ValueUnion.psz); 3106 break; 3107 3108 case RTFSISOMAKERCMD_OPT_NO_FILE_MODE: 3109 rc = rtFsIsoMakerCmdOptDisableFileOrDirMode(pOpts, false /*fDir*/); 3110 break; 3111 case RTFSISOMAKERCMD_OPT_NO_DIR_MODE: 3112 rc = rtFsIsoMakerCmdOptDisableFileOrDirMode(pOpts, true /*fDir*/); 3113 break; 3114 3115 3116 /* 3117 * Joliet related options. 3118 */ 3119 case RTFSISOMAKERCMD_OPT_NO_JOLIET: 3120 rc = RTFsIsoMakerSetJolietUcs2Level(pOpts->hIsoMaker, 0); 3121 if (RT_FAILURE(rc)) 3122 rc = rtFsIsoMakerCmdErrorRc(pOpts, rc, "Failed to disable joliet: %Rrc", rc); 3123 break; 3124 3125 3126 /* 3127 * Boot related options. 3128 */ 3129 case 'G': /* --generic-boot <file> */ 3130 rc = rtFsIsoMakerCmdOptGenericBoot(pOpts, ValueUnion.psz); 3131 break; 3132 3133 case RTFSISOMAKERCMD_OPT_ELTORITO_ADD_IMAGE: 3134 rc = rtFsIsoMakerCmdOptEltoritoAddImage(pOpts, ValueUnion.psz); 3135 break; 3136 3137 case 'b': /* --eltorito-boot <boot.img> */ 3138 rc = rtFsIsoMakerCmdOptEltoritoBoot(pOpts, ValueUnion.psz); 3139 break; 3140 3141 case RTFSISOMAKERCMD_OPT_ELTORITO_NEW_ENTRY: 3142 rc = rtFsIsoMakerCmdOptEltoritoNewEntry(pOpts); 3143 break; 3144 3145 case RTFSISOMAKERCMD_OPT_ELTORITO_PLATFORM_ID: 3146 rc = rtFsIsoMakerCmdOptEltoritoPlatformId(pOpts, ValueUnion.psz); 3147 break; 3148 3149 case RTFSISOMAKERCMD_OPT_ELTORITO_NO_BOOT: 3150 rc = rtFsIsoMakerCmdOptEltoritoSetNotBootable(pOpts); 3151 break; 3152 3153 case RTFSISOMAKERCMD_OPT_ELTORITO_FLOPPY_12: 3154 rc = rtFsIsoMakerCmdOptEltoritoSetMediaType(pOpts, ISO9660_ELTORITO_BOOT_MEDIA_TYPE_FLOPPY_1_2_MB); 3155 break; 3156 case RTFSISOMAKERCMD_OPT_ELTORITO_FLOPPY_144: 3157 rc = rtFsIsoMakerCmdOptEltoritoSetMediaType(pOpts, ISO9660_ELTORITO_BOOT_MEDIA_TYPE_FLOPPY_1_44_MB); 3158 break; 3159 case RTFSISOMAKERCMD_OPT_ELTORITO_FLOPPY_288: 3160 rc = rtFsIsoMakerCmdOptEltoritoSetMediaType(pOpts, ISO9660_ELTORITO_BOOT_MEDIA_TYPE_FLOPPY_2_88_MB); 3161 break; 3162 case RTFSISOMAKERCMD_OPT_ELTORITO_HARD_DISK_BOOT: 3163 rc = rtFsIsoMakerCmdOptEltoritoSetMediaType(pOpts, ISO9660_ELTORITO_BOOT_MEDIA_TYPE_HARD_DISK); 3164 break; 3165 case RTFSISOMAKERCMD_OPT_ELTORITO_NO_EMULATION_BOOT: 3166 rc = rtFsIsoMakerCmdOptEltoritoSetMediaType(pOpts, ISO9660_ELTORITO_BOOT_MEDIA_TYPE_NO_EMULATION); 3167 break; 3168 3169 case RTFSISOMAKERCMD_OPT_ELTORITO_LOAD_SEG: 3170 rc = rtFsIsoMakerCmdOptEltoritoSetLoadSegment(pOpts, ValueUnion.u16); 3171 break; 3172 3173 case RTFSISOMAKERCMD_OPT_ELTORITO_LOAD_SIZE: 3174 rc = rtFsIsoMakerCmdOptEltoritoSetLoadSectorCount(pOpts, ValueUnion.u16); 3175 break; 3176 3177 case RTFSISOMAKERCMD_OPT_ELTORITO_INFO_TABLE: 3178 rc = rtFsIsoMakerCmdOptEltoritoEnableBootInfoTablePatching(pOpts); 3179 break; 3180 3181 case 'c': /* --boot-catalog <cd-path> */ 3182 rc = rtFsIsoMakerCmdOptEltoritoSetBootCatalogPath(pOpts, ValueUnion.psz); 3183 break; 3184 3185 /* 3186 * Image/namespace property related options. 3187 */ 3188 case RTFSISOMAKERCMD_OPT_ABSTRACT_FILE_ID: 3189 rc = rtFsIsoMakerCmdOptSetStringProp(pOpts, ValueUnion.psz, RTFSISOMAKERSTRINGPROP_ABSTRACT_FILE_ID); 3190 break; 3191 3192 case 'A': /* --application-id */ 3193 rc = rtFsIsoMakerCmdOptSetStringProp(pOpts, ValueUnion.psz, RTFSISOMAKERSTRINGPROP_APPLICATION_ID); 3194 break; 3195 3196 case RTFSISOMAKERCMD_OPT_BIBLIOGRAPHIC_FILE_ID: 3197 rc = rtFsIsoMakerCmdOptSetStringProp(pOpts, ValueUnion.psz, RTFSISOMAKERSTRINGPROP_BIBLIOGRAPHIC_FILE_ID); 3198 break; 3199 3200 case RTFSISOMAKERCMD_OPT_COPYRIGHT_FILE_ID: 3201 rc = rtFsIsoMakerCmdOptSetStringProp(pOpts, ValueUnion.psz, RTFSISOMAKERSTRINGPROP_COPYRIGHT_FILE_ID); 3202 break; 3203 3204 case 'P': /* -publisher */ 3205 rc = rtFsIsoMakerCmdOptSetStringProp(pOpts, ValueUnion.psz, RTFSISOMAKERSTRINGPROP_PUBLISHER_ID); 3206 break; 3207 3208 case 'p': /* --preparer*/ 3209 rc = rtFsIsoMakerCmdOptSetStringProp(pOpts, ValueUnion.psz, RTFSISOMAKERSTRINGPROP_DATA_PREPARER_ID); 3210 break; 3211 3212 case RTFSISOMAKERCMD_OPT_SYSTEM_ID: 3213 rc = rtFsIsoMakerCmdOptSetStringProp(pOpts, ValueUnion.psz, RTFSISOMAKERSTRINGPROP_SYSTEM_ID); 3214 break; 3215 3216 case RTFSISOMAKERCMD_OPT_VOLUME_ID: /* (should've been '-V') */ 3217 rc = rtFsIsoMakerCmdOptSetStringProp(pOpts, ValueUnion.psz, RTFSISOMAKERSTRINGPROP_VOLUME_ID); 3218 break; 3219 3220 case RTFSISOMAKERCMD_OPT_VOLUME_SET_ID: 3221 rc = rtFsIsoMakerCmdOptSetStringProp(pOpts, ValueUnion.psz, RTFSISOMAKERSTRINGPROP_VOLUME_SET_ID); 3222 break; 3223 3224 /* 3225 * Options compatible with other ISO makers. 3327 * General options 3226 3328 */ 3227 3329 case 'o': … … 3233 3335 break; 3234 3336 3337 case RTFSISOMAKERCMD_OPT_NAME_SETUP: 3338 rc = rtFsIsoMakerCmdOptNameSetup(pOpts, ValueUnion.psz); 3339 break; 3340 3341 case RTFSISOMAKERCMD_OPT_PUSH_ISO: 3342 rc = rtFsIsoMakerCmdOptPushIso(pOpts, ValueUnion.psz, "--push-iso", 0); 3343 break; 3344 3345 case RTFSISOMAKERCMD_OPT_PUSH_ISO_NO_JOLIET: 3346 rc = rtFsIsoMakerCmdOptPushIso(pOpts, ValueUnion.psz, "--push-iso-no-joliet", RTFSISO9660_F_NO_JOLIET); 3347 break; 3348 3349 case RTFSISOMAKERCMD_OPT_PUSH_ISO_NO_ROCK: 3350 rc = rtFsIsoMakerCmdOptPushIso(pOpts, ValueUnion.psz, "--push-iso-no-rock", RTFSISO9660_F_NO_ROCK); 3351 break; 3352 3353 case RTFSISOMAKERCMD_OPT_PUSH_ISO_NO_ROCK_NO_JOLIET: 3354 rc = rtFsIsoMakerCmdOptPushIso(pOpts, ValueUnion.psz, "--push-iso-no-rock-no-joliet", 3355 RTFSISO9660_F_NO_ROCK | RTFSISO9660_F_NO_JOLIET); 3356 break; 3357 3358 case RTFSISOMAKERCMD_OPT_POP: 3359 rc = rtFsIsoMakerCmdOptPop(pOpts); 3360 break; 3361 3362 case RTFSISOMAKERCMD_OPT_IMPORT_ISO: 3363 rc = rtFsIsoMakerCmdOptImportIso(pOpts, ValueUnion.psz); 3364 break; 3365 3366 3367 /* 3368 * Namespace configuration. 3369 */ 3370 case RTFSISOMAKERCMD_OPT_ISO_LEVEL: 3371 rc = rtFsIsoMakerCmdOptSetIsoLevel(pOpts, ValueUnion.u8); 3372 break; 3373 3374 case RTFSISOMAKERCMD_OPT_ROCK_RIDGE: 3375 rc = rtFsIsoMakerCmdOptSetPrimaryRockLevel(pOpts, 2); 3376 break; 3377 3378 case RTFSISOMAKERCMD_OPT_LIMITED_ROCK_RIDGE: 3379 rc = rtFsIsoMakerCmdOptSetPrimaryRockLevel(pOpts, 1); 3380 break; 3381 3382 case RTFSISOMAKERCMD_OPT_NO_ROCK_RIDGE: 3383 rc = rtFsIsoMakerCmdOptSetPrimaryRockLevel(pOpts, 0); 3384 break; 3385 3386 case 'J': 3387 rc = rtFsIsoMakerCmdOptSetJolietUcs2Level(pOpts, 3); 3388 break; 3389 3390 case RTFSISOMAKERCMD_OPT_NO_JOLIET: 3391 rc = rtFsIsoMakerCmdOptSetJolietUcs2Level(pOpts, 0); 3392 break; 3393 3394 case RTFSISOMAKERCMD_OPT_JOLIET_LEVEL: 3395 rc = rtFsIsoMakerCmdOptSetJolietUcs2Level(pOpts, ValueUnion.u8); 3396 break; 3397 3398 3399 /* 3400 * File attributes. 3401 */ 3402 case RTFSISOMAKERCMD_OPT_RATIONAL_ATTRIBS: 3403 rc = rtFsIsoMakerCmdOptSetAttribInheritStyle(pOpts, false /*fStrict*/); 3404 break; 3405 3406 case RTFSISOMAKERCMD_OPT_STRICT_ATTRIBS: 3407 rc = rtFsIsoMakerCmdOptSetAttribInheritStyle(pOpts, true /*fStrict*/); 3408 break; 3409 3410 case RTFSISOMAKERCMD_OPT_FILE_MODE: 3411 rc = rtFsIsoMakerCmdOptSetFileOrDirMode(pOpts, false /*fDir*/, ValueUnion.u32); 3412 break; 3413 3414 case RTFSISOMAKERCMD_OPT_NO_FILE_MODE: 3415 rc = rtFsIsoMakerCmdOptDisableFileOrDirMode(pOpts, false /*fDir*/); 3416 break; 3417 3235 3418 case RTFSISOMAKERCMD_OPT_DIR_MODE: 3236 3419 rc = rtFsIsoMakerCmdOptSetFileOrDirMode(pOpts, true /*fDir*/, ValueUnion.u32); 3237 3420 break; 3238 3421 3239 case RTFSISOMAKERCMD_OPT_ FILE_MODE:3240 rc = rtFsIsoMakerCmdOpt SetFileOrDirMode(pOpts, false /*fDir*/, ValueUnion.u32);3422 case RTFSISOMAKERCMD_OPT_NO_DIR_MODE: 3423 rc = rtFsIsoMakerCmdOptDisableFileOrDirMode(pOpts, true /*fDir*/); 3241 3424 break; 3242 3425 … … 3245 3428 break; 3246 3429 3430 case RTFSISOMAKERCMD_OPT_CHMOD: 3431 rc = rtFsIsoMakerCmdOptChmod(pOpts, ValueUnion.psz); 3432 break; 3433 3434 case RTFSISOMAKERCMD_OPT_CHOWN: 3435 rc = rtFsIsoMakerCmdOptChangeOwnerGroup(pOpts, ValueUnion.psz, true /*fIsChOwn*/); 3436 break; 3437 3438 case RTFSISOMAKERCMD_OPT_CHGRP: 3439 rc = rtFsIsoMakerCmdOptChangeOwnerGroup(pOpts, ValueUnion.psz, false /*fIsChOwn*/); 3440 break; 3441 3442 3443 /* 3444 * Boot related options. 3445 */ 3446 case 'G': /* --generic-boot <file> */ 3447 rc = rtFsIsoMakerCmdOptGenericBoot(pOpts, ValueUnion.psz); 3448 break; 3449 3450 case RTFSISOMAKERCMD_OPT_ELTORITO_ADD_IMAGE: 3451 rc = rtFsIsoMakerCmdOptEltoritoAddImage(pOpts, ValueUnion.psz); 3452 break; 3453 3454 case 'b': /* --eltorito-boot <boot.img> */ 3455 rc = rtFsIsoMakerCmdOptEltoritoBoot(pOpts, ValueUnion.psz); 3456 break; 3457 3458 case RTFSISOMAKERCMD_OPT_ELTORITO_NEW_ENTRY: 3459 rc = rtFsIsoMakerCmdOptEltoritoNewEntry(pOpts); 3460 break; 3461 3462 case RTFSISOMAKERCMD_OPT_ELTORITO_PLATFORM_ID: 3463 rc = rtFsIsoMakerCmdOptEltoritoPlatformId(pOpts, ValueUnion.psz); 3464 break; 3465 3466 case RTFSISOMAKERCMD_OPT_ELTORITO_NO_BOOT: 3467 rc = rtFsIsoMakerCmdOptEltoritoSetNotBootable(pOpts); 3468 break; 3469 3470 case RTFSISOMAKERCMD_OPT_ELTORITO_FLOPPY_12: 3471 rc = rtFsIsoMakerCmdOptEltoritoSetMediaType(pOpts, ISO9660_ELTORITO_BOOT_MEDIA_TYPE_FLOPPY_1_2_MB); 3472 break; 3473 case RTFSISOMAKERCMD_OPT_ELTORITO_FLOPPY_144: 3474 rc = rtFsIsoMakerCmdOptEltoritoSetMediaType(pOpts, ISO9660_ELTORITO_BOOT_MEDIA_TYPE_FLOPPY_1_44_MB); 3475 break; 3476 case RTFSISOMAKERCMD_OPT_ELTORITO_FLOPPY_288: 3477 rc = rtFsIsoMakerCmdOptEltoritoSetMediaType(pOpts, ISO9660_ELTORITO_BOOT_MEDIA_TYPE_FLOPPY_2_88_MB); 3478 break; 3479 case RTFSISOMAKERCMD_OPT_ELTORITO_HARD_DISK_BOOT: 3480 rc = rtFsIsoMakerCmdOptEltoritoSetMediaType(pOpts, ISO9660_ELTORITO_BOOT_MEDIA_TYPE_HARD_DISK); 3481 break; 3482 case RTFSISOMAKERCMD_OPT_ELTORITO_NO_EMULATION_BOOT: 3483 rc = rtFsIsoMakerCmdOptEltoritoSetMediaType(pOpts, ISO9660_ELTORITO_BOOT_MEDIA_TYPE_NO_EMULATION); 3484 break; 3485 3486 case RTFSISOMAKERCMD_OPT_ELTORITO_LOAD_SEG: 3487 rc = rtFsIsoMakerCmdOptEltoritoSetLoadSegment(pOpts, ValueUnion.u16); 3488 break; 3489 3490 case RTFSISOMAKERCMD_OPT_ELTORITO_LOAD_SIZE: 3491 rc = rtFsIsoMakerCmdOptEltoritoSetLoadSectorCount(pOpts, ValueUnion.u16); 3492 break; 3493 3494 case RTFSISOMAKERCMD_OPT_ELTORITO_INFO_TABLE: 3495 rc = rtFsIsoMakerCmdOptEltoritoEnableBootInfoTablePatching(pOpts); 3496 break; 3497 3498 case 'c': /* --boot-catalog <cd-path> */ 3499 rc = rtFsIsoMakerCmdOptEltoritoSetBootCatalogPath(pOpts, ValueUnion.psz); 3500 break; 3501 3502 3503 /* 3504 * Image/namespace property related options. 3505 */ 3506 case RTFSISOMAKERCMD_OPT_ABSTRACT_FILE_ID: 3507 rc = rtFsIsoMakerCmdOptSetStringProp(pOpts, ValueUnion.psz, RTFSISOMAKERSTRINGPROP_ABSTRACT_FILE_ID); 3508 break; 3509 3510 case 'A': /* --application-id */ 3511 rc = rtFsIsoMakerCmdOptSetStringProp(pOpts, ValueUnion.psz, RTFSISOMAKERSTRINGPROP_APPLICATION_ID); 3512 break; 3513 3514 case RTFSISOMAKERCMD_OPT_BIBLIOGRAPHIC_FILE_ID: 3515 rc = rtFsIsoMakerCmdOptSetStringProp(pOpts, ValueUnion.psz, RTFSISOMAKERSTRINGPROP_BIBLIOGRAPHIC_FILE_ID); 3516 break; 3517 3518 case RTFSISOMAKERCMD_OPT_COPYRIGHT_FILE_ID: 3519 rc = rtFsIsoMakerCmdOptSetStringProp(pOpts, ValueUnion.psz, RTFSISOMAKERSTRINGPROP_COPYRIGHT_FILE_ID); 3520 break; 3521 3522 case 'P': /* -publisher */ 3523 rc = rtFsIsoMakerCmdOptSetStringProp(pOpts, ValueUnion.psz, RTFSISOMAKERSTRINGPROP_PUBLISHER_ID); 3524 break; 3525 3526 case 'p': /* --preparer*/ 3527 rc = rtFsIsoMakerCmdOptSetStringProp(pOpts, ValueUnion.psz, RTFSISOMAKERSTRINGPROP_DATA_PREPARER_ID); 3528 break; 3529 3530 case RTFSISOMAKERCMD_OPT_SYSTEM_ID: 3531 rc = rtFsIsoMakerCmdOptSetStringProp(pOpts, ValueUnion.psz, RTFSISOMAKERSTRINGPROP_SYSTEM_ID); 3532 break; 3533 3534 case RTFSISOMAKERCMD_OPT_VOLUME_ID: /* (should've been '-V') */ 3535 rc = rtFsIsoMakerCmdOptSetStringProp(pOpts, ValueUnion.psz, RTFSISOMAKERSTRINGPROP_VOLUME_ID); 3536 break; 3537 3538 case RTFSISOMAKERCMD_OPT_VOLUME_SET_ID: 3539 rc = rtFsIsoMakerCmdOptSetStringProp(pOpts, ValueUnion.psz, RTFSISOMAKERSTRINGPROP_VOLUME_SET_ID); 3540 break; 3541 3542 3543 /* 3544 * Compatibility. 3545 */ 3247 3546 case RTFSISOMAKERCMD_OPT_GRAFT_POINTS: 3248 3547 rc = rtFsIsoMakerCmdOptNameSetup(pOpts, "iso+joliet+udf+hfs"); … … 3251 3550 case 'l': 3252 3551 if (RTFsIsoMakerGetIso9660Level(pOpts->hIsoMaker) >= 2) 3253 break; 3254 ValueUnion.u8 = 2; 3255 /* fall thru */ 3256 case RTFSISOMAKERCMD_OPT_ISO_LEVEL: 3257 rc = RTFsIsoMakerSetIso9660Level(pOpts->hIsoMaker, ValueUnion.u8); 3552 rc = rtFsIsoMakerCmdOptSetIsoLevel(pOpts, 2); 3553 break; 3554 3555 case 'R': 3556 rc = rtFsIsoMakerCmdOptSetPrimaryRockLevel(pOpts, 2); 3557 if (RT_SUCCESS(rc)) 3558 rc = rtFsIsoMakerCmdOptSetAttribInheritStyle(pOpts, true /*fStrict*/); 3559 break; 3560 3561 case 'r': 3562 rc = rtFsIsoMakerCmdOptSetPrimaryRockLevel(pOpts, 2); 3563 if (RT_SUCCESS(rc)) 3564 rc = rtFsIsoMakerCmdOptSetAttribInheritStyle(pOpts, false /*fStrict*/); 3565 break; 3566 3567 case RTFSISOMAKERCMD_OPT_PAD: 3568 rc = RTFsIsoMakerSetImagePadding(pOpts->hIsoMaker, 150); 3258 3569 if (RT_FAILURE(rc)) 3259 rc = rtFsIsoMakerCmdErrorRc(pOpts, rc, "Failed to set ISO level to %d: %Rrc", ValueUnion.u8, rc); 3570 rc = rtFsIsoMakerCmdErrorRc(pOpts, rc, "RTFsIsoMakerSetImagePadding failed: %Rrc", rc); 3571 break; 3572 3573 case RTFSISOMAKERCMD_OPT_NO_PAD: 3574 rc = RTFsIsoMakerSetImagePadding(pOpts->hIsoMaker, 0); 3575 if (RT_FAILURE(rc)) 3576 rc = rtFsIsoMakerCmdErrorRc(pOpts, rc, "RTFsIsoMakerSetImagePadding failed: %Rrc", rc); 3577 break; 3578 3579 3580 /* 3581 * VISO specific 3582 */ 3583 case RTFSISOMAKERCMD_OPT_IPRT_ISO_MAKER_FILE_MARKER: 3584 /* ignored */ 3585 break; 3586 3587 3588 /* 3589 * Testing. 3590 */ 3591 case RTFSISOMAKERCMD_OPT_OUTPUT_BUFFER_SIZE: /* --output-buffer-size {cb} */ 3592 pOpts->cbOutputReadBuffer = ValueUnion.u32; 3593 break; 3594 3595 case RTFSISOMAKERCMD_OPT_RANDOM_OUTPUT_BUFFER_SIZE: /* --random-output-buffer-size */ 3596 pOpts->fRandomOutputReadBufferSize = true; 3597 break; 3598 3599 case RTFSISOMAKERCMD_OPT_RANDOM_ORDER_VERIFICATION: /* --random-order-verficiation {cb} */ 3600 pOpts->cbRandomOrderVerifciationBlock = ValueUnion.u32; 3260 3601 break; 3261 3602
Note:
See TracChangeset
for help on using the changeset viewer.