1855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi/* 2855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * Copyright (C) 2011 The Android Open Source Project 3855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * 4855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * Licensed under the Apache License, Version 2.0 (the "License"); 5855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * you may not use this file except in compliance with the License. 6855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * You may obtain a copy of the License at 7855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * 8855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * http://www.apache.org/licenses/LICENSE-2.0 9855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * 10855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * Unless required by applicable law or agreed to in writing, software 11855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * distributed under the License is distributed on an "AS IS" BASIS, 12855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * See the License for the specific language governing permissions and 14855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * limitations under the License. 15855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi */ 16855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 17855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi/** 18855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi ****************************************************************************** 19855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @file M4OSA_FileReader_optim.c 20855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @brief 21855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @note This file implements functions to manipulate filesystem access 22855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi ****************************************************************************** 23855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi*/ 24855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 25855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi/** Addition of Trace ID **/ 26855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#include "M4OSA_CoreID.h" 27855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#include "M4OSA_Error.h" 28855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 29855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#ifdef M4TRACE_ID 30855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#undef M4TRACE_ID 31855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#endif 32855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#define M4TRACE_ID M4OSA_FILE_READER 33855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 34855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 35855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#include "M4OSA_FileCommon.h" 36855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#include "M4OSA_FileReader.h" 37855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#include "M4OSA_FileWriter.h" 38855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#include "M4OSA_Memory.h" 39855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#include "M4OSA_Debug.h" 40855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 41855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#include "LVOSA_FileReader_optim.h" 42855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 43855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#define M4OSA_READER_OPTIM_USE_OSAL_IF 44855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#ifndef M4OSA_READER_OPTIM_USE_OSAL_IF 45855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi #include "M4OSA_FileAccess.h" 46855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#endif 47855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 48855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#define M4ERR_CHECK_NULL_RETURN_VALUE(retval, pointer) if ((pointer) == M4OSA_NULL) return (retval); 49855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 50855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 51855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 52855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 53855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi/** 54855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi ****************************************************************************** 55855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * File reader cache buffers parameters (size, number of buffers, etc) 56855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi ****************************************************************************** 57855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi*/ 58855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#define M4OSA_READBUFFER_SIZE 1024*16 59855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#define M4OSA_READBUFFER_NB 2 60855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#define M4OSA_READBUFFER_NONE -1 61855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#define M4OSA_EOF -1 62855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 63855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#define MAX_FILLS_SINCE_LAST_ACCESS M4OSA_READBUFFER_NB*2 64855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 65855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi/** 66855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi ****************************************************************************** 67855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * structure M4OSA_FileReader_Buffer 68855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @brief This structure defines the File reader Buffers context (private) 69855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi ****************************************************************************** 70855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi*/ 71855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargitypedef struct 72855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi{ 73855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_MemAddr8 data; /**< buffer data */ 74855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_FilePosition size; /**< size of the buffer */ 75855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_FilePosition filepos; /**< position in the file where the buffer starts */ 76855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_FilePosition remain; /**< data amount not already copied from buffer */ 77855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_UInt32 nbFillSinceLastAcess; /**< To know since how many time we didn't use this buffer */ 78855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi} M4OSA_FileReader_Buffer_optim; 79855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 80855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi/** 81855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi ****************************************************************************** 82855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * structure M4OSA_FileReader_Context 83855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @brief This structure defines the File reader context (private) 84855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @note This structure is used for all File Reader calls to store the context 85855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi ****************************************************************************** 86855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi*/ 87855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargitypedef struct 88855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi{ 89855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_Bool IsOpened; /**< Micro state machine */ 90855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_FileAttribute FileAttribute; /**< Opening mode */ 91855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_FilePosition readFilePos; /**< Effective position of the GFL read pointer */ 92855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_FilePosition absolutePos; /**< Virtual position for next reading */ 93855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_FilePosition fileSize; /**< Size of the file */ 94855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 95855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_FileReader_Buffer_optim buffer[M4OSA_READBUFFER_NB]; /**< Read buffers */ 96855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 97855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_Void* aFileDesc; /**< File descriptor */ 98855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 99855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#ifdef M4OSA_READER_OPTIM_USE_OSAL_IF 100855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_FileReadPointer* FS; /**< Filesystem interface */ 101855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#else 102855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_FileSystem_FctPtr *FS; /**< Filesystem interface */ 103855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#endif 104855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 105855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi} M4OSA_FileReader_Context_optim; 106855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 107855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi/* __________________________________________________________ */ 108855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi/*| |*/ 109855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi/*| Global function for handling low level read access |*/ 110855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi/*|__________________________________________________________|*/ 111855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 112855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargistatic M4OSA_FileReadPointer* gv_NXPSW_READOPT_lowLevelFunctions; 113855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 114855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray KundargiM4OSA_ERR NXPSW_FileReaderOptim_init(M4OSA_Void *lowLevel_functionPointers, M4OSA_Void *optimized_functionPointers) 115855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi{ 116855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_FileReadPointer* lowLevel_fp = (M4OSA_FileReadPointer*) lowLevel_functionPointers; 117855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_FileReadPointer* optimized_fp = (M4OSA_FileReadPointer*) optimized_functionPointers; 118855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 119855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi //Set the optimized functions, to be called by the user 120855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi optimized_fp->openRead = M4OSA_fileReadOpen_optim; 121855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi optimized_fp->readData = M4OSA_fileReadData_optim; 122855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi optimized_fp->seek = M4OSA_fileReadSeek_optim; 123855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi optimized_fp->closeRead = M4OSA_fileReadClose_optim; 124855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi optimized_fp->setOption = M4OSA_fileReadSetOption_optim; 125855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi optimized_fp->getOption = M4OSA_fileReadGetOption_optim; 126855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 127855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 128855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi return M4NO_ERROR; 129855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi} 130855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 131855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray KundargiM4OSA_ERR NXPSW_FileReaderOptim_cleanUp() 132855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi{ 133855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 134855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi gv_NXPSW_READOPT_lowLevelFunctions = M4OSA_NULL; 135855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 136855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi return M4NO_ERROR; 137855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi} 138855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 139855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 140855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray KundargiM4OSA_ERR NXPSW_FileReaderOptim_getLowLevelFunctions(M4OSA_Void **FS) 141855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi{ 142855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_FileReadPointer** pFunctionsPointer = (M4OSA_FileReadPointer**) FS; 143855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi *pFunctionsPointer = gv_NXPSW_READOPT_lowLevelFunctions; 144855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi return M4NO_ERROR; 145855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi} 146855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 147855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 148855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi/* __________________________________________________________ */ 149855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi/*| |*/ 150855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi/*| Buffer handling functions for Read access |*/ 151855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi/*|__________________________________________________________|*/ 152855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 153855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi/**************************************************************/ 154855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray KundargiM4OSA_ERR M4OSA_FileReader_BufferInit(M4OSA_FileReader_Context_optim* apContext) 155855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi/**************************************************************/ 156855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi{ 157855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_UInt8 i; 158855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 159855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi for(i=0; i<M4OSA_READBUFFER_NB; i++) 160855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 161855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi apContext->buffer[i].data = M4OSA_NULL; 162855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi apContext->buffer[i].size = 0; 163855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi apContext->buffer[i].filepos = 0; 164855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi apContext->buffer[i].remain = 0; 165855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 166855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 167855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi for(i=0; i<M4OSA_READBUFFER_NB; i++) 168855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 169694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu apContext->buffer[i].data = (M4OSA_MemAddr8) M4OSA_32bitAlignedMalloc(M4OSA_READBUFFER_SIZE, 170694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu M4OSA_FILE_READER, (M4OSA_Char *)"M4OSA_FileReader_BufferInit"); 171855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4ERR_CHECK_NULL_RETURN_VALUE(M4ERR_ALLOC, apContext->buffer[i].data); 172855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 173855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 174855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi return M4NO_ERROR; 175855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi} 176855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 177855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi/**************************************************************/ 178855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray KundargiM4OSA_Void M4OSA_FileReader_BufferFree(M4OSA_FileReader_Context_optim* apContext) 179855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi/**************************************************************/ 180855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi{ 181855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_Int8 i; 182855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 183855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi for(i=0; i<M4OSA_READBUFFER_NB; i++) 184855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi if(apContext->buffer[i].data != M4OSA_NULL) 185694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free(apContext->buffer[i].data); 186855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi} 187855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 188855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi/**************************************************************/ 189855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray KundargiM4OSA_FilePosition M4OSA_FileReader_BufferCopy(M4OSA_FileReader_Context_optim* apContext, 190855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_Int8 i, M4OSA_FilePosition pos, 191855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_FilePosition size, M4OSA_MemAddr8 pData) 192855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi/**************************************************************/ 193855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi{ 194855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_FilePosition copysize; 195855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_FilePosition offset; 196855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 197855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi if(apContext->buffer[i].size == M4OSA_EOF) return M4OSA_EOF; 198855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 199855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi if( (pos < apContext->buffer[i].filepos) 200855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi || (pos > (apContext->buffer[i].filepos + apContext->buffer[i].size - 1)) ) 201855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 202855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi return 0; /* nothing copied */ 203855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 204855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 205855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi offset = pos - apContext->buffer[i].filepos; 206855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 207855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi copysize = apContext->buffer[i].size - offset; 208855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi copysize = (size < copysize) ? size : copysize; 209855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 21032ed3f4dad00f8a65f7e6b38402c70d5341c57ebShyam Pallapothu memcpy((void *)pData, (void *)(apContext->buffer[i].data + offset), copysize); 211855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 212855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi apContext->buffer[i].remain -= copysize; 213855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi apContext->buffer[i].nbFillSinceLastAcess = 0; 214855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 215855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi return copysize; 216855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi} 217855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 218855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi/**************************************************************/ 219855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray KundargiM4OSA_ERR M4OSA_FileReader_BufferFill(M4OSA_FileReader_Context_optim* apContext, 220855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_Int8 i, M4OSA_FilePosition pos) 221855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi/**************************************************************/ 222855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi{ 223855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_FilePosition gridPos; 224855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_FilePosition tempPos; 225855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_UInt32 bufferSize; 226855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_FilePosition diff; 227855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_FilePosition size; 228855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_ERR err = M4NO_ERROR; 229855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#ifdef M4OSA_READER_OPTIM_USE_OSAL_IF 230855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_ERR errno = M4NO_ERROR; 231855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_UInt32 fileReadSize = 0; 232855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_FilePosition fileSeekPosition = 0; 233855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#else 234855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_Int32 ret_val; 235855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_UInt16 errno; 236855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#endif 237855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 238855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_TRACE3_4("BufferFill i = %d pos = %ld read = %ld old = %ld", i, pos, 239855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi apContext->readFilePos, apContext->buffer[i].filepos); 240855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 241855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi /* Avoid cycling statement because of EOF */ 242855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi if(pos >= apContext->fileSize) 243855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi return M4WAR_NO_MORE_AU; 244855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 245855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi /* Relocate to absolute postion if necessary */ 246855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi bufferSize = M4OSA_READBUFFER_SIZE; 247855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi tempPos = (M4OSA_FilePosition) (pos / bufferSize); 248855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi gridPos = tempPos * M4OSA_READBUFFER_SIZE; 249855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi diff = gridPos - apContext->readFilePos; 250855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 251855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi if(diff != 0) 252855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 253855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#ifdef M4OSA_READER_OPTIM_USE_OSAL_IF 254855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi fileSeekPosition = diff; 255855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi errno = apContext->FS->seek(apContext->aFileDesc, M4OSA_kFileSeekCurrent, 256855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi &fileSeekPosition); 257855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi apContext->readFilePos = gridPos; 258855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 259855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi if(M4NO_ERROR != errno) 260855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 261855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi err = errno; 262855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_TRACE1_1("M4OSA_FileReader_BufferFill ERR1 = 0x%x", err); 263855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi return err; 264855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 265855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 266855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#else 267855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi ret_val = apContext->FS->pFctPtr_Seek(apContext->aFileDesc, diff, 268855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_kFileSeekCurrent, &errno); 269855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi apContext->readFilePos = gridPos; 270855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 271855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi if(ret_val != 0) 272855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 273855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi err = M4OSA_ERR_CREATE(M4_ERR, M4OSA_FILE_READER, errno); 274855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_TRACE1_1("M4OSA_FileReader_BufferFill ERR1 = 0x%x", err); 275855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi return err; 276855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 277855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#endif /*M4OSA_READER_OPTIM_USE_OSAL_IF*/ 278855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 279855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 280855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi apContext->buffer[i].filepos = apContext->readFilePos; 281855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 282855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi /* Read Data */ 283855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#ifdef M4OSA_READER_OPTIM_USE_OSAL_IF 284855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi fileReadSize = M4OSA_READBUFFER_SIZE; 285855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi errno = apContext->FS->readData(apContext->aFileDesc, 286855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi (M4OSA_MemAddr8)apContext->buffer[i].data, &fileReadSize); 287855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 288855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi size = (M4OSA_FilePosition)fileReadSize; 289855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi if ((M4NO_ERROR != errno)&&(M4WAR_NO_DATA_YET != errno)) 290855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 291855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi apContext->buffer[i].size = M4OSA_EOF; 292855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi apContext->buffer[i].remain = 0; 293855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 294855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi err = errno; 295855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_TRACE1_1("M4OSA_FileReader_BufferFill ERR2 = 0x%x", err); 296855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi return err; 297855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 298855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#else 299855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi size = apContext->FS->pFctPtr_Read(apContext->aFileDesc, 300855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi (M4OSA_UInt8 *)apContext->buffer[i].data, M4OSA_READBUFFER_SIZE, &errno); 301855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi if(size == -1) 302855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 303855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi apContext->buffer[i].size = M4OSA_EOF; 304855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi apContext->buffer[i].remain = 0; 305855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 306855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi err = M4OSA_ERR_CREATE(M4_ERR, M4OSA_FILE_READER, errno); 307855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_TRACE1_1("M4OSA_FileReader_BufferFill ERR2 = 0x%x", err); 308855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi return err; 309855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 310855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#endif 311855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 312855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi apContext->buffer[i].size = size; 313855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi apContext->buffer[i].remain = size; 314855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi apContext->buffer[i].nbFillSinceLastAcess = 0; 315855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 316855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi /* Retrieve current position */ 317855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#ifdef M4OSA_READER_OPTIM_USE_OSAL_IF 318855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi errno = apContext->FS->getOption(apContext->aFileDesc, 319855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_kFileReadGetFilePosition, 320855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi (M4OSA_DataOption*) &apContext->readFilePos); 321855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 322855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi if (M4NO_ERROR != errno) 323855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 324855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi err = errno; 325855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_TRACE1_1("M4OSA_FileReader_BufferFill ERR3 = 0x%x", err); 326855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 327855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi else if( (apContext->buffer[i].size >= 0) 328855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi && (apContext->buffer[i].size < M4OSA_READBUFFER_SIZE) ) 329855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 330855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi err = M4WAR_NO_DATA_YET; 331855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_TRACE2_0("M4OSA_FileReader_BufferFill returns NO DATA YET"); 332855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi return err; 333855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 334855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#else 335855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi apContext->readFilePos = apContext->FS->pFctPtr_Tell(apContext->aFileDesc, &errno); 336855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 337855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi if( (apContext->buffer[i].size >= 0) 338855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi && (apContext->buffer[i].size < M4OSA_READBUFFER_SIZE) ) 339855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 340855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi err = M4WAR_NO_DATA_YET; 341855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_TRACE1_1("M4OSA_FileReader_BufferFill ERR3 = 0x%x", err); 342855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi return err; 343855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 344855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#endif /*M4OSA_READER_OPTIM_USE_OSAL_IF*/ 345855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 346855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi /* Return without error */ 347855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi return M4NO_ERROR; 348855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi} 349855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 350855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi/**************************************************************/ 351855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray KundargiM4OSA_Int8 M4OSA_FileReader_BufferMatch(M4OSA_FileReader_Context_optim* apContext, 352855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_FilePosition pos) 353855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi/**************************************************************/ 354855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi{ 355855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_Int8 i; 356855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 357855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 358855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi /* Select the buffer which matches with given pos */ 359855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi for(i=0; i<M4OSA_READBUFFER_NB; i++) 360855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 361855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi if( (pos >= apContext->buffer[i].filepos) 362855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi && (pos < (apContext->buffer[i].filepos + apContext->buffer[i].size)) ) 363855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 364855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi return i; 365855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 366855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 367855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi return M4OSA_READBUFFER_NONE; 368855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi} 369855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 370855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi/**************************************************************/ 371855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray KundargiM4OSA_Int8 M4OSA_FileReader_BufferSelect(M4OSA_FileReader_Context_optim* apContext, 372855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_Int8 current_i) 373855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi/**************************************************************/ 374855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi{ 375855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_Int8 i,j; 376855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_FilePosition min_amount,max_amount; 377855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_Int8 min_i,max_count; 378855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 379855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi /* update nbFillSinceLastAcess field */ 380855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi for(i=0; i<M4OSA_READBUFFER_NB; i++) 381855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 382855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi apContext->buffer[i].nbFillSinceLastAcess ++; 383855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 384855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 385855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi /* Plan A : Scan for empty buffer */ 386855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi for(i=0; i<M4OSA_READBUFFER_NB; i++) 387855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 388855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi if(apContext->buffer[i].remain == 0) 389855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 390855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi return i; 391855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 392855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 393855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 394855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi max_count = M4OSA_READBUFFER_NB; 395855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi max_amount = MAX_FILLS_SINCE_LAST_ACCESS; 396855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 397855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi /* Plan B : Scan for dead buffer */ 398855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi for(i=0; i<M4OSA_READBUFFER_NB; i++) 399855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 400855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi if(apContext->buffer[i].nbFillSinceLastAcess >= (M4OSA_UInt32) max_amount) 401855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 402855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi max_amount = apContext->buffer[i].nbFillSinceLastAcess; 403855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi max_count = i; 404855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 405855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 406855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi if(max_count<M4OSA_READBUFFER_NB) 407855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 408855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_TRACE2_2("DEAD BUFFER: %d, %d",max_count,apContext->buffer[max_count].nbFillSinceLastAcess); 409855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi return max_count; 410855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 411855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 412855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi min_i = current_i; 413855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi min_amount = M4OSA_READBUFFER_SIZE; 414855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 415855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi /* Select the buffer which is the most "empty" */ 416855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi for(i=0; i<M4OSA_READBUFFER_NB; i++) 417855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 418855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi j = (i+current_i)%M4OSA_READBUFFER_NB; 419855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 420855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi if(apContext->buffer[j].remain < min_amount) 421855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 422855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi min_amount = apContext->buffer[j].remain; 423855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi min_i = j; 424855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 425855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 426855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 427855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi return min_i; 428855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 429855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi} 430855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 431855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi/**************************************************************/ 432855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray KundargiM4OSA_ERR M4OSA_FileReader_CalculateSize(M4OSA_FileReader_Context_optim* apContext) 433855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi/**************************************************************/ 434855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi{ 435855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_ERR err = M4NO_ERROR; 436855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#ifdef M4OSA_READER_OPTIM_USE_OSAL_IF 437855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_ERR errno = M4NO_ERROR; 438855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#else 439855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_Int32 ret_val; 440855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_UInt16 errno; 441855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#endif 442855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 443855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi /* go to the end of file*/ 444855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#ifdef M4OSA_READER_OPTIM_USE_OSAL_IF 445855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi errno = apContext->FS->getOption(apContext->aFileDesc, M4OSA_kFileReadGetFileSize, 446855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi (M4OSA_DataOption*) &apContext->fileSize); 447855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi if (M4NO_ERROR != errno) 448855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 449855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi err = errno; 450855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_TRACE1_1("M4OSA_FileReader_CalculateSize ERR = 0x%x", err); 451855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 452855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#else 453855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi ret_val = apContext->FS->pFctPtr_Seek(apContext->aFileDesc, 0, M4OSA_kFileSeekEnd, &errno); 454855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 455855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi if (ret_val != 0) 456855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 457855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi apContext->readFilePos = M4OSA_EOF; 458855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi err = M4OSA_ERR_CREATE(M4_ERR, M4OSA_FILE_READER, errno); 459855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_TRACE1_1("M4OSA_FileReader_CalculateSize ERR = 0x%x", err); 460855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 461855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi else 462855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 463855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi /* Retrieve size of the file */ 464855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi apContext->fileSize = apContext->FS->pFctPtr_Tell(apContext->aFileDesc, &errno); 465855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi apContext->readFilePos = apContext->fileSize; 466855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 467855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#endif /*M4OSA_READER_OPTIM_USE_OSAL_IF*/ 468855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 469855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi return err; 470855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi} 471855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 472855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 473855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi/* __________________________________________________________ */ 474855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi/*| |*/ 475855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi/*| OSAL filesystem API |*/ 476855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi/*|__________________________________________________________|*/ 477855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 478855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi/** 479855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi****************************************************************************** 480855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi* @brief This method opens the provided fileDescriptor and returns its context. 481855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi* @param pContext: (OUT) File reader context. 482855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi* @param pFileDescriptor : (IN) File Descriptor of the input file. 483855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi* @param FileModeAccess : (IN) File mode access. 484855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi* @return M4NO_ERROR: there is no error 485855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi* @return M4ERR_PARAMETER pContext or fileDescriptor is NULL 486855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi* @return M4ERR_ALLOC there is no more memory available 487855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi* @return M4ERR_FILE_BAD_MODE_ACCESS the file mode access is not correct (it must be either isTextMode or read) 488855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi* @return M4ERR_FILE_NOT_FOUND The file can not be opened. 489855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi****************************************************************************** 490855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi*/ 491855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#ifdef M4OSA_READER_OPTIM_USE_OSAL_IF 492855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_ERR M4OSA_fileReadOpen_optim(M4OSA_Context* pContext, 493855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_Void* pFileDescriptor, 494855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_UInt32 FileModeAccess) 495855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#else 496855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_ERR M4OSA_fileReadOpen_optim(M4OSA_Context* pContext, 497855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_Void* pFileDescriptor, 498855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_UInt32 FileModeAccess, 499855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_FileSystem_FctPtr *FS) 500855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#endif 501855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi{ 502855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_FileReader_Context_optim* apContext = M4OSA_NULL; 503855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 504855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_ERR err = M4NO_ERROR; 505855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_Void* aFileDesc = M4OSA_NULL; 506855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_Bool buffers_allocated = M4OSA_FALSE; 507855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#ifdef M4OSA_READER_OPTIM_USE_OSAL_IF 508855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_ERR errno = M4NO_ERROR; 509855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#else 510855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_UInt16 errno; 511855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#endif /*M4OSA_READER_OPTIM_USE_OSAL_IF*/ 512855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 513855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_TRACE2_3("M4OSA_fileReadOpen_optim p = 0x%p fd = %s mode = %lu", pContext, 514855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi pFileDescriptor, FileModeAccess); 515855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 516855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi /* Check input parameters */ 517855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4ERR_CHECK_NULL_RETURN_VALUE(M4ERR_PARAMETER, pContext); 518855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4ERR_CHECK_NULL_RETURN_VALUE(M4ERR_PARAMETER, pFileDescriptor); 519855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 520855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi *pContext = M4OSA_NULL; 521855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 522855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi /* Allocate memory for the File reader context. */ 523694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu apContext = (M4OSA_FileReader_Context_optim *)M4OSA_32bitAlignedMalloc(sizeof(M4OSA_FileReader_Context_optim), 524d67e9da63323d965760337913f86de28024531a4Basavapatna Dattaguru M4OSA_FILE_READER, (M4OSA_Char *)"M4OSA_FileReader_Context_optim"); 525855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 526855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4ERR_CHECK_NULL_RETURN_VALUE(M4ERR_ALLOC, apContext); 527855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 528855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi /* Set filesystem interface */ 529855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#ifdef M4OSA_READER_OPTIM_USE_OSAL_IF 530855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 531855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi /*Set the optimized functions, to be called by the user*/ 532855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 533694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu apContext->FS = (M4OSA_FileReadPointer*) M4OSA_32bitAlignedMalloc(sizeof(M4OSA_FileReadPointer), 534d67e9da63323d965760337913f86de28024531a4Basavapatna Dattaguru M4OSA_FILE_READER, (M4OSA_Char *)"M4OSA_FileReaderOptim_init"); 535855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi if (M4OSA_NULL==apContext->FS) 536855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 537d67e9da63323d965760337913f86de28024531a4Basavapatna Dattaguru M4OSA_TRACE1_0("M4OSA_FileReaderOptim_init - ERROR : allocation failed"); 538855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi return M4ERR_ALLOC; 539855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 540855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi apContext->FS->openRead = M4OSA_fileReadOpen; 541855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi apContext->FS->readData = M4OSA_fileReadData; 542855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi apContext->FS->seek = M4OSA_fileReadSeek; 543855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi apContext->FS->closeRead = M4OSA_fileReadClose; 544855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi apContext->FS->setOption = M4OSA_fileReadSetOption; 545855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi apContext->FS->getOption = M4OSA_fileReadGetOption; 546d67e9da63323d965760337913f86de28024531a4Basavapatna Dattaguru#else 547855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi apContext->FS = FS; 548855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#endif 549855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 550855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi /* Verify access mode */ 551855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi if ( ((FileModeAccess & M4OSA_kFileAppend) != 0) 552855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi || ((FileModeAccess & M4OSA_kFileRead) == 0)) 553855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 554855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi err = M4ERR_FILE_BAD_MODE_ACCESS; 555855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi goto cleanup; 556855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 557855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 558855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi /* Open file in read mode */ 559855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi if((FileModeAccess & M4OSA_kFileCreate) != 0) 560855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 561855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi err = M4ERR_FILE_BAD_MODE_ACCESS; 562855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 563855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi else 564855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 565855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi if ((FileModeAccess & M4OSA_kFileRead)) 566855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 567855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi /* File is opened in read only*/ 568855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#ifdef M4OSA_READER_OPTIM_USE_OSAL_IF 569855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi errno = apContext->FS->openRead(&aFileDesc, pFileDescriptor, FileModeAccess); 570855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 571855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi if ((aFileDesc == M4OSA_NULL)||(M4NO_ERROR != errno)) 572855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 573855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi /* converts the error to PSW format*/ 574855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi err = errno; 575855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_TRACE2_1("M4OSA_fileReadOpen_optim ERR1 = 0x%x", err); 576855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi apContext->IsOpened = M4OSA_FALSE; 577855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 578855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#else 579855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi aFileDesc = apContext->FS->pFctPtr_Open(pFileDescriptor, FileModeAccess, &errno); 580855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 581855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi if (aFileDesc == M4OSA_NULL) 582855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 583855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi /* converts the error to PSW format*/ 584855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi err = M4OSA_ERR_CREATE(M4_ERR, M4OSA_FILE_READER, errno); 585855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_TRACE2_1("M4OSA_fileReadOpen_optim ERR1 = 0x%x", err); 586855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi apContext->IsOpened = M4OSA_FALSE; 587855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 588855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#endif 589855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 590855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi else 591855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 592855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi apContext->IsOpened = M4OSA_TRUE; 593855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 594855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 595855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi else 596855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 597855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi err = M4ERR_FILE_BAD_MODE_ACCESS; 598855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 599855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 600855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 601855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi if (M4NO_ERROR != err) goto cleanup; 602855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 603855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi /* Allocate buffers */ 604855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi err = M4OSA_FileReader_BufferInit(apContext); 605855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi buffers_allocated = M4OSA_TRUE; 606855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 607855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi if (M4NO_ERROR != err) goto cleanup; 608855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 609855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi /* Initialize parameters */ 610855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi apContext->fileSize = 0; 611855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi apContext->absolutePos = 0; 612855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi apContext->readFilePos = 0; 613855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 614855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi /* Retrieve the File Descriptor*/ 615855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi apContext->aFileDesc = aFileDesc; 616855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 617855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi /* Retrieve the File mode Access */ 618855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi apContext->FileAttribute.modeAccess = (M4OSA_FileModeAccess) FileModeAccess; 619855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 620855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi /*Retrieve the File reader context */ 621855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi *pContext= (M4OSA_Context)apContext; 622855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 623855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi /* Compute file size */ 624855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi err = M4OSA_FileReader_CalculateSize(apContext); 625855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 626855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi if (M4NO_ERROR != err) goto cleanup; 627855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 628855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi return M4NO_ERROR; 629855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 630855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargicleanup: 631855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 632855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi /* free context */ 633855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi if (M4OSA_NULL != apContext) 634855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 635855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi if(buffers_allocated == M4OSA_TRUE) 636855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 637855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_FileReader_BufferFree(apContext); 638855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 639855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 640694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free( apContext); 641855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi *pContext = M4OSA_NULL; 642855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 643855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 644855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_TRACE2_1 ("M4OSA_fileReadOpen_optim: returns error 0x%0x", err) 645855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi return err; 646855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi} 647855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 648855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi/** 649855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi****************************************************************************** 650855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi* @brief This method reads the 'size' bytes in the core file reader (selected by its 'context') 651855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi* and writes the data to the 'data' pointer. If 'size' byte can not be read in the core file reader, 652855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi* 'size' parameter is updated to match the correct number of read bytes. 653855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi* @param pContext: (IN) File reader context. 654855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi* @param pData : (OUT) Data pointer of the read data. 655855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi* @param pSize : (INOUT) Size of the data to read (in byte). 656855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi* @return M4NO_ERROR: there is no error 657855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi* @return M4ERR_PARAMETER pSize, fileDescriptor or pData is NULL 658855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi* @return M4ERR_ALLOC there is no more memory available 659855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi* @return M4ERR_BAD_CONTEXT provided context is not a valid one. 660855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi****************************************************************************** 661855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi*/ 662855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray KundargiM4OSA_ERR M4OSA_fileReadData_optim(M4OSA_Context pContext,M4OSA_MemAddr8 pData, 663855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_UInt32* pSize) 664855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi{ 665855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_FileReader_Context_optim* apContext = 666855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi (M4OSA_FileReader_Context_optim*) pContext; 667855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 668855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_ERR err; 669855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_FilePosition aSize; 670855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_FilePosition copiedSize; 671855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_Int8 selected_buffer, current_buffer; 672855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 673855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_TRACE3_3("M4OSA_fileReadData_optim p = 0x%p d = 0x%p s = %lu", 674855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi pContext, pData, *pSize); 675855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 676855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi /* Check input parameters */ 677855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4ERR_CHECK_NULL_RETURN_VALUE(M4ERR_BAD_CONTEXT, apContext); 678855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4ERR_CHECK_NULL_RETURN_VALUE(M4ERR_PARAMETER, pData); 679855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4ERR_CHECK_NULL_RETURN_VALUE(M4ERR_PARAMETER, pSize); 680855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 681855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi if (apContext->IsOpened != M4OSA_TRUE) 682855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 683855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi return M4ERR_BAD_CONTEXT; 684855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 685855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 686855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi /* Prevent reading beyond EOF */ 687855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi if((*pSize > 0) && (apContext->absolutePos >= apContext->fileSize)) 688855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 689855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi copiedSize = 0; 690855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi err = M4WAR_NO_MORE_AU; 691855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi goto cleanup; 692855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 693855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 694855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi /* Check if data can be read from a buffer */ 695855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi /* If not, fill one according to quantized positions */ 696855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi copiedSize = 0; 697855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi err = M4NO_ERROR; 698855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 699855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi selected_buffer = M4OSA_FileReader_BufferMatch(apContext, apContext->absolutePos); 700855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 701855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi if(selected_buffer == M4OSA_READBUFFER_NONE) 702855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 703855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi selected_buffer = M4OSA_FileReader_BufferSelect(apContext, 0); 704855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi err = M4OSA_FileReader_BufferFill(apContext, selected_buffer, 705855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi apContext->absolutePos); 706855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 707855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 708855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi if(err != M4NO_ERROR) 709855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 710855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi if(err == M4WAR_NO_DATA_YET) 711855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 712855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi if (*pSize <= (M4OSA_UInt32)apContext->buffer[selected_buffer].size) 713855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 714855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi err = M4NO_ERROR; 715855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 716855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi else 717855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 718855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi copiedSize = (M4OSA_UInt32)apContext->buffer[selected_buffer].size; 719855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi /*copy the content into pData*/ 720855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_FileReader_BufferCopy(apContext, selected_buffer, 721855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi apContext->absolutePos, copiedSize, pData); 722855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi goto cleanup; 723855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 724855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 725855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi else 726855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 727855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi goto cleanup; 728855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 729855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 730855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 731855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_TRACE3_3("read size = %lu buffer = %d pos = %ld", *pSize, 732855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi selected_buffer, apContext->absolutePos); 733855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 734855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi /* Copy buffer into pData */ 735855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi while(((M4OSA_UInt32)copiedSize < *pSize) && (err == M4NO_ERROR)) 736855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 737855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi aSize = M4OSA_FileReader_BufferCopy(apContext, selected_buffer, 738855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi apContext->absolutePos+copiedSize, 739855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi *pSize-copiedSize, pData+copiedSize); 740855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi copiedSize += aSize; 741855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 742855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi if(aSize == 0) 743855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 744855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi err = M4WAR_NO_DATA_YET; 745855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 746855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi else 747855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 748855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi if((M4OSA_UInt32)copiedSize < *pSize) 749855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 750855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi current_buffer = selected_buffer; 751855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi selected_buffer = M4OSA_FileReader_BufferMatch(apContext, 752855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi apContext->absolutePos+copiedSize); 753855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 754855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi if(selected_buffer == M4OSA_READBUFFER_NONE) 755855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 756855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi selected_buffer = M4OSA_FileReader_BufferSelect(apContext, 757855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi current_buffer); 758855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi err = M4OSA_FileReader_BufferFill(apContext, selected_buffer, 759855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi apContext->absolutePos+copiedSize); 760855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 761855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi if(err != M4NO_ERROR) 762855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 763855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi if(err == M4WAR_NO_DATA_YET) 764855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 765855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi /*If we got all the data that we wanted, we should return no error*/ 766855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi if ((*pSize-copiedSize) <= (M4OSA_UInt32)apContext->buffer[selected_buffer].size) 767855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 768855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi err = M4NO_ERROR; 769855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 770855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi /*If we did not get enough data, we will return NO_DATA_YET*/ 771855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 772855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi /*copy the data read*/ 773855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi aSize = M4OSA_FileReader_BufferCopy(apContext, selected_buffer, 774855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi apContext->absolutePos+copiedSize, 775855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi *pSize-copiedSize, pData+copiedSize); 776855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi copiedSize += aSize; 777855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 778855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi /*we reached end of file, so stop trying to read*/ 779855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi goto cleanup; 780855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 781855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi if (err == M4WAR_NO_MORE_AU) 782855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 783855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi err = M4WAR_NO_DATA_YET; 784855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 785855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi /*copy the data read*/ 786855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi aSize = M4OSA_FileReader_BufferCopy(apContext, selected_buffer, 787855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi apContext->absolutePos+copiedSize, 788855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi *pSize-copiedSize, pData+copiedSize); 789855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi copiedSize += aSize; 790855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 791855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi /*we reached end of file, so stop trying to read*/ 792855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi goto cleanup; 793855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 794855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 795855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi else 796855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 797855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi goto cleanup; 798855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 799855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 800855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 801855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 802855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 803855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 804855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 805855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargicleanup : 806855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 807855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi /* Update the new position of the pointer */ 808855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi apContext->absolutePos = apContext->absolutePos + copiedSize; 809855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 810855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi if((err != M4NO_ERROR)&&(err!=M4WAR_NO_DATA_YET)) 811855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 812855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_TRACE2_3("M4OSA_fileReadData_optim size = %ld copied = %ld err = 0x%x", 813855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi *pSize, copiedSize, err); 814855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 815855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 816855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi /* Effective copied size must be returned */ 817855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi *pSize = copiedSize; 818855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 819855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 820855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi /* Read is done */ 821855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi return err; 822855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi} 823855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 824855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi/** 825855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi****************************************************************************** 826855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi* @brief This method seeks at the provided position in the core file reader (selected by its 'context'). 827855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi* The position is related to the seekMode parameter it can be either : 828855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi* From the beginning (position MUST be positive) : end position = position 829855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi* From the end (position MUST be negative) : end position = file size + position 830855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi* From the current position (signed offset) : end position = current position + position. 831855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi* @param pContext: (IN) File reader context. 832855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi* @param SeekMode : (IN) Seek access mode. 833855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi* @param pPosition : (IN) Position in the file. 834855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi* @return M4NO_ERROR: there is no error 835855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi* @return M4ERR_PARAMETER Seekmode or fileDescriptor is NULL 836855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi* @return M4ERR_ALLOC there is no more memory available 837855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi* @return M4ERR_BAD_CONTEXT provided context is not a valid one. 838855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi* @return M4ERR_FILE_INVALID_POSITION the position cannot be reached. 839855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi****************************************************************************** 840855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi*/ 841855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray KundargiM4OSA_ERR M4OSA_fileReadSeek_optim( M4OSA_Context pContext, M4OSA_FileSeekAccessMode SeekMode, 842855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_FilePosition* pPosition) 843855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi{ 844855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_FileReader_Context_optim* apContext = (M4OSA_FileReader_Context_optim*) pContext; 845855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_ERR err = M4NO_ERROR; 846855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_TRACE3_3("M4OSA_fileReadSeek_optim p = 0x%p mode = %d pos = %d", pContext, 847855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi SeekMode, *pPosition); 848855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 849855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi /* Check input parameters */ 850855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4ERR_CHECK_NULL_RETURN_VALUE(M4ERR_BAD_CONTEXT, apContext); 851855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4ERR_CHECK_NULL_RETURN_VALUE(M4ERR_PARAMETER, pPosition); 852855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4ERR_CHECK_NULL_RETURN_VALUE(M4ERR_PARAMETER, SeekMode); 853855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 854855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi if (apContext->IsOpened != M4OSA_TRUE) 855855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 856855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi return M4ERR_BAD_CONTEXT; /*< The context can not be correct */ 857855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 858855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 859855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi /* Go to the desired position */ 860855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi switch(SeekMode) 861855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 862855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi case M4OSA_kFileSeekBeginning : 863855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi if(*pPosition < 0) { 864855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi return M4ERR_PARAMETER; /**< Bad SeekAcess mode */ 865855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 866855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi apContext->absolutePos = *pPosition; 867855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi *pPosition = apContext->absolutePos; 868855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi break; 869855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 870855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi case M4OSA_kFileSeekEnd : 871855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi if(*pPosition > 0) { 872855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi return M4ERR_PARAMETER; /**< Bad SeekAcess mode */ 873855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 874855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi apContext->absolutePos = apContext->fileSize + *pPosition; 875855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi *pPosition = apContext->absolutePos; 876855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi break; 877855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 878855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi case M4OSA_kFileSeekCurrent : 879855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi if(((apContext->absolutePos + *pPosition) > apContext->fileSize) || 880855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi ((apContext->absolutePos + *pPosition) < 0)){ 881855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi return M4ERR_PARAMETER; /**< Bad SeekAcess mode */ 882855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 883855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi apContext->absolutePos = apContext->absolutePos + *pPosition; 884855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi *pPosition = apContext->absolutePos; 885855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi break; 886855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 887855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi default : 888855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi err = M4ERR_PARAMETER; /**< Bad SeekAcess mode */ 889855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi break; 890855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 891855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 892855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi /* Return without error */ 893855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi return err; 894855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi} 895855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 896855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi/** 897855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi****************************************************************************** 898855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi* @brief This method asks the core file reader to close the file 899855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi* (associated to the context) and also frees the context. 900855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi* @param pContext: (IN) File reader context. 901855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi* @return M4NO_ERROR: there is no error 902855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi* @return M4ERR_BAD_CONTEXT provided context is not a valid one. 903855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi****************************************************************************** 904855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi*/ 905855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray KundargiM4OSA_ERR M4OSA_fileReadClose_optim(M4OSA_Context pContext) 906855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi{ 907855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_FileReader_Context_optim* apContext = (M4OSA_FileReader_Context_optim*) pContext; 908855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 909855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_ERR err = M4NO_ERROR; 910855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#ifdef M4OSA_READER_OPTIM_USE_OSAL_IF 911855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_ERR errno = M4NO_ERROR; 912855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#else 913855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_UInt16 errno; 914855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#endif 915855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 916855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_TRACE2_1("M4OSA_fileReadClose_optim p = 0x%p", pContext ); 917855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 918855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi /* Check input parameters */ 919855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4ERR_CHECK_NULL_RETURN_VALUE(M4ERR_BAD_CONTEXT, apContext); 920855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 921855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi if (apContext->IsOpened != M4OSA_TRUE) 922855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 923855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi return M4ERR_BAD_CONTEXT; /**< The context can not be correct */ 924855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 925855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 926855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi /* buffer */ 927855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_FileReader_BufferFree(apContext); 928855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 929855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi /* Close the file */ 930855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#ifdef M4OSA_READER_OPTIM_USE_OSAL_IF 931855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi errno = apContext->FS->closeRead(apContext->aFileDesc); 932855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 933855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi if (M4NO_ERROR != errno) 934855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 935855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi /* converts the error to PSW format*/ 936855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi err = errno; 937855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_TRACE2_1("M4OSA_fileReadClose_optim ERR1 = 0x%x", err); 938855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 939855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#else 940855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi aRet_Val = apContext->FS->pFctPtr_Close(apContext->aFileDesc, &errno); 941855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 942855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi if (aRet_Val != 0) 943855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 944855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi /* converts the error to PSW format*/ 945855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi err = M4OSA_ERR_CREATE(M4_ERR, M4OSA_FILE_READER, errno); 946855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_TRACE2_1("M4OSA_fileReadClose_optim ERR1 = 0x%x", err); 947855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 948855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#endif /*M4OSA_READER_OPTIM_USE_OSAL_IF*/ 949855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 950855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi apContext->IsOpened = M4OSA_FALSE; 951855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 952855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi //>>>> GLM20090212 : set the low level function statically 953855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi if (apContext->FS != M4OSA_NULL) 954855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 955694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free( apContext->FS); 956855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 957855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi //<<<< GLM20090212 : set the low level function statically 958855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 959855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi /* Free the context */ 960694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu free(apContext); 961855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 962855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi /* Return without error */ 963855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi return err; 964855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi} 965855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 966855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi/** 967855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi****************************************************************************** 968855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi* @brief This is a dummy function required to maintain function pointer 969855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi* structure. 970855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi* @note This is a dummy function required to maintain function pointer 971855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi* structure. 972855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi* @param pContext: (IN) Execution context. 973855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi* @param OptionId : (IN) Id of the option to set. 974855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi* @param OptionValue : (IN) Value of the option. 975855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi* @return M4NO_ERROR: there is no error 976855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi****************************************************************************** 977855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi*/ 978855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray KundargiM4OSA_ERR M4OSA_fileReadSetOption_optim(M4OSA_Context pContext, 979855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_FileReadOptionID OptionID, 980855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_DataOption OptionValue) 981855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi{ 982855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_ERR err = M4NO_ERROR; 983855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi return err; 984855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi} 985855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 986855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi/** 987855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi****************************************************************************** 988855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi* @brief This method asks the core file reader to return the value associated 989855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi* with the optionID.The caller is responsible for allocating/de-allocating 990855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi* the memory of the value field. 991855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi* @note The options handled by the component depend on the implementation 992855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi* of the component. 993855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi* @param pContext: (IN) Execution context. 994855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi* @param OptionId : (IN) Id of the option to set. 995855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi* @param pOptionValue : (OUT) Value of the option. 996855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi* @return M4NO_ERROR: there is no error 997855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi* @return M4ERR_BAD_CONTEXT pContext is NULL 998855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi* @return M4ERR_BAD_OPTION_ID the option id is not valid. 999855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi* @return M4ERR_NOT_IMPLEMENTED The option is not implemented yet. 1000855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi****************************************************************************** 1001855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi*/ 1002855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray KundargiM4OSA_ERR M4OSA_fileReadGetOption_optim(M4OSA_Context pContext, 1003855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_FileReadOptionID OptionID, 1004855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_DataOption* pOptionValue) 1005855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi{ 1006855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_FileReader_Context_optim* apContext = (M4OSA_FileReader_Context_optim*) pContext; 1007855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_ERR err = M4NO_ERROR; 1008855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 1009855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi /* Check input parameters */ 1010855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4ERR_CHECK_NULL_RETURN_VALUE(M4ERR_BAD_CONTEXT, apContext); 1011855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 1012855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi if (apContext->IsOpened != M4OSA_TRUE) 1013855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 1014855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi return M4ERR_BAD_CONTEXT; /**< The context can not be correct */ 1015855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 1016855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 1017855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi /* Get the desired option if it is avalaible */ 1018855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi switch(OptionID) 1019855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 1020855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi /* Get File Size */ 1021855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi case M4OSA_kFileReadGetFileSize:/**< Get size of the file, limited to 32 bit size */ 1022855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 1023855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi (*(M4OSA_UInt32 *)pOptionValue) = apContext->fileSize; 1024855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi break; 1025855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 1026855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi /* Check End of file Occurs */ 1027855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi case M4OSA_kFileReadIsEOF : /**< See if we are at the end of the file */ 1028855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 1029855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi (*(M4OSA_Bool *)pOptionValue) = (apContext->absolutePos >= apContext->fileSize) ? M4OSA_TRUE : M4OSA_FALSE; 1030855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi break; 1031855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 1032855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi /* Get File Position */ 1033855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi case M4OSA_kFileReadGetFilePosition : /**< Get file position */ 1034855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 1035855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi *(M4OSA_FilePosition *)pOptionValue = apContext->absolutePos; 1036855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi break; 1037855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 1038855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi /* Get Attribute */ 1039855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi case M4OSA_kFileReadGetFileAttribute : /**< Get the file attribute = access mode */ 1040855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 1041855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi (*(M4OSA_FileAttribute *)pOptionValue).modeAccess = apContext->FileAttribute.modeAccess; 1042855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi break; 1043855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 1044855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi default: 1045855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi /**< Bad option ID */ 1046855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi err = M4ERR_BAD_OPTION_ID; 1047855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi break; 1048855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 1049855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 1050855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi /*Return without error */ 1051855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi return err; 1052855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi} 1053