Changeset 89500 in vbox for trunk/include/VBox/vmm
- Timestamp:
- Jun 4, 2021 10:30:47 AM (4 years ago)
- svn:sync-xref-src-repo-rev:
- 144857
- Location:
- trunk/include/VBox/vmm
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/include/VBox/vmm/pdmaudiohostenuminline.h
r89232 r89500 62 62 * the PDMAUDIOHOSTDEV structure and appends additional data 63 63 * after it in its private structure. 64 */ 65 DECLINLINE(PPDMAUDIOHOSTDEV) PDMAudioHostDevAlloc(size_t cb) 64 * @param cbName The number of bytes to allocate for the name field 65 * (including the terminator). Pass zero if RTStrAlloc and 66 * friends will be used. 67 * @param cbId The number of bytes to allocate for the ID field. Pass 68 * zero if RTStrAlloc and friends will be used. 69 */ 70 DECLINLINE(PPDMAUDIOHOSTDEV) PDMAudioHostDevAlloc(size_t cb, size_t cbName, size_t cbId) 66 71 { 67 72 AssertReturn(cb >= sizeof(PDMAUDIOHOSTDEV), NULL); 68 73 AssertReturn(cb < _4M, NULL); 69 70 PPDMAUDIOHOSTDEV pDev = (PPDMAUDIOHOSTDEV)RTMemAllocZ(RT_ALIGN_Z(cb, 64)); 74 AssertReturn(cbName < _4K, NULL); 75 AssertReturn(cbId < _16K, NULL); 76 77 PPDMAUDIOHOSTDEV pDev = (PPDMAUDIOHOSTDEV)RTMemAllocZ(RT_ALIGN_Z(cb + cbName + cbId, 64)); 71 78 if (pDev) 72 79 { 73 pDev->uMagic = PDMAUDIOHOSTDEV_MAGIC;74 pDev->cbSelf = (uint32_t)cb;80 pDev->uMagic = PDMAUDIOHOSTDEV_MAGIC; 81 pDev->cbSelf = (uint32_t)cb; 75 82 RTListInit(&pDev->ListEntry); 76 77 //pDev->cMaxInputChannels = 0; 78 //pDev->cMaxOutputChannels = 0; 83 if (cbName) 84 pDev->pszName = (char *)pDev + cb; 85 if (cbId) 86 pDev->pszId = (char *)pDev + cb + cbName; 79 87 } 80 88 return pDev; … … 94 102 pDev->cbSelf = 0; 95 103 104 if (pDev->fFlags & PDMAUDIOHOSTDEV_F_NAME_ALLOC) 105 { 106 RTStrFree(pDev->pszName); 107 pDev->pszName = NULL; 108 } 109 96 110 if (pDev->fFlags & PDMAUDIOHOSTDEV_F_ID_ALLOC) 97 111 { … … 120 134 AssertReturn(cbToDup >= sizeof(*pDev), NULL); 121 135 122 PPDMAUDIOHOSTDEV pDevDup = PDMAudioHostDevAlloc(cbToDup );136 PPDMAUDIOHOSTDEV pDevDup = PDMAudioHostDevAlloc(cbToDup, 0, 0); 123 137 if (pDevDup) 124 138 { … … 126 140 RTListInit(&pDevDup->ListEntry); 127 141 pDevDup->cbSelf = cbToDup; 142 143 if (pDev->pszName) 144 { 145 uintptr_t off; 146 if ( (pDevDup->fFlags & PDMAUDIOHOSTDEV_F_NAME_ALLOC) 147 || (off = (uintptr_t)pDev->pszName - (uintptr_t)pDev) >= pDevDup->cbSelf) 148 { 149 pDevDup->fFlags |= PDMAUDIOHOSTDEV_F_NAME_ALLOC; 150 pDevDup->pszName = RTStrDup(pDev->pszName); 151 AssertReturnStmt(pDevDup->pszName, PDMAudioHostDevFree(pDevDup), NULL); 152 } 153 else 154 pDevDup->pszName = (char *)pDevDup + off; 155 } 156 128 157 if (pDev->pszId) 129 158 { 130 pDevDup->fFlags |= PDMAUDIOHOSTDEV_F_ID_ALLOC; 131 pDevDup->pszId = RTStrDup(pDev->pszId); 132 AssertReturnStmt(pDevDup->pszId, RTMemFree(pDevDup), NULL); 159 uintptr_t off; 160 if ( (pDevDup->fFlags & PDMAUDIOHOSTDEV_F_ID_ALLOC) 161 || (off = (uintptr_t)pDev->pszId - (uintptr_t)pDev) >= pDevDup->cbSelf) 162 { 163 pDevDup->fFlags |= PDMAUDIOHOSTDEV_F_ID_ALLOC; 164 pDevDup->pszId = RTStrDup(pDev->pszId); 165 AssertReturnStmt(pDevDup->pszId, PDMAudioHostDevFree(pDevDup), NULL); 166 } 167 else 168 pDevDup->pszId = (char *)pDevDup + off; 133 169 } 134 170 } … … 334 370 /** The max string length for all PDMAUDIOHOSTDEV_F_XXX. 335 371 * @sa PDMAudioHostDevFlagsToString */ 336 #define PDMAUDIOHOSTDEV_MAX_FLAGS_STRING_LEN sizeof("DEFAULT_OUT DEFAULT_IN HOTPLUG BUGGY IGNORE LOCKED DEAD ID_ALLOC NO_DUP ")372 #define PDMAUDIOHOSTDEV_MAX_FLAGS_STRING_LEN sizeof("DEFAULT_OUT DEFAULT_IN HOTPLUG BUGGY IGNORE LOCKED DEAD NAME_ALLOC ID_ALLOC NO_DUP ") 337 373 338 374 /** … … 356 392 { RT_STR_TUPLE("LOCKED "), PDMAUDIOHOSTDEV_F_LOCKED }, 357 393 { RT_STR_TUPLE("DEAD "), PDMAUDIOHOSTDEV_F_DEAD }, 358 { RT_STR_TUPLE("ID_ALLOC "), PDMAUDIOHOSTDEV_F_ID_ALLOC }, 394 { RT_STR_TUPLE("NAME_ALLOC "), PDMAUDIOHOSTDEV_F_NAME_ALLOC }, 395 { RT_STR_TUPLE("ID_ALLOC "), PDMAUDIOHOSTDEV_F_ID_ALLOC }, 359 396 { RT_STR_TUPLE("NO_DUP "), PDMAUDIOHOSTDEV_F_NO_DUP }, 360 397 }; … … 398 435 { 399 436 char szFlags[PDMAUDIOHOSTDEV_MAX_FLAGS_STRING_LEN]; 400 LogFunc(("Device '%s':\n", pDev->szName)); 437 LogFunc(("Device '%s':\n", pDev->pszName)); 438 LogFunc((" ID = %s\n", pDev->pszId ? pDev->pszId : "<none>")); 401 439 LogFunc((" Usage = %s\n", PDMAudioDirGetName(pDev->enmUsage))); 402 440 LogFunc((" Flags = %s\n", PDMAudioHostDevFlagsToString(szFlags, pDev->fFlags))); -
trunk/include/VBox/vmm/pdmaudioifs.h
r89489 r89500 291 291 /** The device is present but not in an alive state (dead). */ 292 292 #define PDMAUDIOHOSTDEV_F_DEAD RT_BIT_32(6) 293 /** Set if the PDMAUDIOHOSTDEV::pszName is allocated. */ 294 #define PDMAUDIOHOSTDEV_F_NAME_ALLOC RT_BIT_32(29) 293 295 /** Set if the PDMAUDIOHOSTDEV::pszId is allocated. */ 294 296 #define PDMAUDIOHOSTDEV_F_ID_ALLOC RT_BIT_32(30) … … 342 344 /** Maximum number of output audio channels the device supports. */ 343 345 uint8_t cMaxOutputChannels; 344 uint8_t abAlignment[ARCH_BITS == 32 ? 2 + 12 : 2];346 uint8_t abAlignment[ARCH_BITS == 32 ? 2 + 8 : 2 + 8]; 345 347 /** Backend specific device identifier, can be NULL, used to select device. 346 348 * This can either point into some non-public part of this structure or to a … … 349 351 * @sa PDMIHOSTAUDIO::pfnSetDevice */ 350 352 char *pszId; 351 /** Friendly name of the device, if any. Could be truncated. */352 char szName[64];353 /** The friendly device name. */ 354 char *pszName; 353 355 } PDMAUDIOHOSTDEV; 354 356 AssertCompileSizeAlignment(PDMAUDIOHOSTDEV, 16); … … 359 361 360 362 /** Magic value for PDMAUDIOHOSTDEV. */ 361 #define PDMAUDIOHOSTDEV_MAGIC PDM_VERSION_MAKE(0xa0d0, 2, 0)363 #define PDMAUDIOHOSTDEV_MAGIC PDM_VERSION_MAKE(0xa0d0, 3, 0) 362 364 363 365 … … 1387 1389 1388 1390 /** PDMIHOSTAUDIO interface ID. */ 1389 #define PDMIHOSTAUDIO_IID " 147dedd7-cac1-469b-b545-335dbe90abf6"1391 #define PDMIHOSTAUDIO_IID "2d57627f-6f47-4669-a2fa-93a5f1cb6e51" 1390 1392 1391 1393
Note:
See TracChangeset
for help on using the changeset viewer.