aboutsummaryrefslogtreecommitdiff
path: root/mp/src/public/registry.cpp
diff options
context:
space:
mode:
authorJørgen P. Tjernø <[email protected]>2013-12-02 19:31:46 -0800
committerJørgen P. Tjernø <[email protected]>2013-12-02 19:46:31 -0800
commitf56bb35301836e56582a575a75864392a0177875 (patch)
treede61ddd39de3e7df52759711950b4c288592f0dc /mp/src/public/registry.cpp
parentMark some more files as text. (diff)
downloadsource-sdk-2013-f56bb35301836e56582a575a75864392a0177875.tar.xz
source-sdk-2013-f56bb35301836e56582a575a75864392a0177875.zip
Fix line endings. WHAMMY.
Diffstat (limited to 'mp/src/public/registry.cpp')
-rw-r--r--mp/src/public/registry.cpp842
1 files changed, 421 insertions, 421 deletions
diff --git a/mp/src/public/registry.cpp b/mp/src/public/registry.cpp
index b883beef..be4286cb 100644
--- a/mp/src/public/registry.cpp
+++ b/mp/src/public/registry.cpp
@@ -1,421 +1,421 @@
-//========= Copyright Valve Corporation, All rights reserved. ============//
-//
-// Purpose:
-//
-// $NoKeywords: $
-//===========================================================================//
-
-#if defined( WIN32 ) && !defined( _X360 )
-#include <windows.h>
-#endif
-#include "tier0/platform.h"
-#include "tier0/vcrmode.h"
-#include "iregistry.h"
-#include "tier0/dbg.h"
-#include "tier1/strtools.h"
-#include <stdio.h>
-#if defined( _X360 )
-#include "xbox/xbox_win32stubs.h"
-#endif
-
-// memdbgon must be the last include file in a .cpp file!!!
-#include "tier0/memdbgon.h"
-
-//-----------------------------------------------------------------------------
-// Purpose: Exposes registry interface to rest of launcher
-//-----------------------------------------------------------------------------
-class CRegistry : public IRegistry
-{
-public:
- CRegistry( void );
- virtual ~CRegistry( void );
-
- virtual bool Init( const char *platformName );
- virtual bool DirectInit( const char *subDirectoryUnderValve );
- virtual void Shutdown( void );
-
- virtual int ReadInt( const char *key, int defaultValue = 0);
- virtual void WriteInt( const char *key, int value );
-
- virtual const char *ReadString( const char *key, const char *defaultValue = NULL );
- virtual void WriteString( const char *key, const char *value );
-
- // Read/write helper methods
- virtual int ReadInt( const char *pKeyBase, const char *pKey, int defaultValue = 0 );
- virtual void WriteInt( const char *pKeyBase, const char *key, int value );
- virtual const char *ReadString( const char *pKeyBase, const char *key, const char *defaultValue );
- virtual void WriteString( const char *pKeyBase, const char *key, const char *value );
-
-private:
- bool m_bValid;
-#ifdef WIN32
- HKEY m_hKey;
-#endif
-};
-
-// Creates it and calls Init
-IRegistry *InstanceRegistry( char const *subDirectoryUnderValve )
-{
- CRegistry *instance = new CRegistry();
- instance->DirectInit( subDirectoryUnderValve );
- return instance;
-}
-
-// Calls Shutdown and deletes it
-void ReleaseInstancedRegistry( IRegistry *reg )
-{
- if ( !reg )
- {
- Assert( !"ReleaseInstancedRegistry( reg == NULL )!" );
- return;
- }
-
- reg->Shutdown();
- delete reg;
-}
-
-// Expose to launcher
-static CRegistry g_Registry;
-IRegistry *registry = ( IRegistry * )&g_Registry;
-
-//-----------------------------------------------------------------------------
-// Read/write helper methods
-//-----------------------------------------------------------------------------
-int CRegistry::ReadInt( const char *pKeyBase, const char *pKey, int defaultValue )
-{
- int nLen = strlen( pKeyBase );
- int nKeyLen = strlen( pKey );
- char *pFullKey = (char*)_alloca( nLen + nKeyLen + 2 );
- Q_snprintf( pFullKey, nLen + nKeyLen + 2, "%s\\%s", pKeyBase, pKey );
- return ReadInt( pFullKey, defaultValue );
-}
-
-void CRegistry::WriteInt( const char *pKeyBase, const char *pKey, int value )
-{
- int nLen = strlen( pKeyBase );
- int nKeyLen = strlen( pKey );
- char *pFullKey = (char*)_alloca( nLen + nKeyLen + 2 );
- Q_snprintf( pFullKey, nLen + nKeyLen + 2, "%s\\%s", pKeyBase, pKey );
- WriteInt( pFullKey, value );
-}
-
-const char *CRegistry::ReadString( const char *pKeyBase, const char *pKey, const char *defaultValue )
-{
- int nLen = strlen( pKeyBase );
- int nKeyLen = strlen( pKey );
- char *pFullKey = (char*)_alloca( nLen + nKeyLen + 2 );
- Q_snprintf( pFullKey, nLen + nKeyLen + 2, "%s\\%s", pKeyBase, pKey );
- return ReadString( pFullKey, defaultValue );
-}
-
-void CRegistry::WriteString( const char *pKeyBase, const char *pKey, const char *value )
-{
- int nLen = strlen( pKeyBase );
- int nKeyLen = strlen( pKey );
- char *pFullKey = (char*)_alloca( nLen + nKeyLen + 2 );
- Q_snprintf( pFullKey, nLen + nKeyLen + 2, "%s\\%s", pKeyBase, pKey );
- WriteString( pFullKey, value );
-}
-
-#ifndef POSIX
-
-//-----------------------------------------------------------------------------
-// Purpose:
-//-----------------------------------------------------------------------------
-CRegistry::CRegistry( void )
-{
- // Assume failure
- m_bValid = false;
- m_hKey = 0;
-}
-
-//-----------------------------------------------------------------------------
-// Purpose:
-//-----------------------------------------------------------------------------
-CRegistry::~CRegistry( void )
-{
-}
-
-//-----------------------------------------------------------------------------
-// Purpose: Read integer from registry
-// Input : *key -
-// defaultValue -
-// Output : int
-//-----------------------------------------------------------------------------
-int CRegistry::ReadInt( const char *key, int defaultValue /*= 0*/ )
-{
- LONG lResult; // Registry function result code
- DWORD dwType; // Type of key
- DWORD dwSize; // Size of element data
-
- int value;
-
- if ( !m_bValid )
- {
- return defaultValue;
- }
-
- dwSize = sizeof( DWORD );
-
- lResult = VCRHook_RegQueryValueEx(
- m_hKey, // handle to key
- key, // value name
- 0, // reserved
- &dwType, // type buffer
- (LPBYTE)&value, // data buffer
- &dwSize ); // size of data buffer
-
- if (lResult != ERROR_SUCCESS) // Failure
- return defaultValue;
-
- if (dwType != REG_DWORD)
- return defaultValue;
-
- return value;
-}
-
-//-----------------------------------------------------------------------------
-// Purpose: Save integer to registry
-// Input : *key -
-// value -
-//-----------------------------------------------------------------------------
-void CRegistry::WriteInt( const char *key, int value )
-{
- // Size of element data
- DWORD dwSize;
-
- if ( !m_bValid )
- {
- return;
- }
-
- dwSize = sizeof( DWORD );
-
- VCRHook_RegSetValueEx(
- m_hKey, // handle to key
- key, // value name
- 0, // reserved
- REG_DWORD, // type buffer
- (LPBYTE)&value, // data buffer
- dwSize ); // size of data buffer
-}
-
-//-----------------------------------------------------------------------------
-// Purpose: Read string value from registry
-// Input : *key -
-// *defaultValue -
-// Output : const char
-//-----------------------------------------------------------------------------
-const char *CRegistry::ReadString( const char *key, const char *defaultValue /* = NULL */ )
-{
- LONG lResult;
- // Type of key
- DWORD dwType;
- // Size of element data
- DWORD dwSize = 512;
-
- static char value[ 512 ];
-
- value[0] = 0;
-
- if ( !m_bValid )
- {
- return defaultValue;
- }
-
- lResult = VCRHook_RegQueryValueEx(
- m_hKey, // handle to key
- key, // value name
- 0, // reserved
- &dwType, // type buffer
- (unsigned char *)value, // data buffer
- &dwSize ); // size of data buffer
-
- if ( lResult != ERROR_SUCCESS )
- {
- return defaultValue;
- }
-
- if ( dwType != REG_SZ )
- {
- return defaultValue;
- }
-
- return value;
-}
-
-//-----------------------------------------------------------------------------
-// Purpose: Save string to registry
-// Input : *key -
-// *value -
-//-----------------------------------------------------------------------------
-void CRegistry::WriteString( const char *key, const char *value )
-{
- DWORD dwSize; // Size of element data
-
- if ( !m_bValid )
- {
- return;
- }
-
- dwSize = (DWORD)( strlen( value ) + 1 );
-
- VCRHook_RegSetValueEx(
- m_hKey, // handle to key
- key, // value name
- 0, // reserved
- REG_SZ, // type buffer
- (LPBYTE)value, // data buffer
- dwSize ); // size of data buffer
-}
-
-
-
-
-bool CRegistry::DirectInit( const char *subDirectoryUnderValve )
-{
- LONG lResult; // Registry function result code
- ULONG dwDisposition; // Type of key opening event
-
- char szModelKey[ 1024 ];
- wsprintf( szModelKey, "Software\\Valve\\%s", subDirectoryUnderValve );
-
- lResult = VCRHook_RegCreateKeyEx(
- HKEY_CURRENT_USER, // handle of open key
- szModelKey, // address of name of subkey to open
- 0ul, // DWORD ulOptions, // reserved
- NULL, // Type of value
- REG_OPTION_NON_VOLATILE, // Store permanently in reg.
- KEY_ALL_ACCESS, // REGSAM samDesired, // security access mask
- NULL,
- &m_hKey, // Key we are creating
- &dwDisposition ); // Type of creation
-
- if ( lResult != ERROR_SUCCESS )
- {
- m_bValid = false;
- return false;
- }
-
- // Success
- m_bValid = true;
- return true;
-}
-
-//-----------------------------------------------------------------------------
-// Purpose: Open default launcher key based on game directory
-//-----------------------------------------------------------------------------
-bool CRegistry::Init( const char *platformName )
-{
- char subDir[ 512 ];
- wsprintf( subDir, "%s\\Settings", platformName );
- return DirectInit( subDir );
-}
-
-//-----------------------------------------------------------------------------
-// Purpose:
-//-----------------------------------------------------------------------------
-void CRegistry::Shutdown( void )
-{
- if ( !m_bValid )
- return;
-
- // Make invalid
- m_bValid = false;
- VCRHook_RegCloseKey( m_hKey );
-}
-
-#else
-
-
-
-
-
-
-//-----------------------------------------------------------------------------
-// Purpose:
-//-----------------------------------------------------------------------------
-CRegistry::CRegistry( void )
-{
- // Assume failure
- m_bValid = false;
-}
-
-//-----------------------------------------------------------------------------
-// Purpose:
-//-----------------------------------------------------------------------------
-CRegistry::~CRegistry( void )
-{
-}
-
-//-----------------------------------------------------------------------------
-// Purpose: Read integer from registry
-// Input : *key -
-// defaultValue -
-// Output : int
-//-----------------------------------------------------------------------------
-int CRegistry::ReadInt( const char *key, int defaultValue /*= 0*/ )
-{
- return 0;
-}
-
-//-----------------------------------------------------------------------------
-// Purpose: Save integer to registry
-// Input : *key -
-// value -
-//-----------------------------------------------------------------------------
-void CRegistry::WriteInt( const char *key, int value )
-{
-}
-
-//-----------------------------------------------------------------------------
-// Purpose: Read string value from registry
-// Input : *key -
-// *defaultValue -
-// Output : const char
-//-----------------------------------------------------------------------------
-const char *CRegistry::ReadString( const char *key, const char *defaultValue /* = NULL */ )
-{
- return 0;
-}
-
-//-----------------------------------------------------------------------------
-// Purpose: Save string to registry
-// Input : *key -
-// *value -
-//-----------------------------------------------------------------------------
-void CRegistry::WriteString( const char *key, const char *value )
-{
-}
-
-
-
-bool CRegistry::DirectInit( const char *subDirectoryUnderValve )
-{
-
- return true;
-}
-
-//-----------------------------------------------------------------------------
-// Purpose: Open default launcher key based on game directory
-//-----------------------------------------------------------------------------
-bool CRegistry::Init( const char *platformName )
-{
- char subDir[ 512 ];
- snprintf( subDir, sizeof(subDir), "%s\\Settings", platformName );
- return DirectInit( subDir );
-}
-
-//-----------------------------------------------------------------------------
-// Purpose:
-//-----------------------------------------------------------------------------
-void CRegistry::Shutdown( void )
-{
- if ( !m_bValid )
- return;
-
- // Make invalid
- m_bValid = false;
-}
-#endif // POSIX
-
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose:
+//
+// $NoKeywords: $
+//===========================================================================//
+
+#if defined( WIN32 ) && !defined( _X360 )
+#include <windows.h>
+#endif
+#include "tier0/platform.h"
+#include "tier0/vcrmode.h"
+#include "iregistry.h"
+#include "tier0/dbg.h"
+#include "tier1/strtools.h"
+#include <stdio.h>
+#if defined( _X360 )
+#include "xbox/xbox_win32stubs.h"
+#endif
+
+// memdbgon must be the last include file in a .cpp file!!!
+#include "tier0/memdbgon.h"
+
+//-----------------------------------------------------------------------------
+// Purpose: Exposes registry interface to rest of launcher
+//-----------------------------------------------------------------------------
+class CRegistry : public IRegistry
+{
+public:
+ CRegistry( void );
+ virtual ~CRegistry( void );
+
+ virtual bool Init( const char *platformName );
+ virtual bool DirectInit( const char *subDirectoryUnderValve );
+ virtual void Shutdown( void );
+
+ virtual int ReadInt( const char *key, int defaultValue = 0);
+ virtual void WriteInt( const char *key, int value );
+
+ virtual const char *ReadString( const char *key, const char *defaultValue = NULL );
+ virtual void WriteString( const char *key, const char *value );
+
+ // Read/write helper methods
+ virtual int ReadInt( const char *pKeyBase, const char *pKey, int defaultValue = 0 );
+ virtual void WriteInt( const char *pKeyBase, const char *key, int value );
+ virtual const char *ReadString( const char *pKeyBase, const char *key, const char *defaultValue );
+ virtual void WriteString( const char *pKeyBase, const char *key, const char *value );
+
+private:
+ bool m_bValid;
+#ifdef WIN32
+ HKEY m_hKey;
+#endif
+};
+
+// Creates it and calls Init
+IRegistry *InstanceRegistry( char const *subDirectoryUnderValve )
+{
+ CRegistry *instance = new CRegistry();
+ instance->DirectInit( subDirectoryUnderValve );
+ return instance;
+}
+
+// Calls Shutdown and deletes it
+void ReleaseInstancedRegistry( IRegistry *reg )
+{
+ if ( !reg )
+ {
+ Assert( !"ReleaseInstancedRegistry( reg == NULL )!" );
+ return;
+ }
+
+ reg->Shutdown();
+ delete reg;
+}
+
+// Expose to launcher
+static CRegistry g_Registry;
+IRegistry *registry = ( IRegistry * )&g_Registry;
+
+//-----------------------------------------------------------------------------
+// Read/write helper methods
+//-----------------------------------------------------------------------------
+int CRegistry::ReadInt( const char *pKeyBase, const char *pKey, int defaultValue )
+{
+ int nLen = strlen( pKeyBase );
+ int nKeyLen = strlen( pKey );
+ char *pFullKey = (char*)_alloca( nLen + nKeyLen + 2 );
+ Q_snprintf( pFullKey, nLen + nKeyLen + 2, "%s\\%s", pKeyBase, pKey );
+ return ReadInt( pFullKey, defaultValue );
+}
+
+void CRegistry::WriteInt( const char *pKeyBase, const char *pKey, int value )
+{
+ int nLen = strlen( pKeyBase );
+ int nKeyLen = strlen( pKey );
+ char *pFullKey = (char*)_alloca( nLen + nKeyLen + 2 );
+ Q_snprintf( pFullKey, nLen + nKeyLen + 2, "%s\\%s", pKeyBase, pKey );
+ WriteInt( pFullKey, value );
+}
+
+const char *CRegistry::ReadString( const char *pKeyBase, const char *pKey, const char *defaultValue )
+{
+ int nLen = strlen( pKeyBase );
+ int nKeyLen = strlen( pKey );
+ char *pFullKey = (char*)_alloca( nLen + nKeyLen + 2 );
+ Q_snprintf( pFullKey, nLen + nKeyLen + 2, "%s\\%s", pKeyBase, pKey );
+ return ReadString( pFullKey, defaultValue );
+}
+
+void CRegistry::WriteString( const char *pKeyBase, const char *pKey, const char *value )
+{
+ int nLen = strlen( pKeyBase );
+ int nKeyLen = strlen( pKey );
+ char *pFullKey = (char*)_alloca( nLen + nKeyLen + 2 );
+ Q_snprintf( pFullKey, nLen + nKeyLen + 2, "%s\\%s", pKeyBase, pKey );
+ WriteString( pFullKey, value );
+}
+
+#ifndef POSIX
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+CRegistry::CRegistry( void )
+{
+ // Assume failure
+ m_bValid = false;
+ m_hKey = 0;
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+CRegistry::~CRegistry( void )
+{
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: Read integer from registry
+// Input : *key -
+// defaultValue -
+// Output : int
+//-----------------------------------------------------------------------------
+int CRegistry::ReadInt( const char *key, int defaultValue /*= 0*/ )
+{
+ LONG lResult; // Registry function result code
+ DWORD dwType; // Type of key
+ DWORD dwSize; // Size of element data
+
+ int value;
+
+ if ( !m_bValid )
+ {
+ return defaultValue;
+ }
+
+ dwSize = sizeof( DWORD );
+
+ lResult = VCRHook_RegQueryValueEx(
+ m_hKey, // handle to key
+ key, // value name
+ 0, // reserved
+ &dwType, // type buffer
+ (LPBYTE)&value, // data buffer
+ &dwSize ); // size of data buffer
+
+ if (lResult != ERROR_SUCCESS) // Failure
+ return defaultValue;
+
+ if (dwType != REG_DWORD)
+ return defaultValue;
+
+ return value;
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: Save integer to registry
+// Input : *key -
+// value -
+//-----------------------------------------------------------------------------
+void CRegistry::WriteInt( const char *key, int value )
+{
+ // Size of element data
+ DWORD dwSize;
+
+ if ( !m_bValid )
+ {
+ return;
+ }
+
+ dwSize = sizeof( DWORD );
+
+ VCRHook_RegSetValueEx(
+ m_hKey, // handle to key
+ key, // value name
+ 0, // reserved
+ REG_DWORD, // type buffer
+ (LPBYTE)&value, // data buffer
+ dwSize ); // size of data buffer
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: Read string value from registry
+// Input : *key -
+// *defaultValue -
+// Output : const char
+//-----------------------------------------------------------------------------
+const char *CRegistry::ReadString( const char *key, const char *defaultValue /* = NULL */ )
+{
+ LONG lResult;
+ // Type of key
+ DWORD dwType;
+ // Size of element data
+ DWORD dwSize = 512;
+
+ static char value[ 512 ];
+
+ value[0] = 0;
+
+ if ( !m_bValid )
+ {
+ return defaultValue;
+ }
+
+ lResult = VCRHook_RegQueryValueEx(
+ m_hKey, // handle to key
+ key, // value name
+ 0, // reserved
+ &dwType, // type buffer
+ (unsigned char *)value, // data buffer
+ &dwSize ); // size of data buffer
+
+ if ( lResult != ERROR_SUCCESS )
+ {
+ return defaultValue;
+ }
+
+ if ( dwType != REG_SZ )
+ {
+ return defaultValue;
+ }
+
+ return value;
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: Save string to registry
+// Input : *key -
+// *value -
+//-----------------------------------------------------------------------------
+void CRegistry::WriteString( const char *key, const char *value )
+{
+ DWORD dwSize; // Size of element data
+
+ if ( !m_bValid )
+ {
+ return;
+ }
+
+ dwSize = (DWORD)( strlen( value ) + 1 );
+
+ VCRHook_RegSetValueEx(
+ m_hKey, // handle to key
+ key, // value name
+ 0, // reserved
+ REG_SZ, // type buffer
+ (LPBYTE)value, // data buffer
+ dwSize ); // size of data buffer
+}
+
+
+
+
+bool CRegistry::DirectInit( const char *subDirectoryUnderValve )
+{
+ LONG lResult; // Registry function result code
+ ULONG dwDisposition; // Type of key opening event
+
+ char szModelKey[ 1024 ];
+ wsprintf( szModelKey, "Software\\Valve\\%s", subDirectoryUnderValve );
+
+ lResult = VCRHook_RegCreateKeyEx(
+ HKEY_CURRENT_USER, // handle of open key
+ szModelKey, // address of name of subkey to open
+ 0ul, // DWORD ulOptions, // reserved
+ NULL, // Type of value
+ REG_OPTION_NON_VOLATILE, // Store permanently in reg.
+ KEY_ALL_ACCESS, // REGSAM samDesired, // security access mask
+ NULL,
+ &m_hKey, // Key we are creating
+ &dwDisposition ); // Type of creation
+
+ if ( lResult != ERROR_SUCCESS )
+ {
+ m_bValid = false;
+ return false;
+ }
+
+ // Success
+ m_bValid = true;
+ return true;
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: Open default launcher key based on game directory
+//-----------------------------------------------------------------------------
+bool CRegistry::Init( const char *platformName )
+{
+ char subDir[ 512 ];
+ wsprintf( subDir, "%s\\Settings", platformName );
+ return DirectInit( subDir );
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+void CRegistry::Shutdown( void )
+{
+ if ( !m_bValid )
+ return;
+
+ // Make invalid
+ m_bValid = false;
+ VCRHook_RegCloseKey( m_hKey );
+}
+
+#else
+
+
+
+
+
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+CRegistry::CRegistry( void )
+{
+ // Assume failure
+ m_bValid = false;
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+CRegistry::~CRegistry( void )
+{
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: Read integer from registry
+// Input : *key -
+// defaultValue -
+// Output : int
+//-----------------------------------------------------------------------------
+int CRegistry::ReadInt( const char *key, int defaultValue /*= 0*/ )
+{
+ return 0;
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: Save integer to registry
+// Input : *key -
+// value -
+//-----------------------------------------------------------------------------
+void CRegistry::WriteInt( const char *key, int value )
+{
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: Read string value from registry
+// Input : *key -
+// *defaultValue -
+// Output : const char
+//-----------------------------------------------------------------------------
+const char *CRegistry::ReadString( const char *key, const char *defaultValue /* = NULL */ )
+{
+ return 0;
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: Save string to registry
+// Input : *key -
+// *value -
+//-----------------------------------------------------------------------------
+void CRegistry::WriteString( const char *key, const char *value )
+{
+}
+
+
+
+bool CRegistry::DirectInit( const char *subDirectoryUnderValve )
+{
+
+ return true;
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: Open default launcher key based on game directory
+//-----------------------------------------------------------------------------
+bool CRegistry::Init( const char *platformName )
+{
+ char subDir[ 512 ];
+ snprintf( subDir, sizeof(subDir), "%s\\Settings", platformName );
+ return DirectInit( subDir );
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+void CRegistry::Shutdown( void )
+{
+ if ( !m_bValid )
+ return;
+
+ // Make invalid
+ m_bValid = false;
+}
+#endif // POSIX
+