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 * @file M4OSA_FileReader.c 19855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @author Cedric Lecoutre (cedric.lecoutre@philips.com) 20855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * Laurent Fay (laurent.fay@philips.com) 21855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @par Org: Philips Digital Systems Laboratories - Paris (PDSL-P) 22855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @brief File reader for Android 23855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @note This file implements functions to read a file. 24855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi ************************************************************************ 25855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi*/ 26855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 27855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 28855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#include "M4OSA_Debug.h" 29855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#include "M4OSA_FileCommon_priv.h" 30855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#include "M4OSA_FileReader.h" 31855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#include "M4OSA_FileReader_priv.h" 32855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#include "M4OSA_Memory.h" 33855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 34855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#ifdef M4OSA_FILE_BLOCK_WITH_SEMAPHORE 35855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#include "M4OSA_Semaphore.h" 36855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#endif /* M4OSA_FILE_BLOCK_WITH_SEMAPHORE */ 37855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 38855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 39855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi/** 40855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi************************************************************************ 41855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi* @brief This function opens the provided URL and returns its context. 42855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi* If an error occured, the context is set to NULL. 43855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi* @param context: (OUT) Context of the core file reader 44855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi* @param url: (IN) URL of the input file 45855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi* @param fileModeAccess: (IN) File mode access 46855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi* @return M4NO_ERROR: there is no error 47855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi* @return M4ERR_PARAMETER: at least one parameter is NULL 48855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi* @return M4ERR_ALLOC: there is no more memory available 49855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi* @return M4ERR_NOT_IMPLEMENTED: the URL does not match with the supported 50855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi* file 51855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi* @return M4ERR_FILE_NOT_FOUND: the file cannot be found 52855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi* @return M4ERR_FILE_LOCKED: the file is locked by an other 53855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi* application/process 54855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi* @return M4ERR_FILE_BAD_MODE_ACCESS: the file mode access is not correct 55855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi************************************************************************ 56855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi*/ 57855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray KundargiM4OSA_ERR M4OSA_fileReadOpen(M4OSA_Context* pContext, M4OSA_Void* pFileDescriptor, 58855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_UInt32 fileModeAccess) 59855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi{ 60855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_TRACE1_3("M4OSA_fileReadOpen : pC = 0x%p fd = 0x%p mode = %lu", 61855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi pContext, pFileDescriptor, fileModeAccess); 62855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 63855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi return M4OSA_fileCommonOpen(M4OSA_FILE_READER, pContext, 64855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi pFileDescriptor, fileModeAccess); 65855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi} 66855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 67855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi/** 68855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi************************************************************************ 69855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi* @brief This function reads the 'size' bytes in the core file reader 70855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi* (selected by its 'context') and writes the data to the 'data' 71855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi* pointer. 72855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi* @note If 'size' byte cannot be read in the core file reader, 'size' 73855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi* parameter is updated to match the correct 74855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi* @note number of read bytes. 75855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi* @param context: (IN/OUT) Context of the core file reader 76855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi* @param buffer: (OUT) Data pointer of the read data 77855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi* @param size: (IN/OUT) Size of the data to read (in bytes) 78855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi* @return M4NO_ERROR: there is no error 79855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi* @return M4ERR_PARAMETER: at least one parameter is NULL 80855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi* @return M4ERR_BAD_CONTEXT: provided context is not a valid one 81855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi* @return M4ERR_ALLOC: there is no more memory available 82855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi* @return M4WAR_NO_DATA_YET: there is no enough data to fill the 'data' 83855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi* buffer, so the size parameter has been updated. 84855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi************************************************************************ 85855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi*/ 86855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray KundargiM4OSA_ERR M4OSA_fileReadData(M4OSA_Context pContext, M4OSA_MemAddr8 data, 87855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_UInt32* pSize) 88855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi{ 89855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_FileContext* pFileContext = pContext; 90855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_ERR err = M4NO_ERROR; 91855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_Int32 uiSizeRead; 92855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 93855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_TRACE2_2("M4OSA_fileReadData : data = 0x%p size = %lu", 94855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi data, (M4OSA_NULL != pSize) ? (*pSize) : 0); 95855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 96855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_DEBUG_IF2(M4OSA_NULL == pContext, M4ERR_PARAMETER, 97855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi "M4OSA_fileReadData: pContext is M4OSA_NULL"); 98855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_DEBUG_IF2(M4OSA_NULL == data, M4ERR_PARAMETER, 99855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi "M4OSA_fileReadData: data is M4OSA_NULL"); 100855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_DEBUG_IF2(M4OSA_NULL == pSize, M4ERR_PARAMETER, 101855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi "M4OSA_fileReadData: pSize is M4OSA_NULL"); 102855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#ifdef M4OSA_FILE_BLOCK_WITH_SEMAPHORE 103855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_DEBUG_IF2(M4OSA_NULL == pFileContext->semaphore_context, 104855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4ERR_BAD_CONTEXT, "M4OSA_fileReadData: semaphore_context is M4OSA_NULL"); 105855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#endif /* M4OSA_FILE_BLOCK_WITH_SEMAPHORE */ 106855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 107855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi if(M4OSA_kDescRWAccess == pFileContext->m_DescrModeAccess) /* read write */ 108855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 109855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi uiSizeRead = fread(data, sizeof(M4OSA_Char), *pSize, 110855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi pFileContext->file_desc); 111855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi if(-1 == uiSizeRead) 112855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 113855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi /* handle is invalid, or the file is not open for reading, or the file is locked */ 114855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi *pSize = 0; 115855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi err = M4ERR_BAD_CONTEXT; 116855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 117855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi else 118855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 119aa382f3637a68361989d5b70e3184bddcc472d3dhongteng pFileContext->read_position = pFileContext->read_position + uiSizeRead; 120855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi if ((M4OSA_UInt32)uiSizeRead < *pSize) 121855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 122855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi *pSize = uiSizeRead; 123855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi /* This is the end of file */ 124855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi pFileContext->b_is_end_of_file = M4OSA_TRUE; 125855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi err = M4WAR_NO_DATA_YET; 126855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 127855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi else 128855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 129855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi *pSize = uiSizeRead; 130855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 131855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 132855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 133855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi return err; 134855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 135855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 136855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#ifdef M4OSA_FILE_BLOCK_WITH_SEMAPHORE 137855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_semaphoreWait(pFileContext->semaphore_context, M4OSA_WAIT_FOREVER); 138855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#endif /* M4OSA_FILE_BLOCK_WITH_SEMAPHORE */ 139855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 140855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi if(pFileContext->current_seek != SeekRead) 141855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 142855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi /* fseek to the last read position */ 143855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi err = M4OSA_fileCommonSeek(pContext, M4OSA_kFileSeekBeginning, 144855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi &(pFileContext->read_position)); 145855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi if(M4OSA_ERR_IS_ERROR(err)) 146855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 147855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_DEBUG(err, "M4OSA_fileReadData: M4OSA_fileCommonSeek"); 148855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 149855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#ifdef M4OSA_FILE_BLOCK_WITH_SEMAPHORE 150855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_semaphorePost(pFileContext->semaphore_context); 151855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#endif /* M4OSA_FILE_BLOCK_WITH_SEMAPHORE */ 152855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 153855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi return err; 154855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 155855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 156855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi pFileContext->current_seek = SeekRead; 157855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 158855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 159855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi /* Read data */ 160855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi uiSizeRead = fread(data, sizeof(M4OSA_Char), *pSize, 161855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi pFileContext->file_desc); 162855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi if(-1 == uiSizeRead) 163855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 164855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi /* handle is invalid, or the file is not open for reading, 165855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi or the file is locked */ 166855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi *pSize = 0; 167855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi err = M4ERR_BAD_CONTEXT; 168855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 169855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi else 170855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 171aa382f3637a68361989d5b70e3184bddcc472d3dhongteng pFileContext->read_position = pFileContext->read_position + uiSizeRead; 172855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi if ((M4OSA_UInt32)uiSizeRead < *pSize) 173855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 174855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi *pSize = uiSizeRead; 175855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 176855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi /* This is the end of file */ 177855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi pFileContext->b_is_end_of_file = M4OSA_TRUE; 178855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 179855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi err = M4WAR_NO_DATA_YET; 180855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 181855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi else 182855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 183855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi *pSize = uiSizeRead; 184855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 185855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 186855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 187855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#ifdef M4OSA_FILE_BLOCK_WITH_SEMAPHORE 188855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_semaphorePost(pFileContext->semaphore_context); 189855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#endif /* M4OSA_FILE_BLOCK_WITH_SEMAPHORE */ 190855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 191855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 192855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi return err; 193855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi} 194855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 195855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 196855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi/** 197855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi************************************************************************ 198855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @brief This function seeks at the provided position in the core file 199855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * reader (selected by its 'context'). The position is related to 200855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * the seekMode parameter it can be either from the beginning, from 201855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * the end or from the current postion. To support large file 202855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * access (more than 2GBytes), the position is provided on a 64 203855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * bits. 204855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @note If this function returns an error the current position pointer 205855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * in the file must not change. Else the current 206855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * position pointer must be updated. 207855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @param context: (IN/OUT) Context of the core file reader 208855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @param seekMode: (IN) Seek access mode 209855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @param position: (IN/OUT) Position in the file 210855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @return M4NO_ERROR: there is no error 211855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @return M4ERR_PARAMETER: at least one parameter is NULL 212855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @return M4ERR_BAD_CONTEXT: provided context is not a valid one 213855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @return M4ERR_ALLOC: there is no more memory available 214855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @return M4ERR_FILE_INVALID_POSITION: the position cannot be reached 215855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi ************************************************************************ 216855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi*/ 217855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 218855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray KundargiM4OSA_ERR M4OSA_fileReadSeek(M4OSA_Context pContext, M4OSA_FileSeekAccessMode seekMode, 219855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_FilePosition* pPosition) 220855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi{ 221855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_FileContext* pFileContext = (M4OSA_FileContext*)pContext; 222855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_ERR err; 223855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 224855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_TRACE2_2("M4OSA_fileReadSeek : mode = %d pos = %lu", seekMode, 225855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi (pPosition != M4OSA_NULL) ? (*pPosition) : 0); 226855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 227855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_DEBUG_IF2(M4OSA_NULL == pContext, M4ERR_PARAMETER, 228855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi "M4OSA_fileReadSeek: pContext is M4OSA_NULL"); 229855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_DEBUG_IF2(0 == seekMode, M4ERR_PARAMETER, 230855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi "M4OSA_fileReadSeek: seekMode is 0"); 231855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_DEBUG_IF2(M4OSA_NULL == pPosition, M4ERR_PARAMETER, 232855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi "M4OSA_fileReadSeek: pPosition is M4OSA_NULL"); 233855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#ifdef M4OSA_FILE_BLOCK_WITH_SEMAPHORE 234855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_DEBUG_IF2(M4OSA_NULL == pFileContext->semaphore_context, 235855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4ERR_BAD_CONTEXT, "M4OSA_fileReadSeek: semaphore_context is M4OSA_NULL"); 236855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#endif /* M4OSA_FILE_BLOCK_WITH_SEMAPHORE */ 237855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 238855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi if (M4OSA_kDescRWAccess == pFileContext->m_DescrModeAccess) 239855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 240855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_UInt32 SeekModeOption; 241855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi /* Go to the desired position */ 242855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi if (M4OSA_kFileSeekBeginning == seekMode) 243855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 244855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi SeekModeOption = SEEK_SET; 245855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 246855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi else if (M4OSA_kFileSeekEnd == seekMode) 247855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 248855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi SeekModeOption = SEEK_END; 249855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 250855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi else if (M4OSA_kFileSeekCurrent == seekMode) 251855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 252855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi SeekModeOption = SEEK_CUR; 253855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 254855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi else 255855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 256855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_TRACE1_0("M4OSA_fileReadSeek: END WITH ERROR !!! (CONVERION ERROR FOR THE SEEK MODE)"); 257855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi return M4ERR_PARAMETER; 258855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 259855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 260855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi /** 261855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * Go to the desired position */ 262855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi err = fseek(pFileContext->file_desc, *pPosition, SeekModeOption); 263855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi if(err != 0) 264855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 265855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi /* converts the error to PSW format*/ 266855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi err=((M4OSA_UInt32)(M4_ERR)<<30)+(((M4OSA_FILE_WRITER)&0x003FFF)<<16)+(M4OSA_Int16)(err); 267855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_TRACE1_1("M4OSA_FileReadSeek error:%x",err); 268855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 269855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi else 270855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 271855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi return M4NO_ERROR; 272855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 273855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 274855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi /* Return without error */ 275855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi return err; 276855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 277855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 278855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 279855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#ifdef M4OSA_FILE_BLOCK_WITH_SEMAPHORE 280855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_semaphoreWait(pFileContext->semaphore_context, M4OSA_WAIT_FOREVER); 281855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#endif /* M4OSA_FILE_BLOCK_WITH_SEMAPHORE */ 282855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 283855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi if(pFileContext->current_seek != SeekRead) 284855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 285855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 286855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi /* fseek to the last read position */ 287855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi err = M4OSA_fileCommonSeek(pContext, M4OSA_kFileSeekBeginning, 288855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi &(pFileContext->read_position)); 289855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi if(M4OSA_ERR_IS_ERROR(err)) 290855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 291855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_DEBUG(err, "M4OSA_fileReadData: M4OSA_fileCommonSeek"); 292855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 293855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#ifdef M4OSA_FILE_BLOCK_WITH_SEMAPHORE 294855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_semaphorePost(pFileContext->semaphore_context); 295855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#endif /* M4OSA_FILE_BLOCK_WITH_SEMAPHORE */ 296855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 297855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi return err; 298855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 299855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 300855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi pFileContext->current_seek = SeekRead; 301855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 302855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 303855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi err = M4OSA_fileCommonSeek(pContext, seekMode, pPosition); 304855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi if(M4OSA_ERR_IS_ERROR(err)) 305855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 306855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_DEBUG(err, "M4OSA_fileReadData: M4OSA_fileCommonSeek"); 307855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 308855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi else 309855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 310aa382f3637a68361989d5b70e3184bddcc472d3dhongteng pFileContext->read_position = *pPosition; 311855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 312855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 313855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#ifdef M4OSA_FILE_BLOCK_WITH_SEMAPHORE 314855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_semaphorePost(pFileContext->semaphore_context); 315855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#endif /* M4OSA_FILE_BLOCK_WITH_SEMAPHORE */ 316855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 317855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi return err; 318855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi} 319855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 320855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 321855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi/** 322855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi ************************************************************************ 323855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @brief This function asks the core file reader to close the file 324855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * (associated to the context). 325855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @note The context of the core file reader is freed. 326855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @param pContext: (IN/OUT) Context of the core file reader 327855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @return M4NO_ERROR: there is no error 328855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @return M4ERR_PARAMETER: at least one parameter is NULL 329855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @return M4ERR_BAD_CONTEXT: provided context is not a valid one 330855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @return M4ERR_ALLOC: there is no more memory available 331855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi ************************************************************************ 332855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi*/ 333855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray KundargiM4OSA_ERR M4OSA_fileReadClose(M4OSA_Context pContext) 334855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi{ 335855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_FileContext* pFileContext = (M4OSA_FileContext*)pContext; 336855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 337855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_TRACE1_1("M4OSA_fileReadClose : pC = 0x%p", pContext); 338855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 339855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_DEBUG_IF2(M4OSA_NULL == pContext, M4ERR_PARAMETER, 340855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi "M4OSA_fileReadClose: pContext is M4OSA_NULL"); 341855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 342855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi if(M4OSA_FILE_WRITER == pFileContext->coreID_write) 343855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 344855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi return M4NO_ERROR; 345855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 346855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 347855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi return M4OSA_fileCommonClose(M4OSA_FILE_READER, pContext); 348855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi} 349855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 350855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 351855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 352855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 353855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi/** 354855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi ************************************************************************ 355855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @brief This function asks the core file reader to return the value 356855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * associated with the optionID. The caller is responsible for 357855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * allocating/de-allocating the memory of the value field. 358855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @note 'value' must be cast according to the type related to the 359855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * optionID As the caller is responsible for 360855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * allocating/de-allocating the 'value' field, the callee must copy 361855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * this field to its internal variable. 362855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @param pContext: (IN/OUT) Context of the core file reader 363855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @param pOptionID: (IN) ID of the option 364855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @param pOptionValue: (OUT) Value of the option 365855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @return M4NO_ERROR: there is no error 366855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @return M4ERR_PARAMETER: at least one parameter is NULL 367855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @return M4ERR_BAD_CONTEXT: provided context is not a valid one 368855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @return M4ERR_BAD_OPTION_ID: the optionID is not a valid one 369855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @return M4ERR_WRITE_ONLY: this option is a write only one 370855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @return M4ERR_NOT_IMPLEMENTED: this option is not implemented 371855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi ************************************************************************ 372855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi*/ 373855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray KundargiM4OSA_ERR M4OSA_fileReadGetOption(M4OSA_Context pContext, M4OSA_FileReadOptionID optionID, 374855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_DataOption* pOptionValue) 375855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi{ 376855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_FileContext* pFileContext = pContext; 377855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 378855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_TRACE2_1("M4OSA_fileReadGetOption : option = 0x%x", optionID); 379855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 380855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_DEBUG_IF2(M4OSA_NULL == pContext, M4ERR_PARAMETER, 381855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi "M4OSA_fileReadGetOption: pContext is M4OSA_NULL"); 382855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_DEBUG_IF2(optionID == 0, M4ERR_PARAMETER, 383855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi "M4OSA_fileReadGetOption: optionID is 0"); 384855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_DEBUG_IF2(M4OSA_NULL == pOptionValue, M4ERR_PARAMETER, 385855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi "M4OSA_fileReadGetOption: pOptionValue is M4OSA_NULL"); 386855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 387855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_DEBUG_IF2(!M4OSA_OPTION_ID_IS_COREID(optionID, M4OSA_FILE_READER), 388855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4ERR_BAD_OPTION_ID, "M4OSA_fileReadGetOption"); 389855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_DEBUG_IF2(!M4OSA_OPTION_ID_IS_READABLE(optionID), 390855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4ERR_WRITE_ONLY, "M4OSA_fileReadGetOption"); 391855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#ifdef M4OSA_FILE_BLOCK_WITH_SEMAPHORE 392855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_DEBUG_IF2(M4OSA_NULL == pFileContext->semaphore_context, 393855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4ERR_BAD_CONTEXT, 394855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi "M4OSA_fileReadGetOption: semaphore_context is M4OSA_NULL"); 395855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#endif /* M4OSA_FILE_BLOCK_WITH_SEMAPHORE */ 396855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 397855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi switch(optionID) 398855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 399855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#if(M4OSA_OPTIONID_FILE_READ_GET_FILE_POSITION == M4OSA_TRUE) 400855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi case M4OSA_kFileReadGetFilePosition: 401855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 402855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_FilePosition* pPosition = (M4OSA_FilePosition*)pOptionValue; 403855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 404855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#ifdef M4OSA_FILE_BLOCK_WITH_SEMAPHORE 405855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_semaphoreWait(pFileContext->semaphore_context, M4OSA_WAIT_FOREVER); 406855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#endif /* M4OSA_FILE_BLOCK_WITH_SEMAPHORE */ 407855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 408855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi *pPosition = pFileContext->read_position; 409855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 410855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#ifdef M4OSA_FILE_BLOCK_WITH_SEMAPHORE 411855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_semaphorePost(pFileContext->semaphore_context); 412855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#endif /* M4OSA_FILE_BLOCK_WITH_SEMAPHORE */ 413855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 414855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi return M4NO_ERROR; 415855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 416855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#endif /*M4OSA_OPTIONID_FILE_READ_GET_FILE_POSITION*/ 417855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 418855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#if(M4OSA_OPTIONID_FILE_READ_IS_EOF == M4OSA_TRUE) 419855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi case M4OSA_kFileReadIsEOF: 420855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 421855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_Bool* bIsEndOfFile = (M4OSA_Bool*)pOptionValue; 422855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 423855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#ifdef M4OSA_FILE_BLOCK_WITH_SEMAPHORE 424855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_semaphoreWait(pFileContext->semaphore_context, M4OSA_WAIT_FOREVER); 425855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#endif /* M4OSA_FILE_BLOCK_WITH_SEMAPHORE */ 426855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 427855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi *bIsEndOfFile = pFileContext->b_is_end_of_file; 428855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 429855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#ifdef M4OSA_FILE_BLOCK_WITH_SEMAPHORE 430855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_semaphorePost(pFileContext->semaphore_context); 431855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#endif /* M4OSA_FILE_BLOCK_WITH_SEMAPHORE */ 432855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 433855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi return M4NO_ERROR; 434855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 435855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#endif /*M4OSA_OPTIONID_FILE_READ_IS_EOF*/ 436855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 437855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 438855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#if(M4OSA_OPTIONID_FILE_READ_GET_FILE_SIZE == M4OSA_TRUE) 439855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi case M4OSA_kFileReadGetFileSize: 440855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 441855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_FilePosition* pPosition = (M4OSA_FilePosition*)pOptionValue; 442855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_Int32 iSavePos = 0; 443855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_Int32 iSize = 0; 444855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 445855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#ifdef M4OSA_FILE_BLOCK_WITH_SEMAPHORE 446855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_semaphoreWait(pFileContext->semaphore_context, M4OSA_WAIT_FOREVER); 447855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#endif /* M4OSA_FILE_BLOCK_WITH_SEMAPHORE */ 448855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi /** 449855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * Bugfix: update the file size. 450855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * When a file is in read mode, may be another application is writing in. 451855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * So, we have to update the file size */ 452855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi iSavePos = ftell(pFileContext->file_desc); /*1- Check the first position */ 453855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi fseek(pFileContext->file_desc, 0, SEEK_END); /*2- Go to the end of the file */ 454855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi iSize = ftell(pFileContext->file_desc); /*3- Check the file size*/ 455855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi fseek(pFileContext->file_desc, iSavePos, SEEK_SET); /*4- go to the first position*/ 456855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi pFileContext->file_size = iSize; 457855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 458855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi *pPosition = pFileContext->file_size; 459855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 460855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#ifdef M4OSA_FILE_BLOCK_WITH_SEMAPHORE 461855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_semaphorePost(pFileContext->semaphore_context); 462855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#endif /* M4OSA_FILE_BLOCK_WITH_SEMAPHORE */ 463855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 464855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi return M4NO_ERROR; 465855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 466855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#endif /*M4OSA_OPTIONID_FILE_READ_GET_FILE_SIZE*/ 467855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 468855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#if(M4OSA_OPTIONID_FILE_READ_GET_FILE_ATTRIBUTE == M4OSA_TRUE) 469855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi case M4OSA_kFileReadGetFileAttribute: 470855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 471855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi return M4OSA_fileCommonGetAttribute(pContext, 472855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi (M4OSA_FileAttribute*)pOptionValue); 473855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 474855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#endif /*M4OSA_OPTIONID_FILE_READ_GET_FILE_ATTRIBUTE*/ 475855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 476855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#if(M4OSA_OPTIONID_FILE_READ_GET_URL == M4OSA_TRUE) 477855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi case M4OSA_kFileReadGetURL: 478855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 479855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi return M4OSA_fileCommonGetURL(pContext, (M4OSA_Char**)pOptionValue); 480855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 481855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#endif /*M4OSA_OPTIONID_FILE_READ_GET_URL*/ 482855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 483855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi case M4OSA_kFileReadLockMode: 484855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 485855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi *(M4OSA_UInt32*)pOptionValue = pFileContext->m_uiLockMode; 486855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi return M4NO_ERROR; 487855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 488855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 489855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 490855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_DEBUG(M4ERR_NOT_IMPLEMENTED, "M4OSA_fileReadGetOption"); 491855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 492855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi return M4ERR_NOT_IMPLEMENTED; 493855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi} 494855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 495855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi/** 496855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi ************************************************************************ 497855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @fn M4OSA_ERR M4OSA_fileReadSetOption (M4OSA_Context context, 498855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * M4OSA_OptionID optionID, M4OSA_DataOption optionValue)) 499855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @brief This function asks the core file reader to set the value associated with the optionID. 500855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * The caller is responsible for allocating/de-allocating the memory of the value field. 501855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @note As the caller is responsible for allocating/de-allocating the 'value' field, the callee must copy this field 502855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * to its internal variable. 503855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @param pContext: (IN/OUT) Context of the core file reader 504855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @param optionID: (IN) ID of the option 505855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @param value: (IN) Value of the option 506855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @return M4NO_ERROR: there is no error 507855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @return M4ERR_PARAMETER: at least one parameter is NULL 508855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @return M4ERR_BAD_CONTEXT: provided context is not a valid one 509855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @return M4ERR_BAD_OPTION_ID: the optionID is not a valid one 510855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @return M4ERR_READ_ONLY: this option is a read only one 511855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @return M4ERR_NOT_IMPLEMENTED: this option is not implemented 512855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi ************************************************************************ 513855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi*/ 514855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray KundargiM4OSA_ERR M4OSA_fileReadSetOption(M4OSA_Context pContext, 515855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_FileReadOptionID optionID, 516855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_DataOption optionValue) 517855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi{ 518855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_FileContext* pFileContext = pContext; 519855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 520855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_TRACE2_1("M4OSA_fileReadSetOption : option = 0x%x", optionID); 521855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 522855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_DEBUG_IF2(M4OSA_NULL == pContext, M4ERR_PARAMETER, 523855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi "M4OSA_fileReadSetOption: pContext is M4OSA_NULL"); 524855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_DEBUG_IF2(0 == optionID, M4ERR_PARAMETER, 525855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi "M4OSA_fileReadSetOption"); 526855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_DEBUG_IF2(!M4OSA_OPTION_ID_IS_COREID(optionID, M4OSA_FILE_READER), 527855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4ERR_BAD_OPTION_ID, "M4OSA_fileReadSetOption"); 528855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 529855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_DEBUG_IF2(!M4OSA_OPTION_ID_IS_WRITABLE(optionID), 530855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4ERR_READ_ONLY, "M4OSA_fileReadSetOption"); 531855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#ifdef M4OSA_FILE_BLOCK_WITH_SEMAPHORE 532855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_DEBUG_IF2(M4OSA_NULL == pFileContext->semaphore_context, 533855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4ERR_BAD_CONTEXT, 534855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi "M4OSA_fileReadSetOption: semaphore_context is M4OSA_NULL"); 535855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#endif /* M4OSA_FILE_BLOCK_WITH_SEMAPHORE */ 536855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 537855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi switch(optionID) 538855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 539855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi case M4OSA_kFileReadLockMode: 540855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 541855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi pFileContext->m_uiLockMode= (M4OSA_UInt32)*(M4OSA_UInt32*)optionValue; 542855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi return M4NO_ERROR; 543855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 544855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi default: 545855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_DEBUG(M4ERR_NOT_IMPLEMENTED, "M4OSA_fileReadSetOption"); 546855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi return M4ERR_NOT_IMPLEMENTED; 547855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 548855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi} 549855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 550