winff.cpp
上传用户:dangjiwu
上传日期:2013-07-19
资源大小:42019k
文件大小:7k
源码类别:

Symbian

开发平台:

Visual C++

  1. /* ***** BEGIN LICENSE BLOCK *****
  2.  * Source last modified: $Id: winff.cpp,v 1.5.36.3 2004/07/09 01:44:27 hubbe Exp $
  3.  * 
  4.  * Portions Copyright (c) 1995-2004 RealNetworks, Inc. All Rights Reserved.
  5.  * 
  6.  * The contents of this file, and the files included with this file,
  7.  * are subject to the current version of the RealNetworks Public
  8.  * Source License (the "RPSL") available at
  9.  * http://www.helixcommunity.org/content/rpsl unless you have licensed
  10.  * the file under the current version of the RealNetworks Community
  11.  * Source License (the "RCSL") available at
  12.  * http://www.helixcommunity.org/content/rcsl, in which case the RCSL
  13.  * will apply. You may also obtain the license terms directly from
  14.  * RealNetworks.  You may not use this file except in compliance with
  15.  * the RPSL or, if you have a valid RCSL with RealNetworks applicable
  16.  * to this file, the RCSL.  Please see the applicable RPSL or RCSL for
  17.  * the rights, obligations and limitations governing use of the
  18.  * contents of the file.
  19.  * 
  20.  * Alternatively, the contents of this file may be used under the
  21.  * terms of the GNU General Public License Version 2 or later (the
  22.  * "GPL") in which case the provisions of the GPL are applicable
  23.  * instead of those above. If you wish to allow use of your version of
  24.  * this file only under the terms of the GPL, and not to allow others
  25.  * to use your version of this file under the terms of either the RPSL
  26.  * or RCSL, indicate your decision by deleting the provisions above
  27.  * and replace them with the notice and other provisions required by
  28.  * the GPL. If you do not delete the provisions above, a recipient may
  29.  * use your version of this file under the terms of any one of the
  30.  * RPSL, the RCSL or the GPL.
  31.  * 
  32.  * This file is part of the Helix DNA Technology. RealNetworks is the
  33.  * developer of the Original Code and owns the copyrights in the
  34.  * portions it created.
  35.  * 
  36.  * This file, and the files included with this file, is distributed
  37.  * and made available on an 'AS IS' basis, WITHOUT WARRANTY OF ANY
  38.  * KIND, EITHER EXPRESS OR IMPLIED, AND REALNETWORKS HEREBY DISCLAIMS
  39.  * ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES
  40.  * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET
  41.  * ENJOYMENT OR NON-INFRINGEMENT.
  42.  * 
  43.  * Technology Compatibility Kit Test Suite(s) Location:
  44.  *    http://www.helixcommunity.org/content/tck
  45.  * 
  46.  * Contributor(s):
  47.  * 
  48.  * ***** END LICENSE BLOCK ***** */
  49. #include "hxtypes.h"
  50. #include "hlxclib/windows.h"
  51. #include <stdlib.h>
  52. #include <string.h>
  53. #if !defined(WIN32_PLATFORM_PSPC)
  54. #include <dos.h>
  55. #endif /* !defined(WIN32_PLATFORM_PSPC) */
  56. #include "hlxclib/io.h"
  57. #include <ctype.h>
  58. #include "hxresult.h"
  59. #include "hxstrutl.h"
  60. #include "findfile.h"
  61. #include "platform/win/winff.h"
  62. #include "hxheap.h"
  63. #ifdef _DEBUG
  64. #undef HX_THIS_FILE
  65. static const char HX_THIS_FILE[] = __FILE__;
  66. #endif
  67. CWinFindFile::CWinFindFile  (   const char *path,
  68.     const char *delimiter,
  69.     const char *pattern) :
  70.     CFindFile (path, delimiter, pattern)
  71. {
  72. #ifdef _WIN32
  73.     m_lFileHandle     = 0;
  74.     m_bDone     = FALSE;
  75. #endif
  76.     m_pCurrentDirectory     = NULL;
  77.     m_pCurrentFileName     = new char[_MAX_PATH];
  78.     m_pNextFileName     = new char[_MAX_PATH];
  79.     memset(m_pCurrentFileName, 0, _MAX_PATH);
  80.     memset(m_pNextFileName, 0, _MAX_PATH);
  81. }
  82. CWinFindFile::~CWinFindFile()
  83. {
  84.     if (m_pCurrentDirectory)
  85.     {
  86. delete [] m_pCurrentDirectory;
  87. m_pCurrentDirectory = 0;
  88.     }
  89.     if (m_pCurrentFileName)
  90.     {
  91. delete [] m_pCurrentFileName;
  92. m_pCurrentFileName = 0;
  93.     }
  94.     if (m_pNextFileName)
  95.     {
  96. delete [] m_pNextFileName;
  97. m_pNextFileName = 0;
  98.     }
  99. #ifndef _WIN16
  100.     if (m_lFileHandle)
  101.     {
  102.         OS_CloseDirectory();
  103.     }
  104. #endif
  105. }
  106. //
  107. // Open the directory; initialize the directory handle.
  108. // Return FALSE if the directory couldn't be opened.
  109. //
  110. BOOL CWinFindFile::OS_OpenDirectory (const char *dirname)
  111. {
  112. #ifdef _WIN32
  113.     /* don't call this before calling CloseDirectory()!*/
  114.     if (m_lFileHandle > 0)
  115. return FALSE;
  116. #endif
  117.     if (m_pCurrentDirectory)
  118.     {
  119. delete [] m_pCurrentDirectory;
  120. m_pCurrentDirectory = 0;
  121.     }
  122.     UINT16 ulPatLen = 0;
  123.     if (m_pattern)
  124.     {
  125. ulPatLen = strlen(m_pattern);
  126.     }
  127.     /* 1 for  and 1 for NULL at end */
  128.     UINT32 ulLen = strlen(dirname) + ulPatLen + 2;
  129.     m_pCurrentDirectory = new char[ulLen];
  130.     if (!m_pCurrentDirectory)
  131. return FALSE;
  132.     SafeStrCpy(m_pCurrentDirectory, dirname, ulLen);
  133.     if (m_pattern)
  134.     {
  135. if(strlen(m_pCurrentDirectory) &&
  136.    m_pCurrentDirectory[strlen(m_pCurrentDirectory) - 1] != '\')
  137. SafeStrCat(m_pCurrentDirectory, OS_PATH_DELIMITER, ulLen);
  138. SafeStrCat(m_pCurrentDirectory, m_pattern, ulLen);
  139.     }
  140. #ifdef _WIN32
  141. #if !defined(WIN32_PLATFORM_PSPC)
  142.     m_lFileHandle = _findfirst( m_pCurrentDirectory, &m_FileInfo);
  143. #else /* !defined(WIN32_PLATFORM_PSPC) */
  144.     m_lFileHandle = FindFirstFile( OS_STRING(m_pCurrentDirectory), &m_FileInfo);
  145. #endif /* !defined(WIN32_PLATFORM_PSPC) */
  146.     if (m_lFileHandle > 0)
  147.     {
  148. if (!m_pNextFileName)
  149. {
  150.     m_pNextFileName     = new char[_MAX_PATH];
  151.     if (!m_pNextFileName)
  152.     {
  153. return FALSE;
  154.     }
  155. }
  156. if (!m_pCurrentFileName)
  157. {
  158.     m_pCurrentFileName     = new char[_MAX_PATH];
  159.     if (!m_pCurrentFileName)
  160.     {
  161. return FALSE;
  162.     }
  163. }
  164. #ifndef WIN32_PLATFORM_PSPC
  165. SafeStrCpy(m_pNextFileName, m_FileInfo.name, _MAX_PATH);
  166. #else
  167. SafeStrCpy(m_pNextFileName, OS_STRING(m_FileInfo.cFileName), _MAX_PATH);
  168. #endif
  169. return TRUE;
  170.     }
  171.     else
  172.     {
  173. return FALSE;
  174.     }
  175. #else
  176.     if (!_dos_findfirst( m_pCurrentDirectory, _A_ARCH | _A_HIDDEN | _A_NORMAL | _A_RDONLY, &m_FileInfo))
  177.     {
  178. SafeStrCpy(m_pNextFileName, m_FileInfo.name, _MAX_PATH);
  179. return TRUE;
  180.     }
  181.     else
  182.     {
  183. return FALSE;
  184.     }
  185. #endif // _WIN32
  186. }
  187. //
  188. // Get the next file in the directory.  This *does not*
  189. // filter out based on the pattern; every file is returned.
  190. //
  191. char* CWinFindFile::OS_GetNextFile()
  192. {
  193.     if (m_pNextFileName)
  194.     {
  195. SafeStrCpy(m_pCurrentFileName, m_pNextFileName, _MAX_PATH);
  196.     }
  197.     else
  198.     {
  199. if (m_pCurrentFileName)
  200. {
  201.     delete [] m_pCurrentFileName;
  202.     m_pCurrentFileName = NULL;
  203. }
  204.     }
  205.     if (m_pNextFileName)
  206.     {
  207. #if defined(_WIN32) && !defined(WIN32_PLATFORM_PSPC)
  208. if (_findnext( m_lFileHandle,&m_FileInfo) !=-1 )
  209. #elif defined(WIN32_PLATFORM_PSPC)
  210. if (FindNextFile( m_lFileHandle,&m_FileInfo) != 0 )
  211. #else
  212.      if (_dos_findnext( &m_FileInfo) == 0)
  213. #endif
  214. {
  215. #ifndef WIN32_PLATFORM_PSPC
  216. SafeStrCpy(m_pNextFileName, m_FileInfo.name, _MAX_PATH);
  217. #else
  218. SafeStrCpy(m_pNextFileName, OS_STRING(m_FileInfo.cFileName), _MAX_PATH);
  219. #endif
  220. }
  221. else
  222. {
  223.     delete [] m_pNextFileName;
  224.     m_pNextFileName = 0;
  225. }
  226.     }
  227.     return m_pCurrentFileName;
  228. }
  229. //
  230. // release the directory
  231. //
  232. void CWinFindFile::OS_CloseDirectory ()
  233. {
  234.     if( m_lFileHandle )
  235.     {
  236. #if defined(_WIN32) && !defined(WIN32_PLATFORM_PSPC)
  237. _findclose(m_lFileHandle);
  238. #elif defined(WIN32_PLATFORM_PSPC) && !defined(_WIN32_WCE_EMULATION)
  239. FindClose(m_lFileHandle);
  240. #endif
  241. m_lFileHandle = 0;
  242.     }
  243. }
  244. BOOL CWinFindFile::OS_InitPattern ()
  245. {
  246.     return TRUE;
  247. }
  248. BOOL CWinFindFile::OS_FileMatchesPattern (const char * fname)
  249. {
  250.     /* All the files that we get are already pattern matched */
  251.     return TRUE;
  252. }
  253. void CWinFindFile::OS_FreePattern ()
  254. {
  255.     return;
  256. }