/**************************************************************************** * * Microsoft Confidential * Copyright (c) Microsoft Corporation 1994 * All rights reserved * ***************************************************************************/ #ifdef UNIX_FEATURE_ALIAS #undef UNICODE #include "inetcplp.h" #include "shalias.h" #include "mluisupp.h" static TCHAR g_szAliasKey[] = TEXT("Software\\Microsoft\\Internet Explorer\\Unix\\Alias"); // Member function definitions for CAlias CAlias::CAlias( TCHAR * name ) { m_alias = (TCHAR *) LocalAlloc( LPTR, (lstrlen(name) + 1)*sizeof(TCHAR) ); StrCpy( m_alias, name ); m_szurl = NULL; m_fDirty= TRUE; } CAlias::~CAlias() { if( m_alias ) LocalFree( m_alias ); if( m_szurl ) LocalFree( m_szurl ); } CAlias::Load() { if(m_alias) { HKEY hKey; TCHAR aliasKey[MAX_PATH], buffer[MAX_PATH]; StrCpy( aliasKey, g_szAliasKey); StrCat( aliasKey, TEXT("\\")); StrCat( aliasKey, m_alias ); HRESULT lResult = RegOpenKeyExA( HKEY_CURRENT_USER, aliasKey, 0, KEY_QUERY_VALUE | KEY_READ, &hKey); if( lResult == ERROR_SUCCESS ) { DWORD dwLen = MAX_PATH; if (RegQueryValue( hKey, NULL, buffer, (long *)&dwLen ) == ERROR_SUCCESS ) { m_szurl = (TCHAR *)LocalAlloc( LPTR, (dwLen+1)*sizeof(TCHAR)); StrCpy(m_szurl, buffer); } RegCloseKey( hKey ); } else return FALSE; } return TRUE; } CAlias::Save() { HRESULT lResult; HKEY hKey; TCHAR aliasKey[MAX_PATH], buffer[MAX_PATH]; StrCpy( aliasKey, g_szAliasKey); StrCat( aliasKey, TEXT("\\")); StrCat( aliasKey, m_alias ); lResult = RegOpenKeyEx( HKEY_CURRENT_USER, aliasKey, 0, KEY_QUERY_VALUE| KEY_WRITE, &hKey); if( lResult != ERROR_SUCCESS ) { lResult = RegCreateKey( HKEY_CURRENT_USER, aliasKey, &hKey); } if( lResult == ERROR_SUCCESS ) { DWORD dwType = REG_SZ; DWORD dwLen = (lstrlen(m_szurl)+1)*sizeof(TCHAR); RegSetValue( hKey, NULL, dwType, m_szurl, dwLen ); RegCloseKey( hKey); } else return FALSE; m_fDirty = FALSE; return TRUE; } CAlias::Delete() { TCHAR aliasKey[MAX_PATH], buffer[MAX_PATH]; StrCpy( aliasKey, g_szAliasKey); StrCat( aliasKey, TEXT("\\")); StrCat( aliasKey, m_alias ); RegDeleteKey( HKEY_CURRENT_USER, aliasKey ); return TRUE; } #ifdef DEBUG CAlias::Print() { if( m_alias ) printf( m_alias ); printf(","); if( m_szurl ) printf( m_szurl ); printf("\n"); return TRUE; } #endif STDAPI_(BOOL) FreeAliases( HDPA aliasListIn ) { if(aliasListIn) { int aliasCount = DPA_GetPtrCount( aliasListIn ); for(int i=0; im_fDirty) { pAlias->Save(); } } return TRUE; } return FALSE; } STDAPI_(BOOL) LoadAliases( HDPA aliasListIn ) { HKEY hKey, hKeyAlias; int index = 0; DWORD dwLen = MAX_PATH; if(aliasListIn) FreeAliases( aliasListIn ); TCHAR * buffer = (TCHAR *)LocalAlloc( LPTR, (MAX_PATH+1)*sizeof(TCHAR) ); LONG lResult = RegOpenKeyExA( HKEY_CURRENT_USER, g_szAliasKey, 0, KEY_QUERY_VALUE | KEY_READ, &hKeyAlias); if( lResult == ERROR_SUCCESS ) { while( buffer ) { dwLen = MAXPATH; if( RegEnumKeyEx( hKeyAlias, index, buffer, &dwLen, NULL, NULL, NULL, NULL ) == ERROR_NO_MORE_ITEMS ) break; { CAlias * ptr = new CAlias( buffer ); if(ptr->Load()) { DPA_InsertPtr(aliasListIn, 0x7FFF, (LPVOID)ptr); ptr->m_fDirty = FALSE; } else delete ptr; index++; } } if(buffer) LocalFree( buffer ); RegCloseKey( hKeyAlias ); } return TRUE; } #ifdef DEBUG STDAPI_(BOOL) PrintAliases( HDPA aliasListIn ) { printf("Listing Aliases:\n"); if( !aliasListIn ) return FALSE; int aliasCount = DPA_GetPtrCount( aliasListIn ); for(int i=0; iPrint(); } return TRUE; } #endif STDAPI_(INT) FindAliasIndex(HDPA aliasListIn , LPTSTR alias) { if( ! aliasListIn ) return -1; int aliasCount = DPA_GetPtrCount( aliasListIn ); for(int i = 0; i< aliasCount;i++ ) { CAlias * ptr = (CAlias *)DPA_FastGetPtr( aliasListIn, i ); if( !StrCmpI(alias, ptr->m_alias) ) return i; } return -1; } STDAPI_(BOOL) FindAliasByURL(HDPA aliasListIn , LPTSTR szurl, LPTSTR aliasIn, INT cchAlias) { if( ! aliasListIn ) return FALSE; int aliasCount = DPA_GetPtrCount( aliasListIn ); for(int i = 0; i< aliasCount;i++ ) { CAlias * ptr = (CAlias *)DPA_FastGetPtr( aliasListIn, i ); if( !StrCmp(szurl, ptr->m_szurl) ) { StrCpy( aliasIn, ptr->m_alias ); return TRUE; } } return FALSE; } STDAPI_(BOOL) GetURLForAlias(HDPA aliasListIn, LPTSTR alias, LPTSTR szUrl, int cchUrl ) { int index = -1; if(!aliasListIn || !alias || !szUrl || cchUrl <= 0 ) return FALSE; // ENTERCRITICAL; if( (index = FindAliasIndex(aliasListIn, alias) ) != -1 ) { CAlias * ptr = (CAlias *)DPA_FastGetPtr( aliasListIn, index ); StrCpy( szUrl, ptr->m_szurl ); } Done: // LEAVECRITICAL; return (index != -1); } STDAPI_(LPCTSTR) GetAliasName( CAlias * ptr ) { if( ptr ) return ptr->m_alias; return NULL; } STDAPI_(LPCTSTR) GetAliasUrl( CAlias * ptr ) { if( ptr ) return ptr->m_szurl; return NULL; } STDAPI_(LPVOID) CreateAlias( LPTSTR str ) { return new CAlias(str); } STDAPI_(VOID) DestroyAlias( CAlias * ptr ) { if( ptr ) delete ptr; } STDAPI_(BOOL) SetAliasInfo( CAlias * ptr, TCHAR * alias, TCHAR * url ) { if( ptr ) { if(alias) { if( ptr->m_alias ) LocalFree( ptr->m_alias ); ptr->m_alias = DuplicateString( alias ); ptr->m_fDirty= TRUE; } if(url) { if( ptr->m_szurl ) LocalFree( ptr->m_szurl ); ptr->m_szurl = DuplicateString( url ); ptr->m_fDirty= TRUE; } } } #ifdef UNICODE STDAPI_(BOOL) FindAliasByURLA(HDPA aliasListIn , LPTSTR szurl, LPTSTR aliasIn, INT cchAlias) { WCHAR szwurl[MAX_URL_STRING]; WCHAR aliasw[MAX_ALIAS_LENGTH]; if( !szurl || !aliasIn || !aliasListIn ) return FALSE; SHAnsiToUnicode( aliasIn, alias } STDAPI_(BOOL) AddAliasToListA( HDPA aliasListIn, LPTSTR aliasIn, LPTSTR szurl, HWND hwnd ) { return FALSE; } #else TCHAR *DuplicateString( TCHAR *orig ) { TCHAR * newStr; if( !orig ) return NULL; newStr = (TCHAR *)LocalAlloc( LPTR, (lstrlen(orig) + 1)*sizeof(TCHAR)); if(newStr) StrCpy( newStr, orig ); return newStr; } TCHAR *EatSpaces( TCHAR * str ) { if( !str ) return NULL; TCHAR *ptr = str, *tmpStr = DuplicateString( str ); TCHAR *tmpPtr = tmpStr; while( *tmpStr ) { if(*tmpStr == TEXT(' ') || *tmpStr == TEXT('\t') || *tmpStr == TEXT('\n') || *tmpStr == TEXT('\r') || // Remove special characters. (int)(*tmpStr) >= 127) tmpStr++; else *ptr++ = *tmpStr++; } *ptr = TEXT('\0'); LocalFree( tmpPtr ); return str; } #endif /* UNICODE */ #endif /* UNIX_FEATURE_ALIAS */