FileSystemSrc.c
上传用户:lqx1163
上传日期:2014-08-13
资源大小:9183k
文件大小:33k
源码类别:

MTK

开发平台:

C/C++

  1. /*****************************************************************************
  2. *  Copyright Statement:
  3. *  --------------------
  4. *  This software is protected by Copyright and the information contained
  5. *  herein is confidential. The software may not be copied and the information
  6. *  contained herein may not be used or disclosed except with the written
  7. *  permission of MediaTek Inc. (C) 2005
  8. *
  9. *  BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
  10. *  THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
  11. *  RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
  12. *  AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
  13. *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
  14. *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
  15. *  NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
  16. *  SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
  17. *  SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
  18. *  THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
  19. *  NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
  20. *  SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
  21. *
  22. *  BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
  23. *  LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
  24. *  AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
  25. *  OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
  26. *  MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. 
  27. *
  28. *  THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
  29. *  WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
  30. *  LAWS PRINCIPLES.  ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
  31. *  RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
  32. *  THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
  33. *
  34. *****************************************************************************/
  35. /*******************************************************************************
  36.  * Filename:
  37.  * ---------
  38.  *  FileSystemSrc.c
  39.  *
  40.  * Project:
  41.  * --------
  42.  *  MAUI
  43.  *
  44.  * Description:
  45.  * ------------
  46.  *  
  47.  *
  48.  * Author:
  49.  * -------
  50.  *  
  51.  *
  52.  *==============================================================================
  53.  *             HISTORY
  54.  * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!! 
  55.  *------------------------------------------------------------------------------
  56.  * removed!
  57.  *
  58.  * removed!
  59.  * removed!
  60.  * removed!
  61.  *
  62.  * removed!
  63.  * removed!
  64.  * removed!
  65.  *
  66.  * removed!
  67.  * removed!
  68.  * removed!
  69.  *
  70.  * removed!
  71.  * removed!
  72.  * removed!
  73.  *
  74.  * removed!
  75.  * removed!
  76.  * removed!
  77.  * removed!
  78.  *
  79.  *------------------------------------------------------------------------------
  80.  * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!! 
  81.  *==============================================================================
  82.  *******************************************************************************/
  83. /**
  84.  * Copyright Notice
  85.  * ?2002 - 2003, Pixtel Communications, Inc., 1489 43rd Ave. W.,
  86.  * Vancouver, B.C. V6M 4K8 Canada. All Rights Reserved.
  87.  *  (It is illegal to remove this copyright notice from this software or any
  88.  *  portion of it)
  89.  */
  90. /**************************************************************
  91.    FILENAME : FileSystemSrc.h
  92.    PURPOSE     : Source File for the File System 
  93.    REMARKS     : nil
  94.    AUTHOR      : Yogesh
  95.    DATE     : August-01-2003
  96. **************************************************************/
  97. #include "FileSystemDef.h"
  98. #include "Ucs2prot.h"
  99. #include "MMI_features.h"
  100. #include "fs_type.h"
  101. #include "fs_func.h"
  102. #include "fs_errcode.h"
  103. #include "drm_gprot.h"
  104. S32 gnCurrBuffIndex = 0;
  105. S32 gnFileBytesRead = 0;
  106. U8 gFileBuffer[MAX_BUFF_SIZE];
  107. U8 gbIsCurrentFileEnd = FALSE;
  108. S32 gCurrentFileOffset = 0;
  109. /* Leo add for DLT */
  110. /*****************************************************************************
  111.  * FUNCTION
  112.  *  Searchfile
  113.  * DESCRIPTION
  114.  *  
  115.  * PARAMETERS
  116.  *  file_handle     [IN]        
  117.  * RETURNS
  118.  *  
  119.  *****************************************************************************/
  120. S32 Searchfile(FILE_HANDLE file_handle)
  121. {
  122. #ifndef MMI_ON_WIN32
  123.     /*----------------------------------------------------------------*/
  124.     /* Local Variables                                                */
  125.     /*----------------------------------------------------------------*/
  126.     /*----------------------------------------------------------------*/
  127.     /* Code Body                                                      */
  128.     /*----------------------------------------------------------------*/
  129.     return (S32) FS_ParseFH(file_handle);
  130. #else /* MMI_ON_WIN32 */ 
  131.     return 1;
  132. #endif /* MMI_ON_WIN32 */ 
  133. }
  134. /* Leo end */
  135. /*****************************************************************************
  136.  * FUNCTION
  137.  *  pfOpenError
  138.  * DESCRIPTION
  139.  *  
  140.  * PARAMETERS
  141.  *  err     [IN]        
  142.  * RETURNS
  143.  *  
  144.  *****************************************************************************/
  145. S32 pfOpenError(FILE_HANDLE err)
  146. {
  147. #ifndef MMI_ON_WIN32
  148.     /*----------------------------------------------------------------*/
  149.     /* Local Variables                                                */
  150.     /*----------------------------------------------------------------*/
  151.     /*----------------------------------------------------------------*/
  152.     /* Code Body                                                      */
  153.     /*----------------------------------------------------------------*/
  154.     if (err < FS_NO_ERROR)
  155.     {
  156.         return -1;
  157.     }
  158.     else
  159.     {
  160.         return 0;
  161.     }
  162. #else /* MMI_ON_WIN32 */ 
  163.     if (err < FS_NO_ERROR)
  164.     {
  165.         return -1;
  166.     }
  167.     else
  168.     {
  169.         return 0;
  170.     }
  171. #endif /* MMI_ON_WIN32 */ 
  172. }
  173. /*****************************************************************************
  174.  * FUNCTION
  175.  *  pfError
  176.  * DESCRIPTION
  177.  *  
  178.  * PARAMETERS
  179.  *  err     [IN]        
  180.  * RETURNS
  181.  *  
  182.  *****************************************************************************/
  183. S32 pfError(S32 err)
  184. {
  185. #ifndef MMI_ON_WIN32
  186.     /*----------------------------------------------------------------*/
  187.     /* Local Variables                                                */
  188.     /*----------------------------------------------------------------*/
  189.     /*----------------------------------------------------------------*/
  190.     /* Code Body                                                      */
  191.     /*----------------------------------------------------------------*/
  192.     if (err < FS_NO_ERROR)
  193.     {
  194.         return -1;
  195.     }
  196.     else
  197.     {
  198.         return 0;
  199.     }
  200. #else /* MMI_ON_WIN32 */ 
  201.     if (err < FS_NO_ERROR)
  202.     {
  203.         return -1;
  204.     }
  205.     else
  206.     {
  207.         return 0;
  208.     }
  209. #endif /* MMI_ON_WIN32 */ 
  210. }
  211. /*****************************************************************************
  212.  * FUNCTION
  213.  *  GetFSFileSize
  214.  * DESCRIPTION
  215.  *  
  216.  * PARAMETERS
  217.  *  handle      [IN]        
  218.  * RETURNS
  219.  *  
  220.  *****************************************************************************/
  221. S32 GetFSFileSize(FILE_HANDLE handle)
  222. {
  223.     /*----------------------------------------------------------------*/
  224.     /* Local Variables                                                */
  225.     /*----------------------------------------------------------------*/
  226.     S32 nfile_size;
  227. #ifdef MMI_ON_WIN32
  228.     int retval;
  229.     /*----------------------------------------------------------------*/
  230.     /* Code Body                                                      */
  231.     /*----------------------------------------------------------------*/
  232.     retval = FS_GetFileSize(handle, &nfile_size);
  233.     if (retval == FS_NO_ERROR)
  234.     {
  235.         return nfile_size;
  236.     }
  237.     else
  238.     {
  239.         return 0;
  240.     }
  241. #else /* MMI_ON_WIN32 */
  242.     FS_GetFileSize(handle, (U32*) & nfile_size);
  243.     return nfile_size;
  244. #endif 
  245. }
  246. /*****************************************************************************
  247.  * FUNCTION
  248.  *  StartFileRead
  249.  * DESCRIPTION
  250.  *  
  251.  * PARAMETERS
  252.  *  handle      [IN]        
  253.  *  nIndex      [IN]        
  254.  * RETURNS
  255.  *  
  256.  *****************************************************************************/
  257. S32 StartFileRead(FILE_HANDLE handle, U32 nIndex)
  258. {
  259.     /*----------------------------------------------------------------*/
  260.     /* Local Variables                                                */
  261.     /*----------------------------------------------------------------*/
  262.     S32 nError;
  263.     /*----------------------------------------------------------------*/
  264.     /* Code Body                                                      */
  265.     /*----------------------------------------------------------------*/
  266.     gnCurrBuffIndex = 0;
  267.     nError = pfread(gFileBuffer, 1, MAX_BUFF_SIZE, handle, &gnFileBytesRead);
  268.     gbIsCurrentFileEnd = FALSE;
  269.     gCurrentFileOffset = gnFileBytesRead - 1;
  270.     if (pfError(nError) || gnFileBytesRead < MAX_BUFF_SIZE)
  271.     {
  272.         gbIsCurrentFileEnd = TRUE;
  273.         return EOF;
  274.     }
  275.     return 0;
  276. }
  277. /*****************************************************************************
  278.  * FUNCTION
  279.  *  pfgetc
  280.  * DESCRIPTION
  281.  *  
  282.  * PARAMETERS
  283.  *  handle      [IN]        
  284.  * RETURNS
  285.  *  
  286.  *****************************************************************************/
  287. S32 pfgetc(FILE_HANDLE handle)
  288. {
  289.     /*----------------------------------------------------------------*/
  290.     /* Local Variables                                                */
  291.     /*----------------------------------------------------------------*/
  292.     S32 nRead = 0;
  293.     /*----------------------------------------------------------------*/
  294.     /* Code Body                                                      */
  295.     /*----------------------------------------------------------------*/
  296.     if (gnCurrBuffIndex - gnFileBytesRead >= 0)
  297.     {
  298.         nRead = pfread(gFileBuffer, 1, MAX_BUFF_SIZE, handle, &gnFileBytesRead);
  299.         gCurrentFileOffset += gnFileBytesRead;
  300.         gnCurrBuffIndex = 0;
  301.         /* MTK modified, Max: to prevent endless file reading 1201 */
  302.         if (pfError(nRead) || gnFileBytesRead == 0)
  303.         {
  304.             gbIsCurrentFileEnd = TRUE;
  305.             return EOF;
  306.         }
  307.         /* MTK end */
  308.     }
  309.     return (S32) gFileBuffer[gnCurrBuffIndex++];
  310. }
  311. /*****************************************************************************
  312.  * FUNCTION
  313.  *  pCacheFileRead
  314.  * DESCRIPTION
  315.  *  
  316.  * PARAMETERS
  317.  *  handle          [IN]        
  318.  *  nBufferSize     [IN]        
  319.  *  pnRead          [?]         
  320.  *  pBuffer         [?]         
  321.  * RETURNS
  322.  *  
  323.  *****************************************************************************/
  324. S32 pCacheFileRead(FILE_HANDLE handle, S32 nBufferSize, S32 *pnRead, U8 *pBuffer)
  325. {
  326.     /*----------------------------------------------------------------*/
  327.     /* Local Variables                                                */
  328.     /*----------------------------------------------------------------*/
  329.     S32 nRead = 0;
  330.     S32 nDataAvailable;
  331.     S32 nBytesCopied = 0;
  332.     S32 nReqdBytes = nBufferSize;
  333.     /*----------------------------------------------------------------*/
  334.     /* Code Body                                                      */
  335.     /*----------------------------------------------------------------*/
  336.     *pnRead = 0;    /* Max : can be removed later */
  337.     while (nBytesCopied < nBufferSize)
  338.     {
  339.         nDataAvailable = gnFileBytesRead - gnCurrBuffIndex;
  340.         if (nDataAvailable >= nReqdBytes)
  341.         {
  342.             memcpy(
  343.                 (void*)(((S8*) pBuffer) + nBytesCopied),
  344.                 (void*)(((S8*) gFileBuffer) + gnCurrBuffIndex),
  345.                 nReqdBytes);
  346.             gnCurrBuffIndex += nReqdBytes;
  347.             *pnRead += nReqdBytes;  /**pnRead = nReqdBytes; *//* Max : can be removed later */
  348.         #ifndef MMI_ON_WIN32
  349.             return FS_NO_ERROR;
  350.         #else 
  351.             return nReqdBytes;
  352.         #endif 
  353.         }
  354.         else
  355.         {
  356.             memcpy((((S8*) pBuffer) + nBytesCopied), (void*)(((S8*) gFileBuffer) + gnCurrBuffIndex), nDataAvailable);
  357.             nBytesCopied += nDataAvailable;
  358.             /* nRead = pfread(gFileBuffer,1,MAX_BUFF_SIZE,handle,&gnFileBytesRead); */
  359.             gCurrentFileOffset += gnFileBytesRead;
  360.             (*pnRead) += nDataAvailable;    /* nBytesCopied; *//* Max : can be removed later */
  361.             gnCurrBuffIndex = 0;
  362.             nReqdBytes -= nDataAvailable;   /* nBytesCopied; */
  363.             if (pfError(nRead) || gnFileBytesRead == 0)
  364.             {
  365.                 gbIsCurrentFileEnd = TRUE;
  366.             #ifndef MMI_ON_WIN32
  367.                 return FS_NO_ERROR;
  368.             #else 
  369.                 return nReqdBytes;
  370.             #endif 
  371.             }
  372.         }
  373.     }
  374. #ifndef MMI_ON_WIN32
  375.     return FS_NO_ERROR;
  376. #else 
  377.     return nReqdBytes;
  378. #endif 
  379. }
  380. /*****************************************************************************
  381.  * FUNCTION
  382.  *  IsEndOfCurrentFile
  383.  * DESCRIPTION
  384.  *  
  385.  * PARAMETERS
  386.  *  void
  387.  * RETURNS
  388.  *  
  389.  *****************************************************************************/
  390. pBOOL IsEndOfCurrentFile()
  391. {
  392.     /*----------------------------------------------------------------*/
  393.     /* Local Variables                                                */
  394.     /*----------------------------------------------------------------*/
  395.     /*----------------------------------------------------------------*/
  396.     /* Code Body                                                      */
  397.     /*----------------------------------------------------------------*/
  398.     if (gnCurrBuffIndex - gnFileBytesRead >= 0)
  399.         if (gbIsCurrentFileEnd)
  400.         {
  401.             return TRUE;
  402.         }
  403.     return FALSE;
  404. }
  405. /*****************************************************************************
  406.  * FUNCTION
  407.  *  pCopyFile
  408.  * DESCRIPTION
  409.  *  
  410.  * PARAMETERS
  411.  *  pSourceFile         [IN]        
  412.  *  pDestFile           [IN]        
  413.  *  bFailIfExists       [IN]        
  414.  * RETURNS
  415.  *  
  416.  *****************************************************************************/
  417. S32 pCopyFile(PU8 pSourceFile, PU8 pDestFile, pBOOL bFailIfExists)
  418. {
  419.     /*----------------------------------------------------------------*/
  420.     /* Local Variables                                                */
  421.     /*----------------------------------------------------------------*/
  422.     S32 result = FS_NO_ERROR;
  423.     U8 UI_temp_buffer[512];
  424.     FILE_HANDLE fsourcefile;
  425.     FILE_HANDLE fdestfile;
  426.     S32 nRead;
  427.     S32 nBytesRead = 0;
  428.     S32 nSize = sizeof(UI_temp_buffer);
  429.     /*----------------------------------------------------------------*/
  430.     /* Code Body                                                      */
  431.     /*----------------------------------------------------------------*/
  432.     fsourcefile = pfopen(pSourceFile, PFS_READ_BINARY);
  433.     if (fsourcefile > 0)
  434.     {
  435.         if (bFailIfExists)
  436.         {
  437.             fdestfile = pfopen(pDestFile, PFS_READ);
  438.             if (fdestfile)
  439.             {   /* Destination file already exists. Exit */
  440.                 pfclose(fsourcefile);
  441.                 pfclose(fdestfile);
  442.                 return FS_FILE_EXISTS;
  443.             }
  444.             pfclose(fdestfile);
  445.         }
  446.         fdestfile = pfopen(pDestFile, PFS_WRITE);
  447.         if (fdestfile > 0)
  448.         {
  449.             do
  450.             {
  451.                 nRead = pfread(UI_temp_buffer, 1, nSize, fsourcefile, &nBytesRead);
  452.                 result = pfwrite(UI_temp_buffer, 1, nBytesRead, fdestfile, &nRead);
  453.             } while (nBytesRead >= nSize && result == FS_NO_ERROR);
  454.             pfclose(fdestfile);
  455.         }
  456.         else
  457.         {
  458.             result = (S32) fdestfile;
  459.         }
  460.         pfclose(fsourcefile);
  461.         return result;
  462.     }
  463.     else
  464.     {
  465.         return (S32) fsourcefile;
  466.     }
  467. }
  468. #ifdef __MMI_DOWNLOADABLE_THEMES_SUPPORT__
  469. /*****************************************************************************
  470.  * FUNCTION
  471.  *  pCopyFileFromOffset
  472.  * DESCRIPTION
  473.  *  
  474.  * PARAMETERS
  475.  *  fSourceFile     [IN]        
  476.  *  pDestFile       [IN]        
  477.  *  offset          [IN]        
  478.  *  size            [IN]        
  479.  * RETURNS
  480.  *  
  481.  *****************************************************************************/
  482. S32 pCopyFileFromOffset(FILE_HANDLE fSourceFile, PU8 pDestFile, U32 offset, U32 size)
  483. {
  484.     /*----------------------------------------------------------------*/
  485.     /* Local Variables                                                */
  486.     /*----------------------------------------------------------------*/
  487.     S32 result = FS_NO_ERROR;
  488.     U32 fp;
  489.     U8 temp_buffer[512];
  490.     FILE_HANDLE fDestFile;
  491.     U32 nBytesWritten = 0;
  492.     U32 nBytesRead = 0;
  493.     U32 nSize = sizeof(temp_buffer);
  494.     U16 iter = (size / 512);
  495.     U16 lastIter = (size % 512);
  496.     U16 i = 0;
  497.     /*----------------------------------------------------------------*/
  498.     /* Code Body                                                      */
  499.     /*----------------------------------------------------------------*/
  500.     FS_GetFilePosition(fSourceFile, &fp);
  501.     fDestFile = FS_Open((U16*) pDestFile, FS_CREATE | FS_READ_WRITE);
  502.     if (fDestFile > 0)
  503.     {
  504.         DRM_seek_file(fSourceFile, offset, FS_FILE_BEGIN);
  505.         do
  506.         {
  507.             DRM_read_file(fSourceFile, temp_buffer, nSize, &nBytesRead);
  508.             result = FS_Write(fDestFile, temp_buffer, nBytesRead, &nBytesWritten);
  509.             ++i;
  510.             /* } while(nBytesRead>=nSize && result == FS_NO_ERROR); */
  511.         } while (i < iter && result == FS_NO_ERROR);
  512.         DRM_read_file(fSourceFile, temp_buffer, lastIter, &nBytesRead);
  513.         result = FS_Write(fDestFile, temp_buffer, nBytesRead, &nBytesWritten);
  514.         FS_Close(fDestFile);
  515.         /* if there is an error in writing or reading the audio file then tem file must be deleted */
  516.         if (result != FS_NO_ERROR)
  517.         {
  518.             FS_Delete((U16*) pDestFile);
  519.         }
  520.     }
  521.     else
  522.     {
  523.         result = (S32) fDestFile;
  524.     }
  525.     DRM_seek_file(fSourceFile, fp, FS_FILE_BEGIN);
  526.     return result;
  527. }
  528. #endif /* __MMI_DOWNLOADABLE_THEMES_SUPPORT__ */ 
  529. #ifdef MMI_ON_WIN32
  530. /*****************************************************************************
  531.  * FUNCTION
  532.  *  OpenFileFS
  533.  * DESCRIPTION
  534.  *  
  535.  * PARAMETERS
  536.  *  pFileName       [?]     
  537.  *  pType           [?]     
  538.  * RETURNS
  539.  *  
  540.  *****************************************************************************/
  541. FILE_HANDLE OpenFileFS(U8 *pFileName, U8 *pType)
  542. {
  543. #ifdef __UCS2_ENCODING
  544.     /*----------------------------------------------------------------*/
  545.     /* Local Variables                                                */
  546.     /*----------------------------------------------------------------*/
  547.     U8 *filename;
  548. #else /* __UCS2_ENCODING */ 
  549.     U8 filename[MAX_FILE_NAME];
  550. #endif /* __UCS2_ENCODING */ 
  551.     FILE_HANDLE f = -1;
  552.     /*----------------------------------------------------------------*/
  553.     /* Code Body                                                      */
  554.     /*----------------------------------------------------------------*/
  555. #ifdef __UCS2_ENCODING
  556.     filename = pFileName;
  557. #else /* __UCS2_ENCODING */ 
  558.     AnsiiToUnicodeString(filename, pFileName);
  559. #endif /* __UCS2_ENCODING */ 
  560.     if (strstr(pType, "r+"))
  561.     {
  562.         f = FS_Open((WCHAR*) filename, FS_READ_WRITE);
  563.     }
  564.     else if (strstr(pType, "r"))
  565.     {
  566.         f = FS_Open((WCHAR*) filename, FS_READ_ONLY);
  567.     }
  568.     else if (strstr(pType, "w"))
  569.     {
  570.         /* "w" and "w+" have the same effect */
  571.         f = FS_Open((WCHAR*) filename, FS_READ_WRITE | FS_CREATE_ALWAYS);
  572.     }
  573.     else if (strstr(pType, "a"))
  574.     {
  575.         /* "a" and "a+" have the same effect */
  576.         f = FS_Open((WCHAR*) filename, FS_READ_WRITE | FS_CREATE_ALWAYS);
  577.         if (f > FS_NO_ERROR)
  578.         {
  579.             FS_Seek(f, 0, FS_FILE_END);
  580.         }
  581.     }
  582.     /*
  583.      * NoteXXX: Originally FILE_HANDLE is defined as (FILE *)
  584.      *          and OpenFSFile() will use fopen to open a file.
  585.      *          If fail, the return value is NULL.
  586.      *          But zero value means success for our FS_HANDLE. 
  587.      *          For backward compatibility, we need to do a little
  588.      *          conversion.
  589.      *          
  590.      */
  591.     if (f < FS_NO_ERROR)
  592.     {
  593.         return 0;
  594.     }
  595.     else
  596.     {
  597.         return f;
  598.     }
  599. }
  600. /*****************************************************************************
  601.  * FUNCTION
  602.  *  fdelete
  603.  * DESCRIPTION
  604.  *  
  605.  * PARAMETERS
  606.  *  fFile       [?]     
  607.  * RETURNS
  608.  *  
  609.  *****************************************************************************/
  610. S32 fdelete(U8 *fFile)
  611. {
  612.     /*----------------------------------------------------------------*/
  613.     /* Local Variables                                                */
  614.     /*----------------------------------------------------------------*/
  615.     int retval;
  616.     /*----------------------------------------------------------------*/
  617.     /* Code Body                                                      */
  618.     /*----------------------------------------------------------------*/
  619.     retval = FS_Delete((WCHAR*) fFile);
  620.     if (retval == FS_NO_ERROR)
  621.         /* succeed */
  622.     {
  623.         return 0;
  624.     }
  625.     else
  626.         /* fail */
  627.     {
  628.         return 1;
  629.     }
  630. }
  631. /*****************************************************************************
  632.  * FUNCTION
  633.  *  frename
  634.  * DESCRIPTION
  635.  *  
  636.  * PARAMETERS
  637.  *  sFile       [?]     
  638.  *  dFile       [?]     
  639.  * RETURNS
  640.  *  
  641.  *****************************************************************************/
  642. S32 frename(U8 *sFile, U8 *dFile)
  643. {
  644.     /*----------------------------------------------------------------*/
  645.     /* Local Variables                                                */
  646.     /*----------------------------------------------------------------*/
  647.     int retval;
  648.     /*----------------------------------------------------------------*/
  649.     /* Code Body                                                      */
  650.     /*----------------------------------------------------------------*/
  651.     retval = FS_Rename((WCHAR*) sFile, (WCHAR*) dFile);
  652.     if (retval == FS_NO_ERROR)
  653.         /* succeed */
  654.     {
  655.         return 1;
  656.     }
  657.     else
  658.         /* fail */
  659.     {
  660.         return 0;
  661.     }
  662. }
  663. /*****************************************************************************
  664.  * FUNCTION
  665.  *  pFindFirstEx
  666.  * DESCRIPTION
  667.  *  
  668.  * PARAMETERS
  669.  *  x1      [IN]        
  670.  *  x2      [IN]        
  671.  *  x3      [IN]        
  672.  *  x4      [?]         
  673.  *  x5      [IN]        
  674.  *  x6      [IN]        
  675.  * RETURNS
  676.  *  
  677.  *****************************************************************************/
  678. FILE_HANDLE pFindFirstEx(const PS8 x1, U8 x2, U8 x3, void *x4, PS8 x5, U32 x6)
  679. {
  680.     /*----------------------------------------------------------------*/
  681.     /* Local Variables                                                */
  682.     /*----------------------------------------------------------------*/
  683.     /*----------------------------------------------------------------*/
  684.     /* Code Body                                                      */
  685.     /*----------------------------------------------------------------*/
  686.     return 0;
  687. }
  688. /*****************************************************************************
  689.  * FUNCTION
  690.  *  pFindNextEx
  691.  * DESCRIPTION
  692.  *  
  693.  * PARAMETERS
  694.  *  x1      [IN]        
  695.  *  x2      [?]         
  696.  *  x3      [IN]        
  697.  *  x4      [IN]        
  698.  * RETURNS
  699.  *  
  700.  *****************************************************************************/
  701. U8 pFindNextEx(FILE_HANDLE x1, void *x2, PS8 x3, U32 x4)
  702. {
  703.     /*----------------------------------------------------------------*/
  704.     /* Local Variables                                                */
  705.     /*----------------------------------------------------------------*/
  706.     /*----------------------------------------------------------------*/
  707.     /* Code Body                                                      */
  708.     /*----------------------------------------------------------------*/
  709.     return -1;
  710. }
  711. /*****************************************************************************
  712.  * FUNCTION
  713.  *  CloseFileFS
  714.  * DESCRIPTION
  715.  *  
  716.  * PARAMETERS
  717.  *  f       [IN]        
  718.  * RETURNS
  719.  *  void
  720.  *****************************************************************************/
  721. void CloseFileFS(FILE_HANDLE f)
  722. {
  723.     /*----------------------------------------------------------------*/
  724.     /* Local Variables                                                */
  725.     /*----------------------------------------------------------------*/
  726.     /*----------------------------------------------------------------*/
  727.     /* Code Body                                                      */
  728.     /*----------------------------------------------------------------*/
  729.     FS_Close(f);
  730. }
  731. /*****************************************************************************
  732.  * FUNCTION
  733.  *  WriteFileFS
  734.  * DESCRIPTION
  735.  *  
  736.  * PARAMETERS
  737.  *  buffer      [IN]        
  738.  *  size        [IN]        
  739.  *  count       [IN]        
  740.  *  f           [IN]        
  741.  * RETURNS
  742.  *  
  743.  *****************************************************************************/
  744. size_t WriteFileFS(const void *buffer, size_t size, size_t count, FILE_HANDLE f)
  745. {
  746.     /*----------------------------------------------------------------*/
  747.     /* Local Variables                                                */
  748.     /*----------------------------------------------------------------*/
  749.     U32 write;
  750.     int retval;
  751.     /*----------------------------------------------------------------*/
  752.     /* Code Body                                                      */
  753.     /*----------------------------------------------------------------*/
  754.     retval = FS_Write(f, (void*)buffer, size * count, &write);
  755.     if (retval == FS_NO_ERROR)
  756.         /* succeed */
  757.     {
  758.         return write;
  759.     }
  760.     else
  761.         /* fail */
  762.     {
  763.         return 0;
  764.     }
  765. }
  766. /*****************************************************************************
  767.  * FUNCTION
  768.  *  ReadFileFS
  769.  * DESCRIPTION
  770.  *  
  771.  * PARAMETERS
  772.  *  buffer      [?]         
  773.  *  size        [IN]        
  774.  *  count       [IN]        
  775.  *  f           [IN]        
  776.  *  read        [?]         
  777.  * RETURNS
  778.  *  
  779.  *****************************************************************************/
  780. size_t ReadFileFS(void *buffer, size_t size, size_t count, FILE_HANDLE f, size_t *read)
  781. {
  782.     /*----------------------------------------------------------------*/
  783.     /* Local Variables                                                */
  784.     /*----------------------------------------------------------------*/
  785.     U32 dummyread;
  786.     int retval;
  787.     /*----------------------------------------------------------------*/
  788.     /* Code Body                                                      */
  789.     /*----------------------------------------------------------------*/
  790.     if (read == NULL)
  791.     {
  792.         read = &dummyread;
  793.     }
  794.     retval = FS_Read(f, buffer, size * count, read);
  795.     if (retval != FS_NO_ERROR)
  796.         /* fail */
  797.     {
  798.         *read = EOF;
  799.     }
  800.     return *read;
  801. }
  802. /*****************************************************************************
  803.  * FUNCTION
  804.  *  CreateDir
  805.  * DESCRIPTION
  806.  *  
  807.  * PARAMETERS
  808.  *  pPath       [?]     
  809.  * RETURNS
  810.  *  
  811.  *****************************************************************************/
  812. S32 CreateDir(U8 *pPath)
  813. {
  814.     /*----------------------------------------------------------------*/
  815.     /* Local Variables                                                */
  816.     /*----------------------------------------------------------------*/
  817.     S32 nLen = 0;
  818.     S32 nCount = 0;
  819.     S32 nRetVal;
  820.     U16 nFirstTime = TRUE;
  821.     U8 aTempPath[150];
  822.     /*----------------------------------------------------------------*/
  823.     /* Code Body                                                      */
  824.     /*----------------------------------------------------------------*/
  825.     nLen = UCS2Strlen((PS8) pPath);
  826.     nLen *= ENCODING_LENGTH;
  827.     while (nCount < nLen)
  828.     {
  829.         if (pPath[nCount] == '\' && pPath[nCount + 1] == '')
  830.         {
  831.             if (!nFirstTime)
  832.             {
  833.                 aTempPath[nCount] = '';
  834.                 aTempPath[nCount + 1] = '';
  835.                 nRetVal = FS_CreateDir((U16*) aTempPath);
  836.                 //if(nRetVal<FS_NO_ERROR)   // vikram...08/11/2003
  837.                 //  return nRetVal;
  838.             }
  839.             else
  840.             {
  841.                 nFirstTime = FALSE;
  842.             }
  843.         }
  844.         aTempPath[nCount] = pPath[nCount];
  845.         aTempPath[nCount + 1] = pPath[nCount + 1];
  846.         nCount += 2;
  847.     }
  848.     aTempPath[nCount] = '';
  849.     aTempPath[nCount + 1] = '';
  850.     nRetVal = FS_CreateDir((U16*) aTempPath);
  851.     return nRetVal;
  852. }
  853. /*****************************************************************************
  854.  * FUNCTION
  855.  *  OpenCache
  856.  * DESCRIPTION
  857.  *  
  858.  * PARAMETERS
  859.  *  pFileName       [?]     
  860.  *  nType           [?]     
  861.  * RETURNS
  862.  *  
  863.  *****************************************************************************/
  864. FILE_HANDLE OpenCache(U8 *pFileName, U8 *nType)
  865. {
  866.     /*----------------------------------------------------------------*/
  867.     /* Local Variables                                                */
  868.     /*----------------------------------------------------------------*/
  869.     FILE_HANDLE file;
  870.     /*----------------------------------------------------------------*/
  871.     /* Code Body                                                      */
  872.     /*----------------------------------------------------------------*/
  873.     file = pfopen(pFileName, nType);
  874.     if (pfOpenError(file))
  875.     {
  876.         return 0;
  877.     }
  878.     else
  879.     {
  880.         StartFileRead(file, 0);
  881.     }
  882.     return file;
  883. }
  884. #endif /* MMI_ON_WIN32 */ 
  885. #ifndef MMI_ON_WIN32
  886. /*****************************************************************************
  887.  * FUNCTION
  888.  *  CreateDir
  889.  * DESCRIPTION
  890.  *  
  891.  * PARAMETERS
  892.  *  pPath       [?]     
  893.  * RETURNS
  894.  *  
  895.  *****************************************************************************/
  896. S32 CreateDir(U8 *pPath)
  897. {
  898.     /*----------------------------------------------------------------*/
  899.     /* Local Variables                                                */
  900.     /*----------------------------------------------------------------*/
  901.     S32 nLen = 0;
  902.     S32 nCount = 0;
  903.     S32 nRetVal;
  904.     U16 nFirstTime = TRUE;
  905.     U8 aTempPath[150];
  906.     /*----------------------------------------------------------------*/
  907.     /* Code Body                                                      */
  908.     /*----------------------------------------------------------------*/
  909.     nLen = UCS2Strlen((PS8) pPath);
  910.     nLen *= ENCODING_LENGTH;
  911.     while (nCount < nLen)
  912.     {
  913.         if (pPath[nCount] == '\' && pPath[nCount + 1] == '')
  914.         {
  915.             if (!nFirstTime)
  916.             {
  917.                 aTempPath[nCount] = '';
  918.                 aTempPath[nCount + 1] = '';
  919.                 nRetVal = FS_CreateDir((U16*) aTempPath);
  920.                 //if(nRetVal<FS_NO_ERROR)   // vikram...08/11/2003
  921.                 //  return nRetVal;
  922.             }
  923.             else
  924.             {
  925.                 nFirstTime = FALSE;
  926.             }
  927.         }
  928.         aTempPath[nCount] = pPath[nCount];
  929.         aTempPath[nCount + 1] = pPath[nCount + 1];
  930.         nCount += 2;
  931.     }
  932.     aTempPath[nCount] = '';
  933.     aTempPath[nCount + 1] = '';
  934.     nRetVal = FS_CreateDir((U16*) aTempPath);
  935.     return nRetVal;
  936. }
  937. /*****************************************************************************
  938.  * FUNCTION
  939.  *  OpenCache
  940.  * DESCRIPTION
  941.  *  
  942.  * PARAMETERS
  943.  *  pFileName       [?]         
  944.  *  nType           [IN]        
  945.  * RETURNS
  946.  *  
  947.  *****************************************************************************/
  948. FILE_HANDLE OpenCache(U8 *pFileName, S32 nType)
  949. {
  950.     /*----------------------------------------------------------------*/
  951.     /* Local Variables                                                */
  952.     /*----------------------------------------------------------------*/
  953.     FILE_HANDLE file;
  954.     /*----------------------------------------------------------------*/
  955.     /* Code Body                                                      */
  956.     /*----------------------------------------------------------------*/
  957.     file = pfopen(pFileName, nType);
  958.     if (pfOpenError(file))
  959.     {
  960.         return NULL;
  961.     }
  962.     else
  963.     {
  964.         StartFileRead(file, 0);
  965.     }
  966.     return file;
  967. }
  968. #endif /* MMI_ON_WIN32 */