wrvsarry.cpp
上传用户:zhongxx05
上传日期:2007-06-06
资源大小:33641k
文件大小:6k
源码类别:

Symbian

开发平台:

C/C++

  1. /* ***** BEGIN LICENSE BLOCK ***** 
  2.  * Version: RCSL 1.0/RPSL 1.0 
  3.  *  
  4.  * Portions Copyright (c) 1995-2002 RealNetworks, Inc. All Rights Reserved. 
  5.  *      
  6.  * The contents of this file, and the files included with this file, are 
  7.  * subject to the current version of the RealNetworks Public Source License 
  8.  * Version 1.0 (the "RPSL") available at 
  9.  * http://www.helixcommunity.org/content/rpsl unless you have licensed 
  10.  * the file under the RealNetworks Community Source License Version 1.0 
  11.  * (the "RCSL") available at http://www.helixcommunity.org/content/rcsl, 
  12.  * in which case the RCSL will apply. You may also obtain the license terms 
  13.  * directly from RealNetworks.  You may not use this file except in 
  14.  * compliance with the RPSL or, if you have a valid RCSL with RealNetworks 
  15.  * applicable to this file, the RCSL.  Please see the applicable RPSL or 
  16.  * RCSL for the rights, obligations and limitations governing use of the 
  17.  * contents of the file.  
  18.  *  
  19.  * This file is part of the Helix DNA Technology. RealNetworks is the 
  20.  * developer of the Original Code and owns the copyrights in the portions 
  21.  * it created. 
  22.  *  
  23.  * This file, and the files included with this file, is distributed and made 
  24.  * available on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER 
  25.  * EXPRESS OR IMPLIED, AND REALNETWORKS HEREBY DISCLAIMS ALL SUCH WARRANTIES, 
  26.  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, FITNESS 
  27.  * FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. 
  28.  * 
  29.  * Technology Compatibility Kit Test Suite(s) Location: 
  30.  *    http://www.helixcommunity.org/content/tck 
  31.  * 
  32.  * Contributor(s): 
  33.  *  
  34.  * ***** END LICENSE BLOCK ***** */ 
  35. #include "hxcom.h"
  36. #include "hxtypes.h"
  37. #include "hxresult.h"
  38. #include "hxstring.h"
  39. #include "hxwinreg.h"
  40. #include "hxstrutl.h"
  41. #include "hxheap.h"
  42. #ifdef _DEBUG
  43. #undef HX_THIS_FILE
  44. static const char HX_THIS_FILE[] = __FILE__;
  45. #endif
  46. CWinRegStringArrayValue::CWinRegStringArrayValue
  47. (
  48.     const char* szName, 
  49.     HKEY hkParent
  50. )
  51.     : AWinRegValue(szName, hkParent)
  52. {
  53. }
  54. CWinRegStringArrayValue::~CWinRegStringArrayValue()
  55. {
  56. }
  57. CWinRegStringArrayValue& 
  58. CWinRegStringArrayValue::operator=
  59. (
  60.     const _CListOfCHXString_& rilosNewValue
  61. )
  62. {
  63.     FromStringArray(rilosNewValue);
  64.     return *this;
  65. }
  66. BOOL 
  67. CWinRegStringArrayValue::IsStringArray()
  68. {
  69.     UINT32 ulType;
  70.     if
  71.     (
  72. RegQueryValueEx
  73. (
  74.     m_hkParent,
  75.     OS_STRING(m_sName),
  76.     NULL,
  77.     &ulType,
  78.     NULL,
  79.     NULL
  80. ) == ERROR_SUCCESS
  81. &&
  82. ulType == REG_MULTI_SZ
  83.     )
  84.     {
  85. return TRUE;
  86.     }
  87.     return FALSE;
  88. }
  89. BOOL 
  90. CWinRegStringArrayValue::AsStringArray(char** pszValue)
  91. {
  92.     UINT32 ulType;
  93.     UINT32 ulSize;
  94.     
  95.     if(!pszValue)
  96.     {
  97. return FALSE;
  98.     }
  99.     *pszValue = NULL;
  100.     
  101.     if
  102.     (
  103. RegQueryValueEx
  104. (
  105.     m_hkParent,
  106.     OS_STRING(m_sName),
  107.     NULL,
  108.     &ulType,
  109.     NULL,
  110.     &ulSize
  111. ) == ERROR_SUCCESS
  112. &&
  113. ulType == REG_MULTI_SZ
  114.     )
  115.     {
  116. if (!ulSize)
  117. {
  118.     return TRUE;
  119. }
  120. ++ulSize;
  121. *pszValue = new char[ulSize];
  122. if
  123. (
  124.     *pszValue
  125.     &&
  126.     RegQueryValueEx
  127.     (
  128. m_hkParent,
  129. OS_STRING(m_sName),
  130. NULL,
  131. &ulType,
  132. (unsigned char*)*pszValue,
  133. &ulSize
  134.     ) == ERROR_SUCCESS
  135. )
  136. {
  137.     return TRUE;
  138. }
  139.     }
  140.     return FALSE;
  141. }
  142. BOOL 
  143. CWinRegStringArrayValue::AsStringArray(_CListOfCHXString_& rilosValue)
  144. {
  145.     char* szValue;
  146.     UINT32 ulIndex;
  147.     
  148.     rilosValue.empty();
  149.     
  150.     if
  151.     (
  152. AsStringArray(&szValue)
  153.     )
  154.     {
  155. for(ulIndex=0; szValue[ulIndex]; ulIndex += strlen(szValue+ulIndex)+1)
  156. {
  157.     rilosValue.insert
  158.     (
  159. rilosValue.end(), 
  160. CHXString(szValue+ulIndex)
  161.     );
  162. }
  163. FreeStringArray(szValue);
  164. return TRUE;
  165.     }
  166.     return FALSE;
  167. }
  168. BOOL 
  169. CWinRegStringArrayValue::FromStringArray
  170. (
  171.     const _CListOfCHXString_& rilosNewValue
  172. )
  173. {
  174.     char* szNewValue=NULL;
  175.     _CListOfCHXString_::iterator itilosCurrent;
  176.     UINT32 ulSize;
  177.     UINT32 ulBufSize;
  178.     enum STATE{ST_COUNT, ST_FILL, ST_DONE};
  179.     STATE stCurrent = ST_COUNT;
  180.     while(stCurrent!=ST_DONE)
  181.     {
  182. for
  183. (
  184.     ulSize=0,
  185.     itilosCurrent=rilosNewValue.begin();
  186.     itilosCurrent!=rilosNewValue.end();
  187.     ++itilosCurrent
  188. )
  189. {
  190.     switch(stCurrent)
  191.     {
  192.     case ST_COUNT:
  193. {
  194. }
  195. break;
  196.     case ST_FILL:
  197. {
  198.     SafeStrCpy
  199.     (
  200. szNewValue+ulSize, 
  201. (*itilosCurrent).GetBuffer(1), ulBufSize
  202.     );
  203. }
  204. break;
  205.     default:
  206. break;
  207.     };
  208.     // Inc Size of second dimension (data)
  209.     ulSize += (*itilosCurrent).GetLength()+1;
  210. }
  211. switch(stCurrent)
  212. {
  213. case ST_COUNT:
  214.     {
  215. ulBufSize = ulSize+1;
  216. szNewValue = new char[ulBufSize];
  217. stCurrent = ST_FILL;
  218.     }
  219.     break;
  220. case ST_FILL:
  221.     {
  222. szNewValue[ulBufSize-1] = 0;
  223. stCurrent = ST_DONE;
  224.     }
  225.     break;
  226. default:
  227.     break;
  228. };
  229.     }
  230.     if
  231.     (
  232. szNewValue
  233. &&
  234. FromStringArray((const char *)szNewValue, ulBufSize)
  235.     )
  236.     {
  237. delete [] szNewValue;
  238. return TRUE;
  239.     }
  240.     
  241.     delete [] szNewValue;
  242.     return FALSE;
  243. }
  244. BOOL 
  245. CWinRegStringArrayValue::FromStringArray
  246. (
  247.     const char* szNewValue, 
  248.     UINT32 ulSize
  249. )
  250. {
  251.     if
  252.     (
  253. RegSetValueEx
  254. (
  255.     m_hkParent,
  256.     OS_STRING(m_sName),
  257.     NULL,
  258.     REG_MULTI_SZ,
  259.     (unsigned char*)szNewValue,
  260.     ulSize
  261. ) == ERROR_SUCCESS
  262.     )
  263.     {
  264. return TRUE;
  265.     }
  266.     return FALSE;
  267. }
  268. BOOL 
  269. CWinRegStringArrayValue::DoesExist()
  270. {
  271.     return IsStringArray();
  272. }