// ---------------------------------------------------------------------------
// 
// ---------------------------------------------------------------------------
//
void CCatalogsStringManager::ReleaseString( 
    TInt aType,
    const CCatalogsRefString*& aString )
    {
    if ( aString ) 
        {
        ReleaseString( aType, *aString );
        aString = NULL;
        }
    }
Exemple #2
0
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;
    }
}
Exemple #3
0
	const std::string Parser::ReadIdentifier()
	{
		// Assert( NotAtEnd() && CharClass::IDENTIFIER_HEAD.Contains(GetChar()) )

		Mark();

		do
		{
			Advance();
		}
		while (NotAtEnd() && InClass(CharClass::IDENTIFIER_TAIL));

		return ReleaseString();
	}
Exemple #4
0
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;
}