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 + -
显示快捷键?