mmsfrrecord.c
来自「mtk wap和mms代码。。适应mtk 25。26平台」· C语言 代码 · 共 332 行
C
332 行
/***************************************************************************
*
* Pollex Mobile Platform
*
* Copyright (c) 2004 by Pollex Mobile Software Co., Ltd.
* All Rights Reserved
*
* Module :
*
* Purpose :
*
\**************************************************************************/
#include "mmsfrrecord.h"
//#include "CommonScreens.h"
extern S32 (*pfnUnicodeStrlen)(const S8 *arrOut);
extern PS8 (*pfnUnicodeStrcpy)(S8 *strDestination, const S8 *strSource );
/***************************************************************************
* Function frr_GetPathAndName
* Purpose Abstract path and name from the given full pathname
* Params
* Return
* Remarks
\**************************************************************************/
/*BOOL frr_GetPathAndName(char* pPathName, char* pFile, char* pPath)
{
int i;
int len;
// char c;
if(!pPathName || !pFile || !pPath)
return FALSE;
if(pPathName[0] == 0)
return FALSE;
len = MMS_Strlen(pPathName);
i = len-1;
while(i >= 0)
{
if(pPathName[i] == '/')
break;
i--;
}
if(i >= 0)
{
MMS_Strcpy(pFile, pPathName+i+1);
MMS_Memcpy((void*)pPath, (void*)pPathName, i+1);
pPath[i+1] = 0;
}
else
{
MMS_Strcpy(pFile, pPathName);
MMS_Strcpy(pPath, "");
}
return TRUE;
}
*/
/***************************************************************************
* Function frr_CreateRecord
* Purpose Create a new FRRecord struct
* Params
* Return
* Remarks
\**************************************************************************/
FRRecord* frr_CreateRecord(void)
{
FRRecord* record = NULL;
record = (FRRecord*)MMS_MALLOC(sizeof(FRRecord));
if(!record)
return NULL;
MMS_Memset((void*)record, 0, sizeof(FRRecord));
record->m_filehandle = -1;
return record;
}
/***************************************************************************
* Function frr_ReleaseRecord
* Purpose Release a FRRecord struct
* Params record : Struct to release
* Return
* Remarks pointer record is invalid after call this function
\**************************************************************************/
FRRecord* frr_ReleaseRecord(FRRecord* record)
{
if(!record)
return NULL;
//close file first if it's opened
if(record->m_filename &&
record->m_bOpen == TRUE &&
record->m_filehandle >= 0)
{
FS_Close(record->m_filehandle);
}
//release file name
if(record->m_filename)
{
MMS_FREE(record->m_filename);
}
//release this struct
MMS_FREE(record);
return NULL;
}
/***************************************************************************
* Function frr_SetFileName
* Purpose Set file name to the FRRecord struct
* Params record :
* fname : file name in Unicode
* Return
* Remarks
\**************************************************************************/
BOOL frr_SetFileName(FRRecord* record, S8* fname)
{
int len = 0;
if(!record || !fname)
return FALSE;
if((len = pfnUnicodeStrlen(fname)) <= 0)
return FALSE;
//Close file and release old file name
if(record->m_filename)
{
if(record->m_bOpen == TRUE)
{
FS_Close(record->m_filehandle);
record->m_filehandle = -1;
record->m_bOpen = FALSE;
}
MMS_FREE(record->m_filename);
record->m_filename = NULL;
}
//new file name
record->m_filename = (char*)MMS_MALLOC( (len+1) * 2 );
if(!record->m_filename)
return FALSE;
pfnUnicodeStrcpy((S8*)record->m_filename, (S8*)fname);
return TRUE;
}
/***************************************************************************
* Function frr_GetFileName
* Purpose Get file name
* Params
* Return File name, in Unicode
* Remarks
\**************************************************************************/
S8* frr_GetFileName(FRRecord* record)
{
if(!record)
return NULL;
return record->m_filename;
}
/***************************************************************************
* Function frr_GetFileHandle
* Purpose
* Params
* Return File handle, invalid if < 0
* Remarks
\**************************************************************************/
FS_HANDLE frr_GetFileHandle(FRRecord* record)
{
if(!record)
return 0;
if(record->m_bOpen == TRUE)
return record->m_filehandle;
else
return -1;
}
/***************************************************************************
* Function frr_GetFileSize
* Purpose
* Params
* Return
* Remarks
\**************************************************************************/
int frr_GetFileSize(FRRecord* record)
{
if(!record)
return 0;
return record->m_filesize;
}
/***************************************************************************
* Function frr_GetFileOffset
* Purpose Get current file position
* Params
* Return
* Remarks
\**************************************************************************/
int frr_GetFileOffset(FRRecord* record)
{
if(!record)
return -1;
if(record->m_bOpen == TRUE)
return record->m_fileoffset;
else
return -1;
}
/***************************************************************************
* Function frr_OpenFile
* Purpose Open file
* Params
* Return File handle, invalid if < 0
* Remarks After open succeed, m_filehandle and m_filesize are valid
\**************************************************************************/
FS_HANDLE frr_OpenFile(FRRecord* record)
{
if(!record)
return -1;
//no name
if(!record->m_filename)
return -1;
//opened, just return handle
if(record->m_bOpen == TRUE)
return record->m_filehandle;
//open
record->m_filehandle = FS_Open((unsigned short*)record->m_filename, FS_READ_ONLY);
if(record->m_filehandle < 0)
return -1;
//get file size
FS_GetFileSize(record->m_filehandle, (U32*)(&(record->m_filesize)));
record->m_bOpen = TRUE;
record->m_fileoffset = 0;
return record->m_filehandle;
}
/***************************************************************************
* Function frr_CloseFile
* Purpose Close file
* Params
* Return
* Remarks
\**************************************************************************/
BOOL frr_CloseFile(FRRecord* record)
{
if(!record)
return FALSE;
if(record->m_bOpen == FALSE)
return TRUE;
if(record->m_filehandle >= 0)
{
FS_Close(record->m_filehandle);
record->m_filehandle = -1;
}
record->m_bOpen = FALSE;
record->m_fileoffset = 0;
return TRUE;
}
/***************************************************************************
* Function frr_ReadFile
* Purpose Read data from file
* Params pBuf : buffer to receive data
* nLen : buffer size
* Return > 0 if read succeed.
# ==0 means no more data to read
* Remarks
\**************************************************************************/
int frr_ReadFile(FRRecord* record, void* pBuf, long nLen)
{
int len;
if(!record)
return 0;
if(record->m_bOpen == FALSE || record->m_filehandle < 0)
return 0;
//
len = (nLen > (record->m_filesize - record->m_fileoffset)) ?
(record->m_filesize - record->m_fileoffset) : nLen;
//no data to read, close the file
if(len <= 0)
{
FS_Close(record->m_filehandle);
record->m_filehandle = -1;
record->m_bOpen = FALSE;
record->m_fileoffset = 0;
return 0;
}
//reach or beyond the end of file
if(record->m_fileoffset >= record->m_filesize)
{
FS_Close(record->m_filehandle);
record->m_filehandle = -1;
record->m_bOpen = FALSE;
record->m_fileoffset = 0;
return 0;
}
//read
FS_Read(record->m_filehandle, pBuf, len, (unsigned int*)&len);
//increase offset
record->m_fileoffset += len;
return len;
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?