//----------------------------------------------------------------------------- // Purpose: Remove a configuration from the data block //----------------------------------------------------------------------------- bool RemoveConfig( int configID ) { if ( !g_ConfigManager.IsLoaded() ) return false; // Find the games block of the keyvalues KeyValues *gameBlock = g_ConfigManager.GetGameBlock(); if ( gameBlock == NULL ) { Assert( 0 ); return false; } int i = 0; // Iterate through all subkeys for ( KeyValues *pGame=gameBlock->GetFirstTrueSubKey(); pGame; pGame=pGame->GetNextTrueSubKey(), i++ ) { if ( i == configID ) { KeyValues *pOldGame = pGame; pGame = pGame->GetNextTrueSubKey(); gameBlock->RemoveSubKey( pOldGame ); pOldGame->deleteThis(); if ( pGame == NULL ) return true; } } return false; }
// Load the control settings void CBaseModFrame::LoadControlSettings( const char *dialogResourceName, const char *pathID, KeyValues *pPreloadedKeyValues, KeyValues *pConditions ) { // Use the keyvalues they passed in or load them using special hook for flyouts generation KeyValues *rDat = pPreloadedKeyValues; if ( !rDat ) { // load the resource data from the file rDat = new KeyValues(dialogResourceName); // check the skins directory first, if an explicit pathID hasn't been set bool bSuccess = false; if ( !IsX360() && !pathID ) { bSuccess = rDat->LoadFromFile( g_pFullFileSystem, dialogResourceName, "SKIN" ); } if ( !bSuccess ) { bSuccess = rDat->LoadFromFile( g_pFullFileSystem, dialogResourceName, pathID ); } if ( bSuccess ) { if ( IsX360() ) { rDat->ProcessResolutionKeys( surface()->GetResolutionKey() ); } if ( pConditions && pConditions->GetFirstSubKey() ) { GetBuildGroup()->ProcessConditionalKeys( rDat, pConditions ); } } } // Find the auto-generated-chapter hook if ( KeyValues *pHook = rDat->FindKey( "FlmChapterXXautogenerated" ) ) { const int numMaxAutogeneratedFlyouts = 20; for ( int k = 1; k <= numMaxAutogeneratedFlyouts; ++ k ) { KeyValues *pFlyoutInfo = pHook->MakeCopy(); CFmtStr strName( "FlmChapter%d", k ); pFlyoutInfo->SetName( strName ); pFlyoutInfo->SetString( "fieldName", strName ); pFlyoutInfo->SetString( "ResourceFile", CFmtStr( "FlmChapterXXautogenerated_%d/%s", k, pHook->GetString( "ResourceFile" ) ) ); rDat->AddSubKey( pFlyoutInfo ); } rDat->RemoveSubKey( pHook ); pHook->deleteThis(); } BaseClass::LoadControlSettings( dialogResourceName, pathID, rDat, pConditions ); if ( rDat != pPreloadedKeyValues ) { rDat->deleteThis(); } }
static cell_t smn_KvDeleteThis(IPluginContext *pContext, const cell_t *params) { Handle_t hndl = static_cast<Handle_t>(params[1]); HandleError herr; HandleSecurity sec; KeyValueStack *pStk; sec.pOwner = NULL; sec.pIdentity = g_pCoreIdent; if ((herr=handlesys->ReadHandle(hndl, g_KeyValueType, &sec, (void **)&pStk)) != HandleError_None) { return pContext->ThrowNativeError("Invalid key value handle %x (error %d)", hndl, herr); } if (pStk->pCurRoot.size() < 2) { return 0; } KeyValues *pValues = pStk->pCurRoot.front(); pStk->pCurRoot.pop(); KeyValues *pRoot = pStk->pCurRoot.front(); /* We have to manually verify this since Valve sucks * :TODO: make our own KeyValues.h file and make * the sub stuff private so we can do this ourselves! */ KeyValues *sub = pRoot->GetFirstSubKey(); while (sub) { if (sub == pValues) { KeyValues *pNext = pValues->GetNextKey(); pRoot->RemoveSubKey(pValues); pValues->deleteThis(); if (pNext) { pStk->pCurRoot.push(pNext); return 1; } else { return -1; } } sub = sub->GetNextKey(); } /* Push this back on :( */ pStk->pCurRoot.push(pValues); return 0; }
static cell_t smn_KvDeleteKey(IPluginContext *pContext, const cell_t *params) { Handle_t hndl = static_cast<Handle_t>(params[1]); HandleError herr; HandleSecurity sec; KeyValueStack *pStk; sec.pOwner = NULL; sec.pIdentity = g_pCoreIdent; if ((herr=handlesys->ReadHandle(hndl, g_KeyValueType, &sec, (void **)&pStk)) != HandleError_None) { return pContext->ThrowNativeError("Invalid key value handle %x (error %d)", hndl, herr); } if (pStk->pCurRoot.size() < 2) { return 0; } char *keyName; pContext->LocalToString(params[2], &keyName); KeyValues *pRoot = pStk->pCurRoot.front(); KeyValues *pValues = pRoot->FindKey(keyName); if (!pValues) { return 0; } pRoot->RemoveSubKey(pValues); pValues->deleteThis(); return 1; }
//-------------------------------------------------------------------------------------------------------------- void DownloadCache::PersistToDisk( const RequestContext *rc ) { if ( !m_cache ) return; if ( rc && rc->data && rc->nBytesTotal ) { char gamePath[MAX_PATH]; if ( rc->bIsBZ2 ) { Q_StripExtension( rc->gamePath, gamePath, sizeof( gamePath ) ); } else { Q_strncpy( gamePath, rc->gamePath, sizeof( gamePath ) ); } if ( !g_pFileSystem->FileExists( gamePath ) ) { // Create the subdirs char * tmpDir = CloneString( gamePath ); COM_CreatePath( tmpDir ); delete[] tmpDir; bool success = false; if ( rc->bIsBZ2 ) { success = DecompressBZipToDisk( gamePath, rc->gamePath, reinterpret_cast< char * >(rc->data), rc->nBytesTotal ); } else { FileHandle_t fp = g_pFileSystem->Open( gamePath, "wb" ); if ( fp ) { g_pFileSystem->Write( rc->data, rc->nBytesTotal, fp ); g_pFileSystem->Close( fp ); success = true; } } if ( success ) { // write succeeded. remove any old data from the cache. char cachePath[_MAX_PATH]; GetCacheFilename( rc, cachePath ); if ( cachePath[0] ) { g_pFileSystem->RemoveFile( cachePath, NULL ); } BuildKeyNames( rc->gamePath ); KeyValues *kv = m_cache->FindKey( m_cachefileKey, false ); if ( kv ) { m_cache->RemoveSubKey( kv ); } kv = m_cache->FindKey( m_timestampKey, false ); if ( kv ) { m_cache->RemoveSubKey( kv ); } } } } m_cache->SaveToFile( g_pFileSystem, CacheFilename, NULL ); }