VirtualBox

Ignore:
Timestamp:
Jul 10, 2015 3:10:02 PM (10 years ago)
Author:
vboxsync
Message:

Frontends/VBoxManage: take different partition numbering (MBR) on Windows into account, but it's not worth plastering the code with ifdefs as the additional numbering style is rather cheap

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Frontends/VBoxManage/VBoxInternalManage.cpp

    r56912 r56918  
    9494    /** partition number */
    9595    unsigned        uIndex;
     96    /** partition number (internal only, windows specific numbering) */
     97    unsigned        uIndexWin;
    9698    /** partition type */
    9799    unsigned        uType;
     
    831833                PHOSTPARTITION pCP = &pPart->aPartitions[pPart->cPartitions++];
    832834                pCP->uIndex = currentEntry + 1;
     835                pCP->uIndexWin = currentEntry + 1;
    833836                pCP->uType = 0;
    834837                pCP->uStartCylinder = 0;
     
    843846                {
    844847                    pCP->uIndex = 0;
     848                    pCP->uIndexWin = 0;
    845849                    --pPart->cPartitions;
    846850                    break;
     
    867871
    868872        unsigned uExtended = (unsigned)-1;
     873        unsigned uIndexWin = 1;
    869874
    870875        for (unsigned i = 0; i < 4; i++)
     
    890895            {
    891896                if (uExtended == (unsigned)-1)
     897                {
    892898                    uExtended = (unsigned)(pCP - pPart->aPartitions);
     899                    pCP->uIndexWin = 0;
     900                }
    893901                else
    894902                {
     
    896904                    return VERR_INVALID_PARAMETER;
    897905                }
     906            }
     907            else
     908            {
     909                pCP->uIndexWin = uIndexWin;
     910                uIndexWin++;
    898911            }
    899912        }
     
    931944                PHOSTPARTITION pCP = &pPart->aPartitions[pPart->cPartitions++];
    932945                pCP->uIndex = uIndex;
     946                pCP->uIndexWin = uIndexWin;
    933947                pCP->uType = p[4];
    934948                pCP->uStartCylinder = (uint32_t)p[3] + ((uint32_t)(p[2] & 0xc0) << 2);
     
    954968                else if (PARTTYPE_IS_EXTENDED(p[4]))
    955969                {
    956                     uExtended = uIndex++;
     970                    uExtended = uIndex;
     971                    uIndex++;
     972                    uIndexWin++;
    957973                    uOffset = RT_MAKE_U32_FROM_U8(p[8], p[9], p[10], p[11]);
    958974                }
     
    16581674                    RTStrAPrintf(&psz, "\\\\.\\Harddisk%sPartition%u",
    16591675                                 rawdisk.c_str() + 17,
    1660                                  partitions.aPartitions[i].uIndex);
     1676                                 partitions.aPartitions[i].uIndexWin);
    16611677                    if (!psz)
    16621678                    {
    16631679                        vrc = VERR_NO_STR_MEMORY;
    1664                         RTMsgError("Cannot create reference to individual partition %u, rc=%Rrc",
    1665                                    partitions.aPartitions[i].uIndex, vrc);
     1680                        RTMsgError("Cannot create reference to individual partition %u (numbered %u), rc=%Rrc",
     1681                                   partitions.aPartitions[i].uIndex, partitions.aPartitions[i].uIndexWin, vrc);
    16661682                        goto out;
    16671683                    }
Note: See TracChangeset for help on using the changeset viewer.

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