VirtualBox

Changeset 383 in vbox for trunk


Ignore:
Timestamp:
Jan 27, 2007 10:41:48 AM (18 years ago)
Author:
vboxsync
Message:

added VDI compacting

File:
1 edited

Legend:

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

    r132 r383  
    5656#include <VBox/err.h>
    5757#include <VBox/version.h>
     58#include <VBox/VBoxHDD.h>
    5859
    5960#include "VBoxManage.h"
     
    412413    {
    413414        RTPrintf("VBoxManage modifyvdi        <uuid>|<filename>\n"
    414                  "                            -type normal|writethrough|immutable\n"
     415                 "                            settype normal|writethrough|immutable |\n"
     416                 "                            compact\n"
    415417                 "\n");
    416418    }
     
    20882090}
    20892091
     2092static DECLCALLBACK(int) vdiProgressCallback(PVM pVM, unsigned uPercent, void *pvUser)
     2093{
     2094    unsigned *pPercent = (unsigned *)pvUser;
     2095
     2096    if (*pPercent != uPercent)
     2097    {
     2098        *pPercent = uPercent;
     2099        RTPrintf(".");
     2100        if ((uPercent % 10) == 0 && uPercent)
     2101            RTPrintf("%d%%", uPercent);
     2102        RTStrmFlush(g_pStdOut);
     2103    }
     2104
     2105    return VINF_SUCCESS;
     2106}
     2107
     2108
    20902109static int handleModifyVDI(int argc, char *argv[],
    20912110                           ComPtr<IVirtualBox> virtualBox, ComPtr<ISession> session)
    20922111{
    20932112    HRESULT rc;
    2094     char *type = NULL;
    2095 
    2096     /* The uuid/filename and a the parameter "-type" with an argument. */
    2097     if (argc != 3)
     2113
     2114    /* The uuid/filename and a command */
     2115    if (argc < 2)
    20982116    {
    20992117        return errorSyntax(USAGE_MODIFYVDI, "Incorrect number of parameters");
    2100     }
    2101 
    2102     /* let's have a closer look at the arguments */
    2103     for (int i = 1; i < argc; i++)
    2104     {
    2105         if (strcmp(argv[i], "-type") == 0)
    2106         {
    2107             if (argc <= i + 1)
    2108             {
    2109                 return errorArgument("Missing argument to '%s'", argv[i]);
    2110             }
    2111             i++;
    2112             type = argv[i];
    2113         }
    2114         else
    2115         {
    2116             return errorSyntax(USAGE_MODIFYVDI, "Invalid parameter '%s'", Utf8Str(argv[i]).raw());
    2117         }
    21182118    }
    21192119
     
    21362136        vdi = hardDisk;
    21372137    }
    2138     if (SUCCEEDED(rc) && hardDisk && vdi)
    2139     {
    2140         if (type)
    2141         {
     2138
     2139    /* let's find out which command */
     2140    if (strcmp(argv[1], "settype") == 0)
     2141    {
     2142        /* hard disk must be registered */
     2143        if (SUCCEEDED(rc) && hardDisk && vdi)
     2144        {
     2145            char *type = NULL;
     2146
     2147            if (argc <= 2)
     2148            {
     2149                return errorArgument("Missing argument to for settype");
     2150            }
     2151            type = argv[2];
     2152
    21422153            HardDiskType_T hddType;
    21432154            CHECK_ERROR(hardDisk, COMGETTER(Type)(&hddType));
     
    21642175            }
    21652176        }
     2177        else
     2178        {
     2179            return errorArgument("Hard disk image not registered");
     2180        }
     2181    }
     2182    else if (strcmp(argv[1], "compact") == 0)
     2183    {
     2184        ComPtr<IVirtualDiskImage> vdi;
     2185
     2186        /* the hard disk image might not be registered */
     2187        if (!hardDisk)
     2188        {
     2189            virtualBox->OpenVirtualDiskImage(Bstr(argv[0]), vdi.asOutParam());
     2190            if (!hardDisk)
     2191            {
     2192                return errorArgument("Hard disk image not found");
     2193            }
     2194        }
     2195        else
     2196            vdi = hardDisk;
     2197
     2198        if (!vdi)
     2199            return errorArgument("Invalid hard disk type. The command only works on VDI files\n");
     2200
     2201        Bstr fileName;
     2202        vdi->COMGETTER(FilePath)(fileName.asOutParam());
     2203
     2204        /* close the file */
     2205        hardDisk = NULL;
     2206        vdi = NULL;
     2207
     2208        unsigned uProcent;
     2209
     2210        RTPrintf("Shrinking '%lS': 0%%", fileName.raw());
     2211        int vrc = VDIShrinkImage(Utf8Str(fileName).raw(), vdiProgressCallback, &uProcent);
     2212        if (VBOX_FAILURE(vrc))
     2213        {
     2214            RTPrintf("Error while shrinking hard disk image: %Vrc\n", vrc);
     2215            rc = E_FAIL;
     2216        }
     2217    }
     2218    else
     2219    {
     2220        return errorSyntax(USAGE_MODIFYVDI, "Invalid parameter '%s'", Utf8Str(argv[1]).raw());
    21662221    }
    21672222    return SUCCEEDED(rc) ? 0 : 1;
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