儲存庫 vbox 的更動 67445
圖例:
- 未更動
- 新增
- 刪除
-
trunk/include/iprt/fsisomaker.h
r67437 r67445 308 308 RTDECL(int) RTFsIsoMakerAddFileWithVfsFile(RTFSISOMAKER hIsoMaker, const char *pszFile, RTVFSFILE hVfsFileSrc, uint32_t *pidxObj); 309 309 310 311 /** 312 * Set the validation entry of the boot catalog (this is the first entry). 313 * 314 * @returns IPRT status code. 315 * @param hIsoMaker The ISO maker handle. 316 * @param idPlatform The platform ID 317 * (ISO9660_ELTORITO_PLATFORM_ID_XXX). 318 * @param pszString CD/DVD-ROM identifier. Optional. 319 */ 320 RTDECL(int) RTFsIsoMakerBootCatSetValidationEntry(RTFSISOMAKER hIsoMaker, uint8_t idPlatform, const char *pszString); 321 322 /** 323 * Set the validation entry of the boot catalog (this is the first entry). 324 * 325 * @returns IPRT status code. 326 * @param hIsoMaker The ISO maker handle. 327 * @param idxBootCat The boot catalog entry. Zero and two are 328 * invalid. Must be less than 63. 329 * @param idxImageObj The configuration index of the boot image. 330 * @param bBootMediaType The media type and flag (not for entry 1) 331 * (ISO9660_ELTORITO_BOOT_MEDIA_TYPE_XXX, 332 * ISO9660_ELTORITO_BOOT_MEDIA_F_XXX). 333 * @param bSystemType The partitiona table system ID. 334 * @param fBootable Whether it's a bootable entry or if we just want 335 * the BIOS to setup the emulation without booting 336 * it. 337 * @param uLoadSeg The load address divided by 0x10 (i.e. the real 338 * mode segment number). 339 * @param cSectorsToLoad Number of emulated sectors to load. 340 */ 341 RTDECL(int) RTFsIsoMakerBootCatSetSectionEntry(RTFSISOMAKER hIsoMaker, uint32_t idxBootCat, uint32_t idxImageObj, 342 uint8_t bBootMediaType, uint8_t bSystemType, bool fBootable, 343 uint16_t uLoadSeg, uint16_t cSectorsToLoad); 344 345 /** 346 * Set the validation entry of the boot catalog (this is the first entry). 347 * 348 * @returns IPRT status code. 349 * @param hIsoMaker The ISO maker handle. 350 * @param idxBootCat The boot catalog entry. 351 * @param idPlatform The platform ID 352 * (ISO9660_ELTORITO_PLATFORM_ID_XXX). 353 * @param pszString CD/DVD-ROM identifier. Optional. 354 */ 355 RTDECL(int) RTFsIsoMakerBootCatSetSectionHeaderEntry(RTFSISOMAKER hIsoMaker, uint32_t idxBootCat, uint32_t cEntries, 356 uint8_t idPlatform, const char *pszString); 357 310 358 /** 311 359 * Finalizes the image. -
trunk/include/iprt/mangling.h
r67437 r67445 924 924 # define RTFsIsoMakerRetain RT_MANGLER(RTFsIsoMakerRetain) 925 925 # define RTFsIsoMakerRelease RT_MANGLER(RTFsIsoMakerRelease) 926 # define RTFsIsoMakerBootCatSetValidationEntry RT_MANGLER(RTFsIsoMakerBootCatSetValidationEntry) 927 # define RTFsIsoMakerBootCatSetSectionEntry RT_MANGLER(RTFsIsoMakerBootCatSetSectionEntry) 928 # define RTFsIsoMakerBootCatSetSectionHeaderEntry RT_MANGLER(RTFsIsoMakerBootCatSetSectionHeaderEntry) 926 929 # define RTFsIsoMakerQueryObjIdxForBootCatalog RT_MANGLER(RTFsIsoMakerQueryObjIdxForBootCatalog) 927 930 # define RTFsIsoMakerSetIso9660Level RT_MANGLER(RTFsIsoMakerSetIso9660Level) -
trunk/src/VBox/Runtime/common/fs/isomaker.cpp
r67437 r67445 331 331 /** Used to make sure things like the boot catalog stays in the image even if 332 332 * it's not mapped into any of the namespaces. */ 333 bool fNotOrphan;333 uint32_t cNotOrphan; 334 334 } RTFSISOMAKEROBJ; 335 335 … … 455 455 /** The boot catalog file. */ 456 456 PRTFSISOMAKERFILE pBootCatFile; 457 457 /** Per boot catalog entry data needed for updating offsets when finalizing. */ 458 struct 459 { 460 /** The type (ISO9660_ELTORITO_HEADER_ID_VALIDATION_ENTRY, 461 * ISO9660_ELTORITO_HEADER_ID_SECTION_HEADER, 462 * ISO9660_ELTORITO_HEADER_ID_FINAL_SECTION_HEADER, 463 * ISO9660_ELTORITO_BOOT_INDICATOR_BOOTABLE or 464 * ISO9660_ELTORITO_BOOT_INDICATOR_NOT_BOOTABLE). */ 465 uint8_t bType; 466 /** Number of entries related to this one. This is zero for unused entries, 467 * 2 for the validation entry, 2+ for section headers, and 1 for images. */ 468 uint8_t cEntries; 469 /** The boot file. */ 470 PRTFSISOMAKERFILE pBootFile; 471 } aBootCatEntries[64]; 458 472 /** @} */ 459 473 … … 2565 2579 pObj->pHfsName = NULL; 2566 2580 pObj->idxObj = pThis->cObjects++; 2567 pObj-> fNotOrphan = false;2581 pObj->cNotOrphan = 0; 2568 2582 if (pObjInfo) 2569 2583 { … … 2919 2933 pFile->u.hVfsFile = hVfsFile; 2920 2934 pFile->pBootInfoTable = NULL; 2921 pFile->Core. fNotOrphan = true;2935 pFile->Core.cNotOrphan = 1; 2922 2936 2923 2937 /* Save file pointer and we're done. */ … … 2961 2975 2962 2976 2977 /** 2978 * Set the validation entry of the boot catalog (this is the first entry). 2979 * 2980 * @returns IPRT status code. 2981 * @param hIsoMaker The ISO maker handle. 2982 * @param idPlatform The platform ID 2983 * (ISO9660_ELTORITO_PLATFORM_ID_XXX). 2984 * @param pszString CD/DVD-ROM identifier. Optional. 2985 */ 2986 RTDECL(int) RTFsIsoMakerBootCatSetValidationEntry(RTFSISOMAKER hIsoMaker, uint8_t idPlatform, const char *pszString) 2987 { 2988 /* 2989 * Validate input. 2990 */ 2991 PRTFSISOMAKERINT pThis = hIsoMaker; 2992 RTFSISOMAKER_ASSERT_VALID_HANDLE_RET(pThis); 2993 size_t cchString = 0; 2994 if (pszString) 2995 { 2996 cchString = RTStrCalcLatin1Len(pszString); 2997 AssertReturn(cchString < RT_SIZEOFMEMB(ISO9660ELTORITOVALIDATIONENTRY, achId), VERR_OUT_OF_RANGE); 2998 } 2999 3000 /* 3001 * Make sure we've got a boot file. 3002 */ 3003 int rc = rtFsIsoMakerEnsureBootCatFile(pThis); 3004 if (RT_SUCCESS(rc)) 3005 { 3006 /* 3007 * Construct the entry data. 3008 */ 3009 ISO9660ELTORITOVALIDATIONENTRY Entry; 3010 Entry.bHeaderId = ISO9660_ELTORITO_HEADER_ID_VALIDATION_ENTRY; 3011 Entry.bPlatformId = idPlatform; 3012 Entry.u16Reserved = 0; 3013 RT_ZERO(Entry.achId); 3014 if (cchString) 3015 { 3016 char *pszTmp = Entry.achId; 3017 rc = RTStrToLatin1Ex(pszString, RTSTR_MAX, &pszTmp, sizeof(Entry.achId), NULL); 3018 AssertRC(rc); 3019 } 3020 Entry.u16Checksum = 0; 3021 Entry.bKey1 = ISO9660_ELTORITO_KEY_BYTE_1; 3022 Entry.bKey2 = ISO9660_ELTORITO_KEY_BYTE_2; 3023 3024 /* Calc checksum. */ 3025 uint16_t uSum = 0; 3026 uint16_t const *pu16Src = (uint16_t const *)&Entry; 3027 uint16_t cLeft = sizeof(Entry) / sizeof(uint16_t); 3028 while (cLeft-- > 0) 3029 { 3030 uSum += RT_LE2H_U16(*pu16Src); 3031 pu16Src++; 3032 } 3033 Entry.u16Checksum = RT_H2LE_U16((uint16_t)0 - uSum); 3034 3035 /* 3036 * Write the entry and update our internal tracker. 3037 */ 3038 rc = RTVfsFileWriteAt(pThis->pBootCatFile->u.hVfsFile, 0, &Entry, sizeof(Entry), NULL); 3039 if (RT_SUCCESS(rc)) 3040 { 3041 pThis->aBootCatEntries[0].bType = ISO9660_ELTORITO_HEADER_ID_VALIDATION_ENTRY; 3042 pThis->aBootCatEntries[0].cEntries = 2; 3043 } 3044 } 3045 return rc; 3046 } 3047 3048 3049 /** 3050 * Set the validation entry of the boot catalog (this is the first entry). 3051 * 3052 * @returns IPRT status code. 3053 * @param hIsoMaker The ISO maker handle. 3054 * @param idxBootCat The boot catalog entry. Zero and two are 3055 * invalid. Must be less than 63. 3056 * @param idxImageObj The configuration index of the boot image. 3057 * @param bBootMediaType The media type and flag (not for entry 1) 3058 * (ISO9660_ELTORITO_BOOT_MEDIA_TYPE_XXX, 3059 * ISO9660_ELTORITO_BOOT_MEDIA_F_XXX). 3060 * @param bSystemType The partitiona table system ID. 3061 * @param fBootable Whether it's a bootable entry or if we just want 3062 * the BIOS to setup the emulation without booting 3063 * it. 3064 * @param uLoadSeg The load address divided by 0x10 (i.e. the real 3065 * mode segment number). 3066 * @param cSectorsToLoad Number of emulated sectors to load. 3067 */ 3068 RTDECL(int) RTFsIsoMakerBootCatSetSectionEntry(RTFSISOMAKER hIsoMaker, uint32_t idxBootCat, uint32_t idxImageObj, 3069 uint8_t bBootMediaType, uint8_t bSystemType, bool fBootable, 3070 uint16_t uLoadSeg, uint16_t cSectorsToLoad) 3071 { 3072 /* 3073 * Validate input. 3074 */ 3075 PRTFSISOMAKERINT pThis = hIsoMaker; 3076 RTFSISOMAKER_ASSERT_VALID_HANDLE_RET(pThis); 3077 PRTFSISOMAKERFILE pFile = (PRTFSISOMAKERFILE)rtFsIsoMakerIndexToObj(pThis, idxImageObj); 3078 AssertReturn(pFile, VERR_OUT_OF_RANGE); 3079 AssertReturn((bBootMediaType & ISO9660_ELTORITO_BOOT_MEDIA_TYPE_MASK) <= ISO9660_ELTORITO_BOOT_MEDIA_TYPE_HARD_DISK, 3080 VERR_INVALID_PARAMETER); 3081 AssertReturn(!(bBootMediaType & ISO9660_ELTORITO_BOOT_MEDIA_F_MASK) || idxBootCat != 1, 3082 VERR_INVALID_PARAMETER); 3083 3084 AssertReturn(idxBootCat != 0 && idxBootCat != 2 && idxBootCat < RT_ELEMENTS(pThis->aBootCatEntries) - 1U, VERR_OUT_OF_RANGE); 3085 3086 /* 3087 * Make sure we've got a boot file. 3088 */ 3089 int rc = rtFsIsoMakerEnsureBootCatFile(pThis); 3090 if (RT_SUCCESS(rc)) 3091 { 3092 /* 3093 * Construct the entry. 3094 */ 3095 ISO9660ELTORITOSECTIONENTRY Entry; 3096 Entry.bBootIndicator = fBootable ? ISO9660_ELTORITO_BOOT_INDICATOR_BOOTABLE 3097 : ISO9660_ELTORITO_BOOT_INDICATOR_NOT_BOOTABLE; 3098 Entry.bBootMediaType = bBootMediaType; 3099 Entry.uLoadSeg = RT_H2LE_U16(uLoadSeg); 3100 Entry.bSystemType = bSystemType; 3101 Entry.bUnused = 0; 3102 Entry.cEmulatedSectorsToLoad = RT_H2LE_U16(cSectorsToLoad); 3103 Entry.offBootImage = 0; 3104 Entry.bSelectionCriteriaType = ISO9660_ELTORITO_SEL_CRIT_TYPE_NONE; 3105 RT_ZERO(Entry.abSelectionCriteria); 3106 3107 /* 3108 * Write it and update our internal tracker. 3109 */ 3110 rc = RTVfsFileWriteAt(pThis->pBootCatFile->u.hVfsFile, 32 * idxBootCat, &Entry, sizeof(Entry), NULL); 3111 if (RT_SUCCESS(rc)) 3112 { 3113 if (pThis->aBootCatEntries[idxBootCat].pBootFile != pFile) 3114 { 3115 if (pThis->aBootCatEntries[idxBootCat].pBootFile) 3116 pThis->aBootCatEntries[idxBootCat].pBootFile->Core.cNotOrphan--; 3117 pFile->Core.cNotOrphan++; 3118 pThis->aBootCatEntries[idxBootCat].pBootFile = pFile; 3119 } 3120 3121 pThis->aBootCatEntries[idxBootCat].bType = Entry.bBootIndicator; 3122 pThis->aBootCatEntries[idxBootCat].cEntries = 1; 3123 } 3124 } 3125 return rc; 3126 } 3127 3128 3129 /** 3130 * Set the validation entry of the boot catalog (this is the first entry). 3131 * 3132 * @returns IPRT status code. 3133 * @param hIsoMaker The ISO maker handle. 3134 * @param idxBootCat The boot catalog entry. 3135 * @param idPlatform The platform ID 3136 * (ISO9660_ELTORITO_PLATFORM_ID_XXX). 3137 * @param pszString CD/DVD-ROM identifier. Optional. 3138 */ 3139 RTDECL(int) RTFsIsoMakerBootCatSetSectionHeaderEntry(RTFSISOMAKER hIsoMaker, uint32_t idxBootCat, uint32_t cEntries, 3140 uint8_t idPlatform, const char *pszString) 3141 { 3142 RT_NOREF(hIsoMaker, idxBootCat, cEntries, idPlatform, pszString); 3143 return VERR_NOT_IMPLEMENTED; 3144 } 3145 3146 3147 2963 3148 2964 3149 … … 2991 3176 || pCur->pUdfName 2992 3177 || pCur->pHfsName 2993 || pCur-> fNotOrphan)3178 || pCur->cNotOrphan > 0) 2994 3179 { /* likely */ } 2995 3180 else -
trunk/src/VBox/Runtime/common/fs/isomakercmd.cpp
r67437 r67445 285 285 } u; 286 286 } RTFSISOMKCMDELTORITOENTRY; 287 /** Pointer to an el torito boot entry. */ 288 typedef RTFSISOMKCMDELTORITOENTRY *PRTFSISOMKCMDELTORITOENTRY; 287 289 288 290 /** … … 1335 1337 if (idxObj != UINT32_MAX) 1336 1338 { 1337 intrc = RTFsIsoMakerObjRemove(pOpts->hIsoMaker, idxObj);1339 rc = RTFsIsoMakerObjRemove(pOpts->hIsoMaker, idxObj); 1338 1340 if (RT_FAILURE(rc)) 1339 1341 return rtFsIsoMakerCmdErrorRc(pOpts, rc, "Failed to remove '%s': %Rrc", pszSpec, rc); … … 1354 1356 uint32_t offError; 1355 1357 RTERRINFOSTATIC ErrInfo; 1356 intrc = RTVfsChainQueryInfo(pszSrc, &ObjInfo, RTFSOBJATTRADD_UNIX,1357 1358 rc = RTVfsChainQueryInfo(pszSrc, &ObjInfo, RTFSOBJATTRADD_UNIX, 1359 RTPATH_F_FOLLOW_LINK, &offError, RTErrInfoInitStatic(&ErrInfo)); 1358 1360 if (RT_FAILURE(rc)) 1359 1361 return rtFsIsoMakerCmdChainError(pOpts, "RTVfsChainQueryInfo", pszSrc, rc, offError, &ErrInfo.Core); … … 1747 1749 * Locate and configure the boot images first. 1748 1750 */ 1749 for (uint32_t idxBootCat = 1; idxBootCat < pOpts->cBootCatEntries; idxBootCat++) 1750 if ( pOpts->aBootCatEntries[idxBootCat].enmType == RTFSISOMKCMDELTORITOENTRY::kEntryType_Default 1751 || pOpts->aBootCatEntries[idxBootCat].enmType == RTFSISOMKCMDELTORITOENTRY::kEntryType_Section) 1751 int rc; 1752 PRTFSISOMKCMDELTORITOENTRY pBootCatEntry = &pOpts->aBootCatEntries[1]; 1753 for (uint32_t idxBootCat = 1; idxBootCat < pOpts->cBootCatEntries; idxBootCat++, pBootCatEntry++) 1754 if ( pBootCatEntry->enmType == RTFSISOMKCMDELTORITOENTRY::kEntryType_Default 1755 || pBootCatEntry->enmType == RTFSISOMKCMDELTORITOENTRY::kEntryType_Section) 1752 1756 { 1753 1757 /* Make sure we've got a boot image. */ 1754 uint32_t idxImageObj = p Opts->aBootCatEntries[idxBootCat].u.Section.idxImageObj;1758 uint32_t idxImageObj = pBootCatEntry->u.Section.idxImageObj; 1755 1759 if (idxImageObj == UINT32_MAX) 1756 1760 { 1757 const char *pszBootImage = p Opts->aBootCatEntries[idxBootCat].u.Section.pszImageNameInIso;1761 const char *pszBootImage = pBootCatEntry->u.Section.pszImageNameInIso; 1758 1762 if (pszBootImage == NULL) 1759 1763 return rtFsIsoMakerCmdSyntaxError(pOpts, "No image name given for boot catalog entry #%u", idxBootCat); … … 1763 1767 return rtFsIsoMakerCmdSyntaxError(pOpts, "Unable to locate image for boot catalog entry #%u: %s", 1764 1768 idxBootCat, pszBootImage); 1765 p Opts->aBootCatEntries[idxBootCat].u.Section.idxImageObj = idxImageObj;1769 pBootCatEntry->u.Section.idxImageObj = idxImageObj; 1766 1770 } 1767 1771 1768 1772 /* Enable patching it? */ 1769 if (p Opts->aBootCatEntries[idxBootCat].u.Section.fInsertBootInfoTable)1773 if (pBootCatEntry->u.Section.fInsertBootInfoTable) 1770 1774 { 1771 intrc = RTFsIsoMakerObjEnableBootInfoTablePatching(pOpts->hIsoMaker, idxImageObj, true);1775 rc = RTFsIsoMakerObjEnableBootInfoTablePatching(pOpts->hIsoMaker, idxImageObj, true); 1772 1776 if (RT_FAILURE(rc)) 1773 1777 return rtFsIsoMakerCmdErrorRc(pOpts, rc, … … 1777 1781 1778 1782 /* Figure out the floppy type given the object size. */ 1779 if (p Opts->aBootCatEntries[idxBootCat].u.Section.bBootMediaType == ISO9660_ELTORITO_BOOT_MEDIA_TYPE_MASK)1783 if (pBootCatEntry->u.Section.bBootMediaType == ISO9660_ELTORITO_BOOT_MEDIA_TYPE_MASK) 1780 1784 { 1781 1785 uint64_t cbImage; 1782 intrc = RTFsIsoMakerObjQueryDataSize(pOpts->hIsoMaker, idxImageObj, &cbImage);1786 rc = RTFsIsoMakerObjQueryDataSize(pOpts->hIsoMaker, idxImageObj, &cbImage); 1783 1787 if (RT_FAILURE(rc)) 1784 1788 return rtFsIsoMakerCmdErrorRc(pOpts, rc, "RTFsIsoMakerObjGetDataSize failed on entry #%u: %Rrc\n", 1785 1789 idxBootCat, rc); 1786 1790 if (cbImage == 1228800) 1787 p Opts->aBootCatEntries[idxBootCat].u.Section.bBootMediaType = ISO9660_ELTORITO_BOOT_MEDIA_TYPE_FLOPPY_1_2_MB;1791 pBootCatEntry->u.Section.bBootMediaType = ISO9660_ELTORITO_BOOT_MEDIA_TYPE_FLOPPY_1_2_MB; 1788 1792 else if (cbImage <= 1474560) 1789 p Opts->aBootCatEntries[idxBootCat].u.Section.bBootMediaType = ISO9660_ELTORITO_BOOT_MEDIA_TYPE_FLOPPY_1_44_MB;1793 pBootCatEntry->u.Section.bBootMediaType = ISO9660_ELTORITO_BOOT_MEDIA_TYPE_FLOPPY_1_44_MB; 1790 1794 else if (cbImage <= 2949120) 1791 p Opts->aBootCatEntries[idxBootCat].u.Section.bBootMediaType = ISO9660_ELTORITO_BOOT_MEDIA_TYPE_FLOPPY_2_88_MB;1795 pBootCatEntry->u.Section.bBootMediaType = ISO9660_ELTORITO_BOOT_MEDIA_TYPE_FLOPPY_2_88_MB; 1792 1796 else 1793 p Opts->aBootCatEntries[idxBootCat].u.Section.bBootMediaType = ISO9660_ELTORITO_BOOT_MEDIA_TYPE_HARD_DISK;1797 pBootCatEntry->u.Section.bBootMediaType = ISO9660_ELTORITO_BOOT_MEDIA_TYPE_HARD_DISK; 1794 1798 } 1795 1799 } … … 1798 1802 * Add the boot catalog entries. 1799 1803 */ 1800 1804 pBootCatEntry = &pOpts->aBootCatEntries[0]; 1805 for (uint32_t idxBootCat = 0; idxBootCat < pOpts->cBootCatEntries; idxBootCat++, pBootCatEntry++) 1806 switch (pBootCatEntry->enmType) 1807 { 1808 case RTFSISOMKCMDELTORITOENTRY::kEntryType_Validation: 1809 Assert(idxBootCat == 0); 1810 rc = RTFsIsoMakerBootCatSetValidationEntry(pOpts->hIsoMaker, pBootCatEntry->u.Validation.idPlatform, 1811 pBootCatEntry->u.Validation.pszString); 1812 if (RT_FAILURE(rc)) 1813 return rtFsIsoMakerCmdErrorRc(pOpts, rc, "RTFsIsoMakerBootCatSetValidationEntry failed: %Rrc\n", rc); 1814 break; 1815 1816 case RTFSISOMKCMDELTORITOENTRY::kEntryType_Default: 1817 case RTFSISOMKCMDELTORITOENTRY::kEntryType_Section: 1818 Assert(pBootCatEntry->enmType == RTFSISOMKCMDELTORITOENTRY::kEntryType_Default ? idxBootCat == 1 : idxBootCat > 2); 1819 rc = RTFsIsoMakerBootCatSetSectionEntry(pOpts->hIsoMaker, idxBootCat, 1820 pBootCatEntry->u.Section.idxImageObj, 1821 pBootCatEntry->u.Section.bBootMediaType, 1822 pBootCatEntry->u.Section.bSystemType, 1823 pBootCatEntry->u.Section.fBootable, 1824 pBootCatEntry->u.Section.uLoadSeg, 1825 pBootCatEntry->u.Section.cSectorsToLoad); 1826 if (RT_FAILURE(rc)) 1827 return rtFsIsoMakerCmdErrorRc(pOpts, rc, "RTFsIsoMakerBootCatSetSectionEntry failed on entry #%u: %Rrc\n", 1828 idxBootCat, rc); 1829 break; 1830 1831 case RTFSISOMKCMDELTORITOENTRY::kEntryType_SectionHeader: 1832 { 1833 uint32_t cEntries = 1; 1834 while ( idxBootCat + cEntries < pOpts->cBootCatEntries 1835 && pBootCatEntry[cEntries].enmType != RTFSISOMKCMDELTORITOENTRY::kEntryType_SectionHeader) 1836 cEntries++; 1837 cEntries--; 1838 1839 Assert(idxBootCat > 1); 1840 rc = RTFsIsoMakerBootCatSetSectionHeaderEntry(pOpts->hIsoMaker, idxBootCat, cEntries, 1841 pBootCatEntry->u.SectionHeader.idPlatform, 1842 pBootCatEntry->u.SectionHeader.pszString); 1843 if (RT_FAILURE(rc)) 1844 return rtFsIsoMakerCmdErrorRc(pOpts, rc, 1845 "RTFsIsoMakerBootCatSetSectionHeaderEntry failed on entry #%u: %Rrc\n", 1846 idxBootCat, rc); 1847 break; 1848 } 1849 1850 default: 1851 AssertFailedReturn(VERR_INTERNAL_ERROR_3); 1852 } 1801 1853 1802 1854 return VINF_SUCCESS; … … 2002 2054 rc = rtFsIsoMakerCmdErrorRc(&Opts, VERR_INVALID_PARAMETER, "No output file specified (--output <file>)"); 2003 2055 } 2056 2057 /* 2058 * Final actions. 2059 */ 2060 if (RT_SUCCESS(rc)) 2061 rc = rtFsIsoMakerCmdOptEltoritoCommitBootCatalog(&Opts); 2004 2062 if (RT_SUCCESS(rc)) 2005 2063 {
注意:
瀏覽 TracChangeset
來幫助您使用更動檢視器