VirtualBox

Changeset 23288 in vbox for trunk/src/VBox/Main


Ignore:
Timestamp:
Sep 24, 2009 3:22:25 PM (15 years ago)
Author:
vboxsync
Message:

Main: implement XML reader for settings versions 1.3, 1.4 and 1.5 for vbox 2.0.x support.

Location:
trunk/src/VBox/Main
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Main/idl/VirtualBox.xidl

    r23280 r23288  
    403403    </const>
    404404    <const name="v1_3"     value="5">
    405       <desc>Legacy settings version, not currently supported.</desc>
     405      <desc>Settings version "1.3", written by VirtualBox 2.0.12.</desc>
     406      <!--
     407            Machine XML: Capitalization of Uart, Lpt elements and many attributes changed.
     408      -->
    406409    </const>
    407410    <const name="v1_4"     value="6">
    408       <desc>Legacy settings version, not currently supported.</desc>
     411      <desc>Intermediate settings version, understood by VirtualBox 2.1.x.</desc>
     412      <!--
     413          VirtualBox.xml: big DiskRegistry -> MediaRegistry revamp, various HardDisk types merged
     414          (was VirtualDiskImage, VMDKImage, VHDImage, ISCSIHardDisk, CustomHardDisk, DiffHardDisk)
     415      -->
    409416    </const>
    410417    <const name="v1_5"     value="7">
    411       <desc>Legacy settings version, not currently supported.</desc>
     418      <desc>Intermediate settings version, understood by VirtualBox 2.1.x.</desc>
    412419      <!-- 2008-09-04: 2.0.0 released
    413420           2008-11-20: settings version 1.5 introduced
    414421           2008-12-17: 2.1.0 released
    415            (todo)
     422           Machine changes:
     423              guest OS identifiers changed;
     424              Machine/Hardware/Display/MonitorCount renamed to monitorCount;
     425              Machine/Hardware/Display/Accelerate3D renamed to accelerate3D;
     426              Machine/Hardware/CPU/CPUCount/@count changed to CPU/@count
    416427      -->
    417428    </const>
  • trunk/src/VBox/Main/xml/Settings.cpp

    r23249 r23288  
    174174            if (ulMajor == 1)
    175175            {
    176                 if (ulMinor == 6)
     176                if (ulMinor == 3)
     177                    m->sv = SettingsVersion_v1_3;
     178                else if (ulMinor == 4)
     179                    m->sv = SettingsVersion_v1_4;
     180                else if (ulMinor == 5)
     181                    m->sv = SettingsVersion_v1_5;
     182                else if (ulMinor == 6)
    177183                    m->sv = SettingsVersion_v1_6;
    178184                else if (ulMinor == 7)
     
    385391           )
    386392        {
    387             pelmLevel4Child->getAttributeValue("vendorId", flt.strVendorId);
    388             pelmLevel4Child->getAttributeValue("productId", flt.strProductId);
     393            if (!pelmLevel4Child->getAttributeValue("vendorId", flt.strVendorId))
     394                pelmLevel4Child->getAttributeValue("vendorid", flt.strVendorId);            // used before 1.3
     395            if (!pelmLevel4Child->getAttributeValue("productId", flt.strProductId))
     396                pelmLevel4Child->getAttributeValue("productid", flt.strProductId)           // used before 1.3
    389397            pelmLevel4Child->getAttributeValue("revision", flt.strRevision);
    390398            pelmLevel4Child->getAttributeValue("manufacturer", flt.strManufacturer);
    391399            pelmLevel4Child->getAttributeValue("product", flt.strProduct);
    392             pelmLevel4Child->getAttributeValue("serialNumber", flt.strSerialNumber);
     400            if (!pelmLevel4Child->getAttributeValue("serialNumber", flt.strSerialNumber))
     401                pelmLevel4Child->getAttributeValue("serialnumber", flt.strSerialNumber);    // used before 1.3
    393402            pelmLevel4Child->getAttributeValue("port", flt.strPort);
    394403
     
    597606/**
    598607 * Reads a media registry entry from the main VirtualBox.xml file.
     608 *
     609 * Whereas the current media registry code is fairly straightforward, it was quite a mess
     610 * with settings format before 1.4 (VirtualBox 2.0 used settings format 1.3). The elements
     611 * in the media registry were much more inconsistent, and different elements were used
     612 * depending on the type of device and image.
     613 *
    599614 * @param t
    600615 * @param elmMedium
     
    602617 */
    603618void MainConfigFile::readMedium(MediaType t,
    604                                 const xml::ElementNode &elmMedium,  // MediaRegistry/HardDisks or a single HardDisk node if recursing
    605                                 MediaList &llMedia)
     619                                const xml::ElementNode &elmMedium,  // HardDisk node if root; if recursing,
     620                                                                    // child HardDisk node or DiffHardDisk node for pre-1.4
     621                                MediaList &llMedia)     // list to append medium to (root disk or child list)
    606622{
    607623    // <HardDisk uuid="{5471ecdb-1ddb-4012-a801-6d98e226868b}" location="/mnt/innotek-unix/vdis/Windows XP.vdi" format="VDI" type="Normal">
    608624    settings::Medium med;
    609625    Utf8Str strUUID;
    610     if (    (elmMedium.getAttributeValue("uuid", strUUID))
    611          && (elmMedium.getAttributeValue("location", med.strLocation))
    612        )
    613     {
    614         parseUUID(med.uuid, strUUID);
    615         elmMedium.getAttributeValue("Description", med.strDescription);       // optional
    616 
    617         if (t == HardDisk)
    618         {
     626    if (!(elmMedium.getAttributeValue("uuid", strUUID)))
     627        throw ConfigFileError(this, &elmMedium, N_("Required %s/@uuid attribute is missing"), elmMedium.getName());
     628
     629    parseUUID(med.uuid, strUUID);
     630
     631    bool fNeedsLocation = true;
     632
     633    if (t == HardDisk)
     634    {
     635        if (m->sv < SettingsVersion_v1_4)
     636        {
     637            // here the system is:
     638            //         <HardDisk uuid="{....}" type="normal">
     639            //           <VirtualDiskImage filePath="/path/to/xxx.vdi"/>
     640            //         </HardDisk>
     641
     642            fNeedsLocation = false;
     643            bool fNeedsFilePath = true;
     644            const xml::ElementNode *pelmImage;
     645            if ((pelmImage = elmMedium.findChildElement("VirtualDiskImage")))
     646                med.strFormat = "VDI";
     647            else if ((pelmImage = elmMedium.findChildElement("VMDKImage")))
     648                med.strFormat = "VMDK";
     649            else if ((pelmImage = elmMedium.findChildElement("VHDImage")))
     650                med.strFormat = "VHD";
     651            else if ((pelmImage = elmMedium.findChildElement("ISCSIHardDisk")))
     652            {
     653                med.strFormat = "iSCSI";
     654
     655                fNeedsFilePath = false;
     656                // location is special here: current settings specify an "iscsi://user@server:port/target/lun"
     657                // string for the location and also have several disk properties for these, whereas this used
     658                // to be hidden in several sub-elements before 1.4, so compose a location string and set up
     659                // the properties:
     660                med.strLocation = "iscsi://";
     661                Utf8Str strUser, strServer, strPort, strTarget, strLun;
     662                if (pelmImage->getAttributeValue("userName", strUser))
     663                {
     664                    med.strLocation.append(strUser);
     665                    med.strLocation.append("@");
     666                }
     667                Utf8Str strServerAndPort;
     668                if (pelmImage->getAttributeValue("server", strServer))
     669                {
     670                    strServerAndPort = strServer;
     671                }
     672                if (pelmImage->getAttributeValue("port", strPort))
     673                {
     674                    if (strServerAndPort.length())
     675                        strServerAndPort.append(":");
     676                    strServerAndPort.append(strPort);
     677                }
     678                med.strLocation.append(strServerAndPort);
     679                if (pelmImage->getAttributeValue("target", strTarget))
     680                {
     681                    med.strLocation.append("/");
     682                    med.strLocation.append(strTarget);
     683                }
     684                if (pelmImage->getAttributeValue("lun", strLun))
     685                {
     686                    med.strLocation.append("/");
     687                    med.strLocation.append(strLun);
     688                }
     689
     690                if (strServer.length() && strPort.length())
     691                    med.properties["TargetAddress"] = strServerAndPort;
     692                if (strTarget.length())
     693                    med.properties["TargetName"] = strTarget;
     694                if (strUser.length())
     695                    med.properties["InitiatorUsername"] = strUser;
     696                Utf8Str strPassword;
     697                if (pelmImage->getAttributeValue("password", strPassword))
     698                    med.properties["InitiatorSecret"] = strPassword;
     699                if (strLun.length())
     700                    med.properties["LUN"] = strLun;
     701            }
     702            else if ((pelmImage = elmMedium.findChildElement("CustomHardDisk")))
     703            {
     704                fNeedsFilePath = false;
     705                fNeedsLocation = true;
     706                    // also requires @format attribute, which will be queried below
     707            }
     708            else
     709                throw ConfigFileError(this, &elmMedium, N_("Required %s/VirtualDiskImage element is missing"), elmMedium.getName());
     710
     711            if (fNeedsFilePath)
     712                if (!(pelmImage->getAttributeValue("filePath", med.strLocation)))
     713                    throw ConfigFileError(this, &elmMedium, N_("Required %s/@filePath attribute is missing"), elmMedium.getName());
     714        }
     715
     716        if (med.strFormat.isEmpty())        // not set with 1.4 format above, or 1.4 Custom format?
    619717            if (!(elmMedium.getAttributeValue("format", med.strFormat)))
    620                 throw ConfigFileError(this, &elmMedium, N_("Required HardDisk/@format attribute is missing"));
    621 
    622             if (!(elmMedium.getAttributeValue("autoReset", med.fAutoReset)))
    623                 med.fAutoReset = false;
    624 
    625             Utf8Str strType;
    626             if ((elmMedium.getAttributeValue("type", strType)))
    627             {
    628                 if (strType == "Normal")
    629                     med.hdType = MediumType_Normal;
    630                 else if (strType == "Immutable")
    631                     med.hdType = MediumType_Immutable;
    632                 else if (strType == "Writethrough")
    633                     med.hdType = MediumType_Writethrough;
    634                 else
    635                     throw ConfigFileError(this, &elmMedium, N_("HardDisk/@type attribute must be one of Normal, Immutable or Writethrough"));
    636             }
    637         }
    638 
    639         // recurse to handle children
    640         xml::NodesLoop nl2(elmMedium);
    641         const xml::ElementNode *pelmHDChild;
    642         while ((pelmHDChild = nl2.forAllNodes()))
    643         {
    644             if (    t == HardDisk
    645                  && (pelmHDChild->nameEquals("HardDisk"))
     718                throw ConfigFileError(this, &elmMedium, N_("Required %s/@format attribute is missing"), elmMedium.getName());
     719
     720        if (!(elmMedium.getAttributeValue("autoReset", med.fAutoReset)))
     721            med.fAutoReset = false;
     722
     723        Utf8Str strType;
     724        if ((elmMedium.getAttributeValue("type", strType)))
     725        {
     726            // pre-1.4 used lower case, so make this case-insensitive
     727            strType.toUpper();
     728            if (strType == "NORMAL")
     729                med.hdType = MediumType_Normal;
     730            else if (strType == "IMMUTABLE")
     731                med.hdType = MediumType_Immutable;
     732            else if (strType == "WRITETHROUGH")
     733                med.hdType = MediumType_Writethrough;
     734            else
     735                throw ConfigFileError(this, &elmMedium, N_("HardDisk/@type attribute must be one of Normal, Immutable or Writethrough"));
     736        }
     737    }
     738    else if (m->sv < SettingsVersion_v1_4)
     739    {
     740        // DVD and floppy images before 1.4 had "src" attribute instead of "location"
     741        if (!(elmMedium.getAttributeValue("src", med.strLocation)))
     742            throw ConfigFileError(this, &elmMedium, N_("Required %s/@src attribute is missing"), elmMedium.getName());
     743
     744        fNeedsLocation = false;
     745    }
     746
     747    if (fNeedsLocation)
     748        // current files and 1.4 CustomHardDisk elements must have a location attribute
     749        if (!(elmMedium.getAttributeValue("location", med.strLocation)))
     750            throw ConfigFileError(this, &elmMedium, N_("Required %s/@location attribute is missing"), elmMedium.getName());
     751
     752    elmMedium.getAttributeValue("Description", med.strDescription);       // optional
     753
     754    // recurse to handle children
     755    xml::NodesLoop nl2(elmMedium);
     756    const xml::ElementNode *pelmHDChild;
     757    while ((pelmHDChild = nl2.forAllNodes()))
     758    {
     759        if (    t == HardDisk
     760             && (    pelmHDChild->nameEquals("HardDisk")
     761                  || (    (m->sv < SettingsVersion_v1_4)
     762                       && (pelmHDChild->nameEquals("DiffHardDisk"))
     763                     )
     764                )
     765           )
     766            // recurse with this element and push the child onto our current children list
     767            readMedium(t,
     768                        *pelmHDChild,
     769                        med.llChildren);
     770        else if (pelmHDChild->nameEquals("Property"))
     771        {
     772            Utf8Str strPropName, strPropValue;
     773            if (    (pelmHDChild->getAttributeValue("name", strPropName))
     774                 && (pelmHDChild->getAttributeValue("value", strPropValue))
    646775               )
    647                 // recurse with this element and push the child onto our current children list
    648                 readMedium(t,
    649                            *pelmHDChild,
    650                            med.llChildren);
    651             else if (pelmHDChild->nameEquals("Property"))
    652             {
    653                 Utf8Str strPropName, strPropValue;
    654                 if (    (pelmHDChild->getAttributeValue("name", strPropName))
    655                      && (pelmHDChild->getAttributeValue("value", strPropValue))
    656                    )
    657                     med.properties[strPropName] = strPropValue;
    658                 else
    659                     throw ConfigFileError(this, pelmHDChild, N_("Required HardDisk/Property/@name or @value attribute is missing"));
    660             }
    661         }
    662 
    663         llMedia.push_back(med);
    664     }
    665     else
    666         throw ConfigFileError(this, &elmMedium, N_("Required %s/@uuid or @location attribute is missing"), elmMedium.getName());
    667 }
    668 
    669 /**
    670  * Reads in the entire <MediaRegistry> chunk.
     776                med.properties[strPropName] = strPropValue;
     777            else
     778                throw ConfigFileError(this, pelmHDChild, N_("Required HardDisk/Property/@name or @value attribute is missing"));
     779        }
     780    }
     781
     782    llMedia.push_back(med);
     783}
     784
     785/**
     786 * Reads in the entire <MediaRegistry> chunk. For pre-1.4 files, this gets called
     787 * with the <DiskRegistry> chunk instead.
    671788 * @param elmMediaRegistry
    672789 */
     
    687804            continue;
    688805
    689         xml::NodesLoop nl1(*pelmChild1);
     806        xml::NodesLoop nl2(*pelmChild1);
    690807        const xml::ElementNode *pelmMedium;
    691         while ((pelmMedium = nl1.forAllNodes()))
     808        while ((pelmMedium = nl2.forAllNodes()))
    692809        {
    693810            if (    t == HardDisk
     
    773890                    {
    774891                        pelmGlobalChild->getAttributeValue("defaultMachineFolder", systemProperties.strDefaultMachineFolder);
    775                         pelmGlobalChild->getAttributeValue("defaultHardDiskFolder", systemProperties.strDefaultHardDiskFolder);
     892                        if (!pelmGlobalChild->getAttributeValue("defaultHardDiskFolder", systemProperties.strDefaultHardDiskFolder))
     893                            // pre-1.4 used @defaultVDIFolder instead
     894                            pelmGlobalChild->getAttributeValue("defaultVDIFolder", systemProperties.strDefaultHardDiskFolder);
    776895                        pelmGlobalChild->getAttributeValue("defaultHardDiskFormat", systemProperties.strDefaultHardDiskFormat);
    777896                        pelmGlobalChild->getAttributeValue("remoteDisplayAuthLibrary", systemProperties.strRemoteDisplayAuthLibrary);
     
    783902                    else if (pelmGlobalChild->nameEquals("MachineRegistry"))
    784903                        readMachineRegistry(*pelmGlobalChild);
    785                     else if (pelmGlobalChild->nameEquals("MediaRegistry"))
     904                    else if (    (pelmGlobalChild->nameEquals("MediaRegistry"))
     905                              || (    (m->sv < SettingsVersion_v1_4)
     906                                   && (pelmGlobalChild->nameEquals("DiskRegistry"))
     907                                 )
     908                            )
    786909                        readMediaRegistry(*pelmGlobalChild);
    787910                    else if (pelmGlobalChild->nameEquals("NetserviceRegistry"))
     
    12351358        if (pelmHwChild->nameEquals("CPU"))
    12361359        {
    1237             pelmHwChild->getAttributeValue("count", hw.cCPUs);
     1360            if (!pelmHwChild->getAttributeValue("count", hw.cCPUs))
     1361            {
     1362                // pre-1.5 variant; not sure if this actually exists in the wild anywhere
     1363                const xml::ElementNode *pelmCPUChild;
     1364                if ((pelmCPUChild = pelmHwChild->findChildElement("CPUCount")))
     1365                    pelmCPUChild->getAttributeValue("count", hw.cCPUs);
     1366            }
    12381367
    12391368            const xml::ElementNode *pelmCPUChild;
     
    13181447        {
    13191448            pelmHwChild->getAttributeValue("VRAMSize", hw.ulVRAMSizeMB);
    1320             pelmHwChild->getAttributeValue("monitorCount", hw.cMonitors);
    1321             pelmHwChild->getAttributeValue("accelerate3D", hw.fAccelerate3D);
     1449            if (!pelmHwChild->getAttributeValue("monitorCount", hw.cMonitors))
     1450                pelmHwChild->getAttributeValue("MonitorCount", hw.cMonitors);       // pre-v1.5 variant
     1451            if (!pelmHwChild->getAttributeValue("accelerate3D", hw.fAccelerate3D))
     1452                pelmHwChild->getAttributeValue("Accelerate3D", hw.fAccelerate3D);   // pre-v1.5 variant
    13221453            pelmHwChild->getAttributeValue("accelerate2DVideo", hw.fAccelerate2DVideo);
    13231454        }
     
    13311462            if (pelmHwChild->getAttributeValue("authType", strAuthType))
    13321463            {
    1333                 if (strAuthType == "Null")
     1464                // settings before 1.3 used lower case so make sure this is case-insensitive
     1465                strAuthType.toUpper();
     1466                if (strAuthType == "NULL")
    13341467                    hw.vrdpSettings.authType = VRDPAuthType_Null;
    1335                 else if (strAuthType == "Guest")
     1468                else if (strAuthType == "GUEST")
    13361469                    hw.vrdpSettings.authType = VRDPAuthType_Guest;
    1337                 else if (strAuthType == "External")
     1470                else if (strAuthType == "EXTERNAL")
    13381471                    hw.vrdpSettings.authType = VRDPAuthType_External;
    13391472                else
     
    13641497                if (pelmBIOSChild->getAttributeValue("mode", strBootMenuMode))
    13651498                {
    1366                     if (strBootMenuMode == "Disabled")
     1499                    // settings before 1.3 used lower case so make sure this is case-insensitive
     1500                    strBootMenuMode.toUpper();
     1501                    if (strBootMenuMode == "DISABLED")
    13671502                        hw.biosSettings.biosBootMenuMode = BIOSBootMenuMode_Disabled;
    1368                     else if (strBootMenuMode == "MenuOnly")
     1503                    else if (strBootMenuMode == "MENUONLY")
    13691504                        hw.biosSettings.biosBootMenuMode = BIOSBootMenuMode_MenuOnly;
    1370                     else if (strBootMenuMode == "MessageAndMenu")
     1505                    else if (strBootMenuMode == "MESSAGEANDMENU")
    13711506                        hw.biosSettings.biosBootMenuMode = BIOSBootMenuMode_MessageAndMenu;
    13721507                    else
     
    14331568        else if (pelmHwChild->nameEquals("Network"))
    14341569            readNetworkAdapters(*pelmHwChild, hw.llNetworkAdapters);
    1435         else if (pelmHwChild->nameEquals("UART"))
     1570        else if (    (pelmHwChild->nameEquals("UART"))
     1571                  || (pelmHwChild->nameEquals("Uart"))      // used before 1.3
     1572                )
    14361573            readSerialPorts(*pelmHwChild, hw.llSerialPorts);
    1437         else if (pelmHwChild->nameEquals("LPT"))
     1574        else if (    (pelmHwChild->nameEquals("LPT"))
     1575                  ||  (pelmHwChild->nameEquals("Lpt"))      // used before 1.3
     1576                )
    14381577            readParallelPorts(*pelmHwChild, hw.llParallelPorts);
    14391578        else if (pelmHwChild->nameEquals("AudioAdapter"))
     
    14531592            if (pelmHwChild->getAttributeValue("driver", strTemp))
    14541593            {
    1455                 if (strTemp == "Null")
     1594                // settings before 1.3 used lower case so make sure this is case-insensitive
     1595                strTemp.toUpper();
     1596                if (strTemp == "NULL")
    14561597                    hw.audioAdapter.driverType = AudioDriverType_Null;
    1457                 else if (strTemp == "WinMM")
     1598                else if (strTemp == "WINMM")
    14581599                    hw.audioAdapter.driverType = AudioDriverType_WinMM;
    1459                 else if (strTemp == "DirectSound")
     1600                else if ( (strTemp == "DIRECTSOUND") || (strTemp == "DSOUND") )
    14601601                    hw.audioAdapter.driverType = AudioDriverType_DirectSound;
    1461                 else if (strTemp == "SolAudio")
     1602                else if (strTemp == "SOLAUDIO")
    14621603                    hw.audioAdapter.driverType = AudioDriverType_SolAudio;
    14631604                else if (strTemp == "ALSA")
    14641605                    hw.audioAdapter.driverType = AudioDriverType_ALSA;
    1465                 else if (strTemp == "Pulse")
     1606                else if (strTemp == "PULSE")
    14661607                    hw.audioAdapter.driverType = AudioDriverType_Pulse;
    14671608                else if (strTemp == "OSS")
    14681609                    hw.audioAdapter.driverType = AudioDriverType_OSS;
    1469                 else if (strTemp == "CoreAudio")
     1610                else if (strTemp == "COREAUDIO")
    14701611                    hw.audioAdapter.driverType = AudioDriverType_CoreAudio;
    14711612                else if (strTemp == "MMPM")
     
    15071648        else if (pelmHwChild->nameEquals("Guest"))
    15081649        {
    1509             pelmHwChild->getAttributeValue("memoryBalloonSize", hw.ulMemoryBalloonSize);
    1510             pelmHwChild->getAttributeValue("statisticsUpdateInterval", hw.ulStatisticsUpdateInterval);
     1650            if (!pelmHwChild->getAttributeValue("memoryBalloonSize", hw.ulMemoryBalloonSize))
     1651                pelmHwChild->getAttributeValue("MemoryBalloonSize", hw.ulMemoryBalloonSize);            // used before 1.3
     1652            if (!pelmHwChild->getAttributeValue("statisticsUpdateInterval", hw.ulStatisticsUpdateInterval))
     1653                pelmHwChild->getAttributeValue("StatisticsUpdateInterval", hw.ulStatisticsUpdateInterval);
    15111654        }
    15121655        else if (pelmHwChild->nameEquals("GuestProperties"))
     
    18782021}
    18792022
     2023void MachineConfigFile::convertOldOSType_pre1_5(Utf8Str &str)
     2024{
     2025    if (str == "unknown") str = "Other";
     2026    else if (str == "dos") str = "DOS";
     2027    else if (str == "win31") str = "Windows31";
     2028    else if (str == "win95") str = "Windows95";
     2029    else if (str == "win98") str = "Windows98";
     2030    else if (str == "winme") str = "WindowsMe";
     2031    else if (str == "winnt4") str = "WindowsNT4";
     2032    else if (str == "win2k") str = "Windows2000";
     2033    else if (str == "winxp") str = "WindowsXP";
     2034    else if (str == "win2k3") str = "Windows2003";
     2035    else if (str == "winvista") str = "WindowsVista";
     2036    else if (str == "win2k8") str = "Windows2008";
     2037    else if (str == "os2warp3") str = "OS2Warp3";
     2038    else if (str == "os2warp4") str = "OS2Warp4";
     2039    else if (str == "os2warp45") str = "OS2Warp45";
     2040    else if (str == "ecs") str = "OS2eCS";
     2041    else if (str == "linux22") str = "Linux22";
     2042    else if (str == "linux24") str = "Linux24";
     2043    else if (str == "linux26") str = "Linux26";
     2044    else if (str == "archlinux") str = "ArchLinux";
     2045    else if (str == "debian") str = "Debian";
     2046    else if (str == "opensuse") str = "OpenSUSE";
     2047    else if (str == "fedoracore") str = "Fedora";
     2048    else if (str == "gentoo") str = "Gentoo";
     2049    else if (str == "mandriva") str = "Mandriva";
     2050    else if (str == "redhat") str = "RedHat";
     2051    else if (str == "ubuntu") str = "Ubuntu";
     2052    else if (str == "xandros") str = "Xandros";
     2053    else if (str == "freebsd") str = "FreeBSD";
     2054    else if (str == "openbsd") str = "OpenBSD";
     2055    else if (str == "netbsd") str = "NetBSD";
     2056    else if (str == "netware") str = "Netware";
     2057    else if (str == "solaris") str = "Solaris";
     2058    else if (str == "opensolaris") str = "OpenSolaris";
     2059    else if (str == "l4") str = "L4";
     2060}
     2061
    18802062/**
    18812063 * Called from the constructor to actually read in the <Machine> element
     
    18972079        Utf8Str str;
    18982080        elmMachine.getAttributeValue("Description", strDescription);
     2081
    18992082        elmMachine.getAttributeValue("OSType", strOsType);
     2083        if (m->sv < SettingsVersion_v1_5)
     2084            convertOldOSType_pre1_5(strOsType);
     2085
    19002086        elmMachine.getAttributeValue("stateFile", strStateFile);
    19012087        if (elmMachine.getAttributeValue("currentSnapshot", str))
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