- Timestamp:
- Aug 23, 2021 7:52:46 PM (3 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Storage/VD.cpp
r90809 r90810 9105 9105 char *pszFilename, unsigned cbFilename) 9106 9106 { 9107 int rc;9108 int rc2;9109 bool fLockRead = false;9110 9111 9107 LogFlowFunc(("pDisk=%#p nImage=%u pszFilename=%#p cbFilename=%u\n", 9112 9108 pDisk, nImage, pszFilename, cbFilename)); 9113 do 9114 { 9115 /* sanity check */ 9116 AssertPtrBreakStmt(pDisk, rc = VERR_INVALID_PARAMETER); 9117 AssertMsg(pDisk->u32Signature == VDISK_SIGNATURE, ("u32Signature=%08x\n", pDisk->u32Signature)); 9118 9119 /* Check arguments. */ 9120 AssertMsgBreakStmt(VALID_PTR(pszFilename) && *pszFilename, 9121 ("pszFilename=%#p \"%s\"\n", pszFilename, pszFilename), 9122 rc = VERR_INVALID_PARAMETER); 9123 AssertMsgBreakStmt(cbFilename, 9124 ("cbFilename=%u\n", cbFilename), 9125 rc = VERR_INVALID_PARAMETER); 9126 9127 rc2 = vdThreadStartRead(pDisk); 9128 AssertRC(rc2); 9129 fLockRead = true; 9130 9131 PVDIMAGE pImage = vdGetImageByNumber(pDisk, nImage); 9132 AssertPtrBreakStmt(pImage, rc = VERR_VD_IMAGE_NOT_FOUND); 9133 9134 size_t cb = strlen(pImage->pszFilename); 9135 if (cb <= cbFilename) 9136 { 9137 strcpy(pszFilename, pImage->pszFilename); 9138 rc = VINF_SUCCESS; 9139 } 9140 else 9141 { 9142 strncpy(pszFilename, pImage->pszFilename, cbFilename - 1); 9143 pszFilename[cbFilename - 1] = '\0'; 9144 rc = VERR_BUFFER_OVERFLOW; 9145 } 9146 } while (0); 9147 9148 if (RT_UNLIKELY(fLockRead)) 9149 { 9150 rc2 = vdThreadFinishRead(pDisk); 9151 AssertRC(rc2); 9152 } 9109 /* sanity check */ 9110 AssertPtrReturn(pDisk, VERR_INVALID_POINTER); 9111 AssertMsg(pDisk->u32Signature == VDISK_SIGNATURE, ("u32Signature=%08x\n", pDisk->u32Signature)); 9112 9113 /* Check arguments. */ 9114 AssertPtrReturn(pszFilename, VERR_INVALID_POINTER); 9115 AssertReturn(cbFilename > 0, VERR_INVALID_PARAMETER); 9116 9117 /* Do the job. */ 9118 int rc2 = vdThreadStartRead(pDisk); 9119 AssertRC(rc2); 9120 9121 PVDIMAGE pImage = vdGetImageByNumber(pDisk, nImage); 9122 int rc; 9123 if (pImage) 9124 rc = RTStrCopy(pszFilename, cbFilename, pImage->pszFilename); 9125 else 9126 rc = VERR_VD_IMAGE_NOT_FOUND; 9127 9128 rc2 = vdThreadFinishRead(pDisk); 9129 AssertRC(rc2); 9153 9130 9154 9131 LogFlowFunc(("returns %Rrc, pszFilename=\"%s\"\n", rc, pszFilename));
Note:
See TracChangeset
for help on using the changeset viewer.