// --------------------------------------------------------------------------- // // --------------------------------------------------------------------------- // void CCatalogsStringManager::ReleaseString( TInt aType, const CCatalogsRefString*& aString ) { if ( aString ) { ReleaseString( aType, *aString ); aString = NULL; } }
void DeviceInfo::Destroy() { if (devLocked) { devDeleteOnUnlock = TRUE; } else { // release all strings here ReleaseString(devSerialNumber); ReleaseString(devPortName); ReleaseString(devContainerId); ReleaseString(devFriendlyName); ReleaseString(devHardwareId); ReleaseString(devDevicePath); // unlink if (devNext) { devNext->devPrev = devPrev; } if (devPrev) { devPrev->devNext = devNext; } else { gdevTracker->SetPortList(devNext); } delete this; } }
const std::string Parser::ReadIdentifier() { // Assert( NotAtEnd() && CharClass::IDENTIFIER_HEAD.Contains(GetChar()) ) Mark(); do { Advance(); } while (NotAtEnd() && InClass(CharClass::IDENTIFIER_TAIL)); return ReleaseString(); }
void DeviceInfo::UpdateDevice(enum DevType aDevType, enum DevState aDevState, FILETIME aNow, wchar_t *aPortName, int aPortNumber, unsigned aUsbHub, unsigned aUsbPort, BOOL aUsbValid, wchar_t *aSerialNumber, unsigned aScanId, BOOL aIsWinSerial) { // change of device type happens when installing/removing device drivers if (devType != aDevType) { BOOL nameChanged = FALSE; #ifdef _DEBUG PrintDebugStatus(_T("DevType changed (%u -> %u)\n"), devType, aDevType); #endif if (devPresent) { // update counts DecDeviceTypeCount(); devType = aDevType; IncDeviceTypeCount(); } else { devType = aDevType; } // update DeviceTracker counts, decide on notifications gdevTracker->DetermineRemovalNotifications(devType, devState, DevRemoved); gdevTracker->DetermineArrivalNotifications(aDevType, devState); // rely on FindDevMatchBySernum() to enforce type change restrictions SetDeviceIcon(); // update port status & icon on display gdevTracker->UpdateViewItemIconAndType(devImage, DevTypeName(), (LPARAM)this); // installing driver can add/change name if ((aPortName) && (!devPortName || wcscmp(devPortName, aPortName))) { #ifdef _DEBUG PrintDebugStatus(_T("Adding PortName (%s)\n"), aPortName); #endif ReleaseString(devPortName); devPortName = _wcsdup(aPortName); if (devPortName) { devPortNumber = aPortNumber; nameChanged = TRUE; } } else if (devPortName && !aPortName) { #ifdef _DEBUG PrintDebugStatus(_T("Release portname (%s)\n"), devPortName); #endif // driver uninstalled, portname removed ReleaseString(devPortName); nameChanged = TRUE; } if (nameChanged) { gdevTracker->UpdateViewItemPortName(DisplayName(), (LPARAM)this); } } // check for change of state, eg removed etc... UpdateDeviceState(aDevState, aNow, aScanId); if ((devState == DevArrived) || (devState == DevPresent)) { // portname has changed? eg by user in Device Manager if ((aPortName) && (!devPortName || wcscmp(devPortName, aPortName))) { ReleaseString(devPortName); devPortName = _wcsdup(aPortName); if (devPortName) { devPortNumber = aPortNumber; // NB should reorder devices to reflect updated portname gdevTracker->UpdateViewItemPortName(devPortName, (LPARAM)this); } } } if (aUsbValid) { if ((devUsbValid != aUsbValid) || (devUsbHub != aUsbHub) || (devUsbPort != aUsbPort)) { devUsbValid = aUsbValid; devUsbHub = aUsbHub; devUsbPort = aUsbPort; // update displayed usb location gdevTracker->UpdateViewItemLocation(LocationString(), (LPARAM)this); } } if (!devSerialNumber && aSerialNumber) { devSerialNumber = _wcsdup(aSerialNumber); if (devSerialNumber) { devIsWinSerial = aIsWinSerial; // NB should reorder devices to reflect updated serial number gdevTracker->UpdateViewItemSerialNumber(devSerialNumber, (LPARAM)this); } } devScanId = aScanId; }