VirtualBox

Changeset 6481 in vbox


Ignore:
Timestamp:
Jan 24, 2008 2:24:54 PM (17 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
27482
Message:

vdi: when creating a fixed-size image, check for available space before starting to create the image

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Devices/Storage/VDICore.cpp

    r6472 r6481  
    423423        uint64_t cbLock = pImage->offStartData
    424424                        + ((uint64_t)getImageBlocks(&pImage->Header) << pImage->uShiftIndex2Offset);
     425
     426        if (enmType == VDI_IMAGE_TYPE_FIXED)
     427        {
     428            /* check the free space on the disk and leave early if there is not
     429             * sufficient space available */
     430            RTFOFF cbFree = 0;
     431            rc = RTFsQuerySizes(pszFilename, NULL, &cbFree, NULL, NULL);
     432            if (VBOX_SUCCESS(rc) /* ignore errors */ && ((uint64_t)cbFree < cbLock))
     433            {
     434                rc = VERR_DISK_FULL;
     435                cbLock = 0;
     436                goto l_create_failed;
     437            }
     438        }
     439
    425440        rc = RTFileLock(pImage->File,
    426441                        RTFILE_LOCK_WRITE | RTFILE_LOCK_IMMEDIATELY, 0, cbLock);
     
    437452             * effective than expanding file by write operations.
    438453             */
    439             rc = RTFileSetSize(pImage->File,
    440                                pImage->offStartData
    441                              + ((uint64_t)getImageBlocks(&pImage->Header) << pImage->uShiftIndex2Offset));
     454            rc = RTFileSetSize(pImage->File, cbLock);
    442455        }
    443456        else
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