VirtualBox

Changeset 43603 in vbox


Ignore:
Timestamp:
Oct 10, 2012 3:58:48 PM (12 years ago)
Author:
vboxsync
Message:

vbox-img: Introduce --dataalignment parameter

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Storage/testcase/vbox-img.cpp

    r41550 r43603  
    6565                 "                [--format VDI|VMDK|VHD] (default: VDI)\n"
    6666                 "                [--variant Standard,Fixed,Split2G,Stream,ESX]\n"
     67                 "                [--dataalignment <alignment in bytes>]\n"
    6768                 "\n"
    6869                 "   repair       --filename <filename>\n"
     
    12971298}
    12981299
     1300static DECLCALLBACK(bool) vdIfCfgCreateBaseAreKeysValid(void *pvUser, const char *pszzValid)
     1301{
     1302    return VINF_SUCCESS; /** @todo: Implement. */
     1303}
     1304
     1305static DECLCALLBACK(int) vdIfCfgCreateBaseQuerySize(void *pvUser, const char *pszName, size_t *pcbValue)
     1306{
     1307    AssertReturn(VALID_PTR(pcbValue), VERR_INVALID_POINTER);
     1308
     1309    AssertPtrReturn(pvUser, VERR_GENERAL_FAILURE);
     1310
     1311    if (RTStrCmp(pszName, "DataAlignment"))
     1312        return VERR_CFGM_VALUE_NOT_FOUND;
     1313
     1314    *pcbValue = strlen((const char *)pvUser) + 1 /* include terminator */;
     1315
     1316    return VINF_SUCCESS;
     1317}
     1318
     1319static DECLCALLBACK(int) vdIfCfgCreateBaseQuery(void *pvUser, const char *pszName, char *pszValue, size_t cchValue)
     1320{
     1321    AssertReturn(VALID_PTR(pszValue), VERR_INVALID_POINTER);
     1322
     1323    AssertPtrReturn(pvUser, VERR_GENERAL_FAILURE);
     1324
     1325    if (RTStrCmp(pszName, "DataAlignment"))
     1326        return VERR_CFGM_VALUE_NOT_FOUND;
     1327
     1328    if (strlen((const char *)pvUser) >= cchValue)
     1329        return VERR_CFGM_NOT_ENOUGH_SPACE;
     1330
     1331    memcpy(pszValue, pvUser, strlen((const char *)pvUser) + 1);
     1332
     1333    return VINF_SUCCESS;
     1334
     1335}
    12991336
    13001337int handleCreateBase(HandlerArg *a)
     
    13071344    unsigned uImageFlags = VD_IMAGE_FLAGS_NONE;
    13081345    uint64_t cbSize = 0;
     1346    const char *pszDataAlignment = NULL;
    13091347    VDGEOMETRY LCHSGeometry, PCHSGeometry;
     1348    PVDINTERFACE pVDIfsOperation = NULL;
     1349    VDINTERFACECONFIG vdIfCfg;
    13101350
    13111351    memset(&LCHSGeometry, 0, sizeof(VDGEOMETRY));
     
    13151355    static const RTGETOPTDEF s_aOptions[] =
    13161356    {
    1317         { "--filename", 'f', RTGETOPT_REQ_STRING },
    1318         { "--size",     's', RTGETOPT_REQ_UINT64 },
    1319         { "--format",   'b', RTGETOPT_REQ_STRING },
    1320         { "--variant",  'v', RTGETOPT_REQ_STRING }
     1357        { "--filename",       'f', RTGETOPT_REQ_STRING },
     1358        { "--size",           's', RTGETOPT_REQ_UINT64 },
     1359        { "--format",         'b', RTGETOPT_REQ_STRING },
     1360        { "--variant",        'v', RTGETOPT_REQ_STRING },
     1361        { "--dataalignment",  'a', RTGETOPT_REQ_STRING }
    13211362    };
    13221363    int ch;
     
    13441385                break;
    13451386
     1387            case 'a':   // --dataalignment
     1388                pszDataAlignment = ValueUnion.psz;
     1389                break;
     1390
    13461391            default:
    13471392                ch = RTGetOptPrintError(ch, &ValueUnion);
     
    13651410    }
    13661411
     1412    /* Setup the config interface if required. */
     1413    if (pszDataAlignment)
     1414    {
     1415        vdIfCfg.pfnAreKeysValid = vdIfCfgCreateBaseAreKeysValid;
     1416        vdIfCfg.pfnQuerySize    = vdIfCfgCreateBaseQuerySize;
     1417        vdIfCfg.pfnQuery        = vdIfCfgCreateBaseQuery;
     1418        VDInterfaceAdd(&vdIfCfg.Core, "Config", VDINTERFACETYPE_CONFIG, (void *)pszDataAlignment,
     1419                       sizeof(vdIfCfg), &pVDIfsOperation);
     1420    }
     1421
    13671422    /* just try it */
    13681423    rc = VDCreate(pVDIfs, VDTYPE_HDD, &pDisk);
     
    13721427    rc = VDCreateBase(pDisk, pszBackend, pszFilename, cbSize, uImageFlags,
    13731428                      NULL, &PCHSGeometry, &LCHSGeometry, NULL, VD_OPEN_FLAGS_NORMAL,
    1374                       NULL, NULL);
     1429                      NULL, pVDIfsOperation);
    13751430    if (RT_FAILURE(rc))
    13761431        return errorRuntime("Error while creating the virtual disk: %Rrc\n", rc);
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