VirtualBox

Changeset 67434 in vbox


Ignore:
Timestamp:
Jun 16, 2017 9:51:43 AM (8 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
116164
Message:

IPRT: More ISO maker code (booting related).

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Runtime/common/fs/isomakercmd.cpp

    r67427 r67434  
    9696    RTFSISOMAKERCMD_OPT_NO_JOLIET,
    9797
     98    RTFSISOMAKERCMD_OPT_ELTORITO_NEW_ENTRY,
     99    RTFSISOMAKERCMD_OPT_ELTORITO_ADD_IMAGE,
    98100    RTFSISOMAKERCMD_OPT_ELTORITO_FLOPPY_12,
    99101    RTFSISOMAKERCMD_OPT_ELTORITO_FLOPPY_144,
     
    117119    RTFSISOMAKERCMD_OPT_DIR_MODE,
    118120    RTFSISOMAKERCMD_OPT_DVD_VIDEO,
    119     RTFSISOMAKERCMD_OPT_ELTORITO_ALT_BOOT,
    120121    RTFSISOMAKERCMD_OPT_ELTORITO_PLATFORM_ID,
    121122    RTFSISOMAKERCMD_OPT_ELTORITO_HARD_DISK_BOOT,
     
    234235} RTFSISOMAKERCMDOPT;
    235236
     237
     238/**
     239 * El Torito boot entry.
     240 */
     241typedef struct RTFSISOMKCMDELTORITOENTRY
     242{
     243    /** The type of this entry.   */
     244    enum
     245    {
     246        kEntryType_Invalid = 0,
     247        kEntryType_Validation,      /**< Same as kEntryType_SectionHeader, just hardcoded #0. */
     248        kEntryType_SectionHeader,
     249        kEntryType_Default,         /**< Same as kEntryType_Section, just hardcoded #1. */
     250        kEntryType_Section
     251    }                   enmType;
     252    /** Type specific data. */
     253    union
     254    {
     255        struct
     256        {
     257            /** The platform ID (ISO9660_ELTORITO_PLATFORM_ID_XXX).    */
     258            uint8_t     idPlatform;
     259            /** Some string for the header. */
     260            const char *pszString;
     261        }               Validation,
     262                        SectionHeader;
     263        struct
     264        {
     265            /** The name of the boot image wihtin the ISO (-b option). */
     266            const char *pszImageNameInIso;
     267            /** The object ID of the image in the ISO.  This is set to UINT32_MAX when
     268             * pszImageNameInIso is used (i.e. -b option) and we've delayed everything
     269             * boot related till after all files have been added to the image. */
     270            uint32_t    idImage;
     271            /** Whether to insert boot info table into the image. */
     272            bool        fInsertBootInfoTable;
     273            /** Bootble or not.  Possible to make BIOS set up emulation w/o booting it. */
     274            bool        fBootable;
     275            /** The media type (ISO9660_ELTORITO_BOOT_MEDIA_TYPE_XXX) and flags
     276             * (ISO9660_ELTORITO_BOOT_MEDIA_F_XXX). */
     277            uint8_t     bBootMediaType;
     278            /** File system / partition type. */
     279            uint8_t     bSystemType;
     280            /** Load address divided by 0x10. */
     281            uint16_t    uLoadSeg;
     282            /** Number of sectors (512) to load. */
     283            uint16_t    cSectorsToLoad;
     284        }               Section,
     285                        Default;
     286    } u;
     287} RTFSISOMKCMDELTORITOENTRY;
     288
    236289/**
    237290 * ISO maker command options & state.
     
    277330    /** @name Booting related options and state.
    278331     * @{ */
    279     /** The current El Torito boot entry, UINT32_MAX if none active.
    280      * An entry starts when --eltorito-boot/-b is used the first time, or when
    281      * --eltorito-alt-boot is used, or when --elptorito-platform-id is used
    282      * with a different value after -b is specified. */
    283     uint32_t            idEltoritoEntry;
    284     /** The previous --eltorito-platform-id option. */
    285     const char         *pszEltoritoPlatformId;
     332    /** Number of boot catalog entries (aBootCatEntries). */
     333    uint32_t                    cBootCatEntries;
     334    /** Number of boot catalog entries we're done with (i.e. added to hIsoMaker). */
     335    uint32_t                    cBootCatEntriesDone;
     336    /** Boot catalog entries. */
     337    RTFSISOMKCMDELTORITOENTRY   aBootCatEntries[64];
    286338    /** @} */
    287339
     
    329381    { "--name-setup",                   RTFSISOMAKERCMD_OPT_NAME_SETUP,                     RTGETOPT_REQ_STRING  },
    330382    { "--no-joliet",                    RTFSISOMAKERCMD_OPT_NO_JOLIET,                      RTGETOPT_REQ_NOTHING },
     383    { "--eltorito-new-entry",           RTFSISOMAKERCMD_OPT_ELTORITO_NEW_ENTRY,             RTGETOPT_REQ_NOTHING },
     384    { "--eltorito-add-image",           RTFSISOMAKERCMD_OPT_ELTORITO_ADD_IMAGE,             RTGETOPT_REQ_NOTHING },
     385    { "--eltorito-floppy-12",           RTFSISOMAKERCMD_OPT_ELTORITO_FLOPPY_12,             RTGETOPT_REQ_NOTHING },
     386    { "--eltorito-floppy-144",          RTFSISOMAKERCMD_OPT_ELTORITO_FLOPPY_144,            RTGETOPT_REQ_NOTHING },
     387    { "--eltorito-floppy-288",          RTFSISOMAKERCMD_OPT_ELTORITO_FLOPPY_288,            RTGETOPT_REQ_NOTHING },
    331388
    332389#define DD(a_szLong, a_chShort, a_fFlags) { a_szLong, a_chShort, a_fFlags  }, { "-" a_szLong, a_chShort, a_fFlags  }
     
    338395    { "--generic-boot",                 'G',                                                RTGETOPT_REQ_STRING  },
    339396    DD("-eltorito-boot",                'b',                                                RTGETOPT_REQ_STRING  ),
    340     DD("-eltorito-alt-boot",            RTFSISOMAKERCMD_OPT_ELTORITO_ALT_BOOT,              RTGETOPT_REQ_NOTHING ),
     397    DD("-eltorito-alt-boot",            RTFSISOMAKERCMD_OPT_ELTORITO_NEW_ENTRY,             RTGETOPT_REQ_NOTHING ),
    341398    DD("-eltorito-platform-id",         RTFSISOMAKERCMD_OPT_ELTORITO_PLATFORM_ID,           RTGETOPT_REQ_STRING  ),
    342399    DD("-hard-disk-boot",               RTFSISOMAKERCMD_OPT_ELTORITO_HARD_DISK_BOOT,        RTGETOPT_REQ_NOTHING ),
     
    12371294
    12381295
    1239 static int rtFsIsoMakerCmdOptEltoritoBoot(PRTFSISOMAKERCMDOPTS pOpts, const char *pszBootImage)
    1240 {
    1241     RT_NOREF(pOpts, pszBootImage);
    1242     return VERR_NOT_IMPLEMENTED;
    1243 }
    1244 
    1245 static int rtFsIsoMakerCmdOptEltoritoPlatformId(PRTFSISOMAKERCMDOPTS pOpts, const char *pszPlatformId)
    1246 {
    1247     RT_NOREF(pOpts, pszPlatformId);
    1248     return VERR_NOT_IMPLEMENTED;
    1249 }
    1250 
    1251 static int rtFsIsoMakerCmdOptEltoritoSetNotBootable(PRTFSISOMAKERCMDOPTS pOpts)
    1252 {
    1253     RT_NOREF(pOpts);
    1254     return VERR_NOT_IMPLEMENTED;
    1255 }
    1256 
    1257 static int rtFsIsoMakerCmdOptEltoritoSetMediaType(PRTFSISOMAKERCMDOPTS pOpts, uint8_t bMediaType)
    1258 {
    1259     RT_NOREF(pOpts, bMediaType);
    1260     return VERR_NOT_IMPLEMENTED;
    1261 }
    1262 
    1263 static int rtFsIsoMakerCmdOptEltoritoSetLoadSegment(PRTFSISOMAKERCMDOPTS pOpts, uint16_t uSeg)
    1264 {
    1265     RT_NOREF(pOpts, uSeg);
    1266     return VERR_NOT_IMPLEMENTED;
    1267 }
    1268 
    1269 static int rtFsIsoMakerCmdOptEltoritoSetLoadSectorCount(PRTFSISOMAKERCMDOPTS pOpts, uint16_t cSectors)
    1270 {
    1271     RT_NOREF(pOpts, cSectors);
    1272     return VERR_NOT_IMPLEMENTED;
    1273 }
    1274 
    1275 static int rtFsIsoMakerCmdOptEltoritoEnableBootInfoTablePatching(PRTFSISOMAKERCMDOPTS pOpts)
    1276 {
    1277     RT_NOREF(pOpts);
    1278     return VERR_NOT_IMPLEMENTED;
    1279 }
    1280 
     1296/**
     1297 * Deals with: --boot-catalog <path-spec>
     1298 *
     1299 * This enters the boot catalog into the namespaces of the image.  The path-spec
     1300 * is similar to what rtFsIsoMakerCmdAddSomething processes, only there isn't a
     1301 * source file part.
     1302 *
     1303 * @returns IPRT status code
     1304 * @param   pOpts               The ISO maker command instance.
     1305 * @param   pszGenericBootImage The generic boot image source.
     1306 */
    12811307static int rtFsIsoMakerCmdOptEltoritoSetBootCatalogPath(PRTFSISOMAKERCMDOPTS pOpts, const char *pszBootCat)
    12821308{
     
    12851311}
    12861312
     1313
     1314/**
     1315 * Helper that makes sure we've got a validation boot entry.
     1316 *
     1317 * @returns IPRT status code
     1318 * @param   pOpts               The ISO maker command instance.
     1319 */
     1320static void rtFsIsoMakerCmdOptEltoritoEnsureValiidationEntry(PRTFSISOMAKERCMDOPTS pOpts)
     1321{
     1322    if (pOpts->cBootCatEntries == 0)
     1323    {
     1324        pOpts->aBootCatEntries[0].enmType                       = RTFSISOMKCMDELTORITOENTRY::kEntryType_Validation;
     1325        pOpts->aBootCatEntries[0].u.Validation.idPlatform       = ISO9660_ELTORITO_PLATFORM_ID_X86;
     1326        pOpts->aBootCatEntries[0].u.Validation.pszString        = NULL;
     1327        pOpts->cBootCatEntries = 1;
     1328    }
     1329}
     1330
     1331
     1332/**
     1333 * Helper that makes sure we've got a current boot entry.
     1334 *
     1335 * @returns IPRT status code
     1336 * @param   pOpts               The ISO maker command instance.
     1337 * @param   fForceNew           Whether to force a new entry.
     1338 * @param   pidxBootCat         Where to return the boot catalog index.
     1339 */
     1340static int rtFsIsoMakerCmdOptEltoritoEnsureSectionEntry(PRTFSISOMAKERCMDOPTS pOpts, bool fForceNew, uint32_t *pidxBootCat)
     1341{
     1342    rtFsIsoMakerCmdOptEltoritoEnsureValiidationEntry(pOpts);
     1343
     1344    uint32_t i = pOpts->cBootCatEntries;
     1345    if (i == 2 && fForceNew)
     1346    {
     1347        pOpts->aBootCatEntries[i].enmType                       = RTFSISOMKCMDELTORITOENTRY::kEntryType_SectionHeader;
     1348        pOpts->aBootCatEntries[i].u.SectionHeader.idPlatform    = pOpts->aBootCatEntries[0].u.Validation.idPlatform;
     1349        pOpts->aBootCatEntries[i].u.SectionHeader.pszString     = NULL;
     1350        pOpts->cBootCatEntries = ++i;
     1351    }
     1352
     1353    if (   i == 1
     1354        || fForceNew
     1355        || pOpts->aBootCatEntries[i - 1].enmType == RTFSISOMKCMDELTORITOENTRY::kEntryType_SectionHeader)
     1356    {
     1357        if (i >= RT_ELEMENTS(pOpts->aBootCatEntries))
     1358        {
     1359            *pidxBootCat = UINT32_MAX;
     1360            return rtFsIsoMakerCmdErrorRc(pOpts, VERR_BUFFER_OVERFLOW, "Too many boot catalog entries");
     1361        }
     1362
     1363        pOpts->aBootCatEntries[i].enmType                       = i == 1 ? RTFSISOMKCMDELTORITOENTRY::kEntryType_Default
     1364                                                                :          RTFSISOMKCMDELTORITOENTRY::kEntryType_Section;
     1365        pOpts->aBootCatEntries[i].u.Section.pszImageNameInIso   = NULL;
     1366        pOpts->aBootCatEntries[i].u.Section.idImage             = UINT32_MAX;
     1367        pOpts->aBootCatEntries[i].u.Section.fInsertBootInfoTable = false;
     1368        pOpts->aBootCatEntries[i].u.Section.fBootable           = true;
     1369        pOpts->aBootCatEntries[i].u.Section.bBootMediaType      = ISO9660_ELTORITO_BOOT_MEDIA_TYPE_MASK;
     1370        pOpts->aBootCatEntries[i].u.Section.bSystemType         = 1 /*FAT12*/;
     1371        pOpts->aBootCatEntries[i].u.Section.uLoadSeg            = 0x7c0;
     1372        pOpts->aBootCatEntries[i].u.Section.cSectorsToLoad      = 4;
     1373        pOpts->cBootCatEntries = ++i;
     1374    }
     1375
     1376    *pidxBootCat = i - 1;
     1377    return VINF_SUCCESS;
     1378}
     1379
     1380
     1381/**
     1382 * Deals with: --eltorito-add-image {file-spec}
     1383 *
     1384 * This differs from -b|--eltorito-boot in that it takes a source file
     1385 * specification identical to what rtFsIsoMakerCmdAddSomething processes instead
     1386 * of a reference to a file in the image.
     1387 *
     1388 * This operates on the current eltorito boot catalog entry.
     1389 *
     1390 * @returns IPRT status code
     1391 * @param   pOpts               The ISO maker command instance.
     1392 * @param   pszGenericBootImage The generic boot image source.
     1393 */
     1394static int rtFsIsoMakerCmdOptEltoritoAddImage(PRTFSISOMAKERCMDOPTS pOpts, const char *pszBootImageSpec)
     1395{
     1396    RT_NOREF(pOpts, pszBootImageSpec);
     1397    return VERR_NOT_IMPLEMENTED;
     1398}
     1399
     1400
     1401/**
     1402 * Deals with: -b|--eltorito-boot {file-in-iso}
     1403 *
     1404 * This operates on the current eltorito boot catalog entry.
     1405 *
     1406 * @returns IPRT status code
     1407 * @param   pOpts               The ISO maker command instance.
     1408 * @param   pszGenericBootImage The generic boot image source.
     1409 */
     1410static int rtFsIsoMakerCmdOptEltoritoBoot(PRTFSISOMAKERCMDOPTS pOpts, const char *pszBootImage)
     1411{
     1412    uint32_t idxBootCat;
     1413    int rc = rtFsIsoMakerCmdOptEltoritoEnsureSectionEntry(pOpts, false /*fForceNew*/, &idxBootCat);
     1414    if (RT_SUCCESS(rc))
     1415    {
     1416        if (   pOpts->aBootCatEntries[idxBootCat].u.Section.idImage != UINT32_MAX
     1417            || pOpts->aBootCatEntries[idxBootCat].u.Section.pszImageNameInIso != NULL)
     1418            return rtFsIsoMakerCmdSyntaxError(pOpts, "boot image already given for current El Torito entry (%#u)", idxBootCat);
     1419
     1420        uint32_t idxObj = RTFsIsoMakerGetObjIdxForPath(pOpts->hIsoMaker, RTFSISOMAKER_NAMESPACE_ALL, pszBootImage);
     1421        pOpts->aBootCatEntries[idxBootCat].u.Section.idImage = idxObj;
     1422        if (idxObj == UINT32_MAX)
     1423            pOpts->aBootCatEntries[idxBootCat].u.Section.pszImageNameInIso = pszBootImage;
     1424    }
     1425    return rc;
     1426}
     1427
     1428
     1429/**
     1430 * Deals with: --eltorito-platform-id {x86|PPC|Mac|efi|number}
     1431 *
     1432 * Operates on the validation entry or a section header.
     1433 *
     1434 * @returns IPRT status code
     1435 * @param   pOpts               The ISO maker command instance.
     1436 * @param   pszPlatformId       The platform ID.
     1437 */
     1438static int rtFsIsoMakerCmdOptEltoritoPlatformId(PRTFSISOMAKERCMDOPTS pOpts, const char *pszPlatformId)
     1439{
     1440    /* Decode it. */
     1441    uint8_t idPlatform;
     1442    if (strcmp(pszPlatformId, "x86") == 0)
     1443        idPlatform = ISO9660_ELTORITO_PLATFORM_ID_X86;
     1444    else if (strcmp(pszPlatformId, "PPC") == 0)
     1445        idPlatform = ISO9660_ELTORITO_PLATFORM_ID_PPC;
     1446    else if (strcmp(pszPlatformId, "Mac") == 0)
     1447        idPlatform = ISO9660_ELTORITO_PLATFORM_ID_MAC;
     1448    else if (strcmp(pszPlatformId, "efi") == 0)
     1449        idPlatform = ISO9660_ELTORITO_PLATFORM_ID_EFI;
     1450    else
     1451    {
     1452        int rc = RTStrToUInt8Full(pszPlatformId, 0, &idPlatform);
     1453        if (rc != VINF_SUCCESS)
     1454            return rtFsIsoMakerCmdSyntaxError(pOpts, "invalid or unknown platform ID: %s", pszPlatformId);
     1455    }
     1456
     1457    /* If this option comes before anything related to the default entry, work
     1458       on the validation entry. */
     1459    if (pOpts->cBootCatEntries <= 1)
     1460    {
     1461        rtFsIsoMakerCmdOptEltoritoEnsureValiidationEntry(pOpts);
     1462        pOpts->aBootCatEntries[0].u.Validation.idPlatform = idPlatform;
     1463    }
     1464    /* Otherwise, work on the current section header, creating a new one if necessary. */
     1465    else
     1466    {
     1467        uint32_t idxBootCat = pOpts->cBootCatEntries - 1;
     1468        if (pOpts->aBootCatEntries[idxBootCat].enmType == RTFSISOMKCMDELTORITOENTRY::kEntryType_SectionHeader)
     1469            pOpts->aBootCatEntries[idxBootCat].u.SectionHeader.idPlatform = idPlatform;
     1470        else
     1471        {
     1472            idxBootCat++;
     1473            if (idxBootCat + 2 > RT_ELEMENTS(pOpts->aBootCatEntries))
     1474                return rtFsIsoMakerCmdErrorRc(pOpts, VERR_BUFFER_OVERFLOW, "Too many boot catalog entries");
     1475
     1476            pOpts->aBootCatEntries[idxBootCat].enmType                    = RTFSISOMKCMDELTORITOENTRY::kEntryType_SectionHeader;
     1477            pOpts->aBootCatEntries[idxBootCat].u.SectionHeader.idPlatform = idPlatform;
     1478            pOpts->aBootCatEntries[idxBootCat].u.SectionHeader.pszString  = NULL;
     1479            pOpts->cBootCatEntries = idxBootCat + 1;
     1480        }
     1481    }
     1482    return VINF_SUCCESS;
     1483}
     1484
     1485
     1486/**
     1487 * Deals with: -no-boot
     1488 *
     1489 * This operates on the current eltorito boot catalog entry.
     1490 *
     1491 * @returns IPRT status code
     1492 * @param   pOpts               The ISO maker command instance.
     1493 */
     1494static int rtFsIsoMakerCmdOptEltoritoSetNotBootable(PRTFSISOMAKERCMDOPTS pOpts)
     1495{
     1496    uint32_t idxBootCat;
     1497    int rc = rtFsIsoMakerCmdOptEltoritoEnsureSectionEntry(pOpts, false /*fForceNew*/, &idxBootCat);
     1498    if (RT_SUCCESS(rc))
     1499        pOpts->aBootCatEntries[idxBootCat].u.Section.fBootable = false;
     1500    return rc;
     1501}
     1502
     1503
     1504/**
     1505 * Deals with: -hard-disk-boot, -no-emulation-boot, --eltorito-floppy-12,
     1506 *             --eltorito-floppy-144, --eltorito-floppy-288
     1507 *
     1508 * This operates on the current eltorito boot catalog entry.
     1509 *
     1510 * @returns IPRT status code
     1511 * @param   pOpts               The ISO maker command instance.
     1512 * @param   bMediaType          The media type.
     1513 */
     1514static int rtFsIsoMakerCmdOptEltoritoSetMediaType(PRTFSISOMAKERCMDOPTS pOpts, uint8_t bMediaType)
     1515{
     1516    uint32_t idxBootCat;
     1517    int rc = rtFsIsoMakerCmdOptEltoritoEnsureSectionEntry(pOpts, false /*fForceNew*/, &idxBootCat);
     1518    if (RT_SUCCESS(rc))
     1519        pOpts->aBootCatEntries[idxBootCat].u.Section.bBootMediaType = bMediaType;
     1520    return rc;
     1521}
     1522
     1523
     1524/**
     1525 * Deals with: -boot-load-seg {seg}
     1526 *
     1527 * This operates on the current eltorito boot catalog entry.
     1528 *
     1529 * @returns IPRT status code
     1530 * @param   pOpts               The ISO maker command instance.
     1531 * @param   uSeg                The load segment.
     1532 */
     1533static int rtFsIsoMakerCmdOptEltoritoSetLoadSegment(PRTFSISOMAKERCMDOPTS pOpts, uint16_t uSeg)
     1534{
     1535    uint32_t idxBootCat;
     1536    int rc = rtFsIsoMakerCmdOptEltoritoEnsureSectionEntry(pOpts, false /*fForceNew*/, &idxBootCat);
     1537    if (RT_SUCCESS(rc))
     1538        pOpts->aBootCatEntries[idxBootCat].u.Section.uLoadSeg = uSeg;
     1539    return rc;
     1540}
     1541
     1542
     1543/**
     1544 * Deals with: -boot-load-size {sectors}
     1545 *
     1546 * This operates on the current eltorito boot catalog entry.
     1547 *
     1548 * @returns IPRT status code
     1549 * @param   pOpts               The ISO maker command instance.
     1550 * @param   cSectors            Number of emulated sectors to load
     1551 */
     1552static int rtFsIsoMakerCmdOptEltoritoSetLoadSectorCount(PRTFSISOMAKERCMDOPTS pOpts, uint16_t cSectors)
     1553{
     1554    uint32_t idxBootCat;
     1555    int rc = rtFsIsoMakerCmdOptEltoritoEnsureSectionEntry(pOpts, false /*fForceNew*/, &idxBootCat);
     1556    if (RT_SUCCESS(rc))
     1557        pOpts->aBootCatEntries[idxBootCat].u.Section.cSectorsToLoad = cSectors;
     1558    return rc;
     1559}
     1560
     1561
     1562/**
     1563 * Deals with: -boot-info-table
     1564 *
     1565 * This operates on the current eltorito boot catalog entry.
     1566 *
     1567 * @returns IPRT status code
     1568 * @param   pOpts               The ISO maker command instance.
     1569 */
     1570static int rtFsIsoMakerCmdOptEltoritoEnableBootInfoTablePatching(PRTFSISOMAKERCMDOPTS pOpts)
     1571{
     1572    uint32_t idxBootCat;
     1573    int rc = rtFsIsoMakerCmdOptEltoritoEnsureSectionEntry(pOpts, false /*fForceNew*/, &idxBootCat);
     1574    if (RT_SUCCESS(rc))
     1575        pOpts->aBootCatEntries[idxBootCat].u.Section.fInsertBootInfoTable = true;
     1576    return rc;
     1577}
     1578
     1579
     1580/**
     1581 * Deals with: --eltorito-new-entry, --eltorito-alt-boot
     1582 *
     1583 * This operates on the current eltorito boot catalog entry.
     1584 *
     1585 * @returns IPRT status code
     1586 * @param   pOpts               The ISO maker command instance.
     1587 */
     1588static int rtFsIsoMakerCmdOptEltoritoNewEntry(PRTFSISOMAKERCMDOPTS pOpts)
     1589{
     1590    uint32_t idxBootCat;
     1591    return rtFsIsoMakerCmdOptEltoritoEnsureSectionEntry(pOpts, true /*fForceNew*/, &idxBootCat);
     1592}
    12871593
    12881594
     
    13151621    Opts.afNameSpecifiers[0]    = RTFSISOMAKERCMDNAME_MAJOR_MASK;
    13161622    Opts.fDstNamespaces         = RTFSISOMAKERCMDNAME_MAJOR_MASK;
    1317     Opts.idEltoritoEntry        = UINT32_MAX;
    13181623    if (phVfsFile)
    13191624        *phVfsFile = NIL_RTVFSFILE;
     
    13711676                break;
    13721677
     1678            case RTFSISOMAKERCMD_OPT_ELTORITO_ADD_IMAGE:
     1679                rc = rtFsIsoMakerCmdOptEltoritoAddImage(&Opts, ValueUnion.psz);
     1680                break;
     1681
    13731682            case 'b': /* --eltorito-boot <boot.img> */
    13741683                rc = rtFsIsoMakerCmdOptEltoritoBoot(&Opts, ValueUnion.psz);
    13751684                break;
    13761685
    1377             case RTFSISOMAKERCMD_OPT_ELTORITO_ALT_BOOT:
    1378                 Opts.idEltoritoEntry = UINT32_MAX;
    1379                 break;
    1380 
     1686            case RTFSISOMAKERCMD_OPT_ELTORITO_NEW_ENTRY:
     1687                rc = rtFsIsoMakerCmdOptEltoritoNewEntry(&Opts);
     1688                break;
    13811689
    13821690            case RTFSISOMAKERCMD_OPT_ELTORITO_PLATFORM_ID:
Note: See TracChangeset for help on using the changeset viewer.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette