19584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi/* 29584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi * Copyright (C) 2011 The Android Open Source Project 39584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi * 49584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi * Licensed under the Apache License, Version 2.0 (the "License"); 59584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi * you may not use this file except in compliance with the License. 69584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi * You may obtain a copy of the License at 79584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi * 89584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi * http://www.apache.org/licenses/LICENSE-2.0 99584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi * 109584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi * Unless required by applicable law or agreed to in writing, software 119584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi * distributed under the License is distributed on an "AS IS" BASIS, 129584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi * See the License for the specific language governing permissions and 149584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi * limitations under the License. 159584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi */ 169584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi/** 179584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi************************************************************************ 189584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi * @file M4OSA_FileReader.c 199584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi * @author Cedric Lecoutre (cedric.lecoutre@philips.com) 209584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi * Laurent Fay (laurent.fay@philips.com) 219584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi * @par Org: Philips Digital Systems Laboratories - Paris (PDSL-P) 229584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi * @brief File reader for Android 239584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi * @note This file implements functions to read a file. 249584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi ************************************************************************ 259584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi*/ 269584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi 279584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi 289584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi#include "M4OSA_Debug.h" 299584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi#include "M4OSA_FileCommon_priv.h" 309584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi#include "M4OSA_FileReader.h" 319584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi#include "M4OSA_FileReader_priv.h" 329584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi#include "M4OSA_Memory.h" 339584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi 349584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi#ifdef M4OSA_FILE_BLOCK_WITH_SEMAPHORE 359584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi#include "M4OSA_Semaphore.h" 369584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi#endif /* M4OSA_FILE_BLOCK_WITH_SEMAPHORE */ 379584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi 389584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi 399584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi/** 409584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi************************************************************************ 419584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi* @brief This function opens the provided URL and returns its context. 429584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi* If an error occured, the context is set to NULL. 439584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi* @param context: (OUT) Context of the core file reader 449584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi* @param url: (IN) URL of the input file 459584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi* @param fileModeAccess: (IN) File mode access 469584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi* @return M4NO_ERROR: there is no error 479584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi* @return M4ERR_PARAMETER: at least one parameter is NULL 489584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi* @return M4ERR_ALLOC: there is no more memory available 499584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi* @return M4ERR_NOT_IMPLEMENTED: the URL does not match with the supported 509584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi* file 519584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi* @return M4ERR_FILE_NOT_FOUND: the file cannot be found 529584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi* @return M4ERR_FILE_LOCKED: the file is locked by an other 539584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi* application/process 549584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi* @return M4ERR_FILE_BAD_MODE_ACCESS: the file mode access is not correct 559584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi************************************************************************ 569584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi*/ 579584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray KundargiM4OSA_ERR M4OSA_fileReadOpen(M4OSA_Context* pContext, M4OSA_Void* pFileDescriptor, 589584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi M4OSA_UInt32 fileModeAccess) 599584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi{ 609584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi M4OSA_TRACE1_3("M4OSA_fileReadOpen : pC = 0x%p fd = 0x%p mode = %lu", 619584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi pContext, pFileDescriptor, fileModeAccess); 629584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi 639584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi return M4OSA_fileCommonOpen(M4OSA_FILE_READER, pContext, 649584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi pFileDescriptor, fileModeAccess); 659584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi} 669584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi 679584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi/** 689584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi************************************************************************ 699584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi* @brief This function reads the 'size' bytes in the core file reader 709584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi* (selected by its 'context') and writes the data to the 'data' 719584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi* pointer. 729584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi* @note If 'size' byte cannot be read in the core file reader, 'size' 739584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi* parameter is updated to match the correct 749584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi* @note number of read bytes. 759584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi* @param context: (IN/OUT) Context of the core file reader 769584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi* @param buffer: (OUT) Data pointer of the read data 779584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi* @param size: (IN/OUT) Size of the data to read (in bytes) 789584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi* @return M4NO_ERROR: there is no error 799584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi* @return M4ERR_PARAMETER: at least one parameter is NULL 809584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi* @return M4ERR_BAD_CONTEXT: provided context is not a valid one 819584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi* @return M4ERR_ALLOC: there is no more memory available 829584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi* @return M4WAR_NO_DATA_YET: there is no enough data to fill the 'data' 839584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi* buffer, so the size parameter has been updated. 849584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi************************************************************************ 859584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi*/ 869584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray KundargiM4OSA_ERR M4OSA_fileReadData(M4OSA_Context pContext, M4OSA_MemAddr8 data, 879584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi M4OSA_UInt32* pSize) 889584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi{ 899584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi M4OSA_FileContext* pFileContext = pContext; 909584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi M4OSA_ERR err = M4NO_ERROR; 919584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi M4OSA_Int32 uiSizeRead; 929584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi 939584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi M4OSA_TRACE2_2("M4OSA_fileReadData : data = 0x%p size = %lu", 949584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi data, (M4OSA_NULL != pSize) ? (*pSize) : 0); 959584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi 969584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi M4OSA_DEBUG_IF2(M4OSA_NULL == pContext, M4ERR_PARAMETER, 979584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi "M4OSA_fileReadData: pContext is M4OSA_NULL"); 989584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi M4OSA_DEBUG_IF2(M4OSA_NULL == data, M4ERR_PARAMETER, 999584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi "M4OSA_fileReadData: data is M4OSA_NULL"); 1009584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi M4OSA_DEBUG_IF2(M4OSA_NULL == pSize, M4ERR_PARAMETER, 1019584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi "M4OSA_fileReadData: pSize is M4OSA_NULL"); 1029584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi#ifdef M4OSA_FILE_BLOCK_WITH_SEMAPHORE 1039584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi M4OSA_DEBUG_IF2(M4OSA_NULL == pFileContext->semaphore_context, 1049584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi M4ERR_BAD_CONTEXT, "M4OSA_fileReadData: semaphore_context is M4OSA_NULL"); 1059584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi#endif /* M4OSA_FILE_BLOCK_WITH_SEMAPHORE */ 1069584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi 1079584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi if(M4OSA_kDescRWAccess == pFileContext->m_DescrModeAccess) /* read write */ 1089584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi { 1099584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi uiSizeRead = fread(data, sizeof(M4OSA_Char), *pSize, 1109584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi pFileContext->file_desc); 1119584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi if(-1 == uiSizeRead) 1129584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi { 1139584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi /* handle is invalid, or the file is not open for reading, or the file is locked */ 1149584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi *pSize = 0; 1159584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi err = M4ERR_BAD_CONTEXT; 1169584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi } 1179584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi else 1189584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi { 119c5dac4d3fa18a3497242669b823f78a7e48e4e39hongteng pFileContext->read_position = pFileContext->read_position + uiSizeRead; 1209584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi if ((M4OSA_UInt32)uiSizeRead < *pSize) 1219584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi { 1229584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi *pSize = uiSizeRead; 1239584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi /* This is the end of file */ 1249584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi pFileContext->b_is_end_of_file = M4OSA_TRUE; 1259584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi err = M4WAR_NO_DATA_YET; 1269584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi } 1279584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi else 1289584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi { 1299584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi *pSize = uiSizeRead; 1309584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi } 1319584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi } 1329584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi 1339584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi return err; 1349584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi } 1359584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi 1369584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi#ifdef M4OSA_FILE_BLOCK_WITH_SEMAPHORE 1379584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi M4OSA_semaphoreWait(pFileContext->semaphore_context, M4OSA_WAIT_FOREVER); 1389584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi#endif /* M4OSA_FILE_BLOCK_WITH_SEMAPHORE */ 1399584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi 1409584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi if(pFileContext->current_seek != SeekRead) 1419584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi { 1429584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi /* fseek to the last read position */ 1439584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi err = M4OSA_fileCommonSeek(pContext, M4OSA_kFileSeekBeginning, 1449584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi &(pFileContext->read_position)); 1459584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi if(M4OSA_ERR_IS_ERROR(err)) 1469584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi { 1479584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi M4OSA_DEBUG(err, "M4OSA_fileReadData: M4OSA_fileCommonSeek"); 1489584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi 1499584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi#ifdef M4OSA_FILE_BLOCK_WITH_SEMAPHORE 1509584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi M4OSA_semaphorePost(pFileContext->semaphore_context); 1519584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi#endif /* M4OSA_FILE_BLOCK_WITH_SEMAPHORE */ 1529584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi 1539584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi return err; 1549584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi } 1559584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi 1569584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi pFileContext->current_seek = SeekRead; 1579584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi } 1589584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi 1599584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi /* Read data */ 1609584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi uiSizeRead = fread(data, sizeof(M4OSA_Char), *pSize, 1619584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi pFileContext->file_desc); 1629584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi if(-1 == uiSizeRead) 1639584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi { 1649584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi /* handle is invalid, or the file is not open for reading, 1659584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi or the file is locked */ 1669584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi *pSize = 0; 1679584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi err = M4ERR_BAD_CONTEXT; 1689584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi } 1699584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi else 1709584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi { 171c5dac4d3fa18a3497242669b823f78a7e48e4e39hongteng pFileContext->read_position = pFileContext->read_position + uiSizeRead; 1729584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi if ((M4OSA_UInt32)uiSizeRead < *pSize) 1739584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi { 1749584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi *pSize = uiSizeRead; 1759584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi 1769584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi /* This is the end of file */ 1779584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi pFileContext->b_is_end_of_file = M4OSA_TRUE; 1789584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi 1799584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi err = M4WAR_NO_DATA_YET; 1809584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi } 1819584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi else 1829584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi { 1839584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi *pSize = uiSizeRead; 1849584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi } 1859584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi } 1869584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi 1879584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi#ifdef M4OSA_FILE_BLOCK_WITH_SEMAPHORE 1889584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi M4OSA_semaphorePost(pFileContext->semaphore_context); 1899584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi#endif /* M4OSA_FILE_BLOCK_WITH_SEMAPHORE */ 1909584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi 1919584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi 1929584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi return err; 1939584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi} 1949584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi 1959584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi 1969584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi/** 1979584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi************************************************************************ 1989584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi * @brief This function seeks at the provided position in the core file 1999584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi * reader (selected by its 'context'). The position is related to 2009584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi * the seekMode parameter it can be either from the beginning, from 2019584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi * the end or from the current postion. To support large file 2029584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi * access (more than 2GBytes), the position is provided on a 64 2039584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi * bits. 2049584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi * @note If this function returns an error the current position pointer 2059584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi * in the file must not change. Else the current 2069584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi * position pointer must be updated. 2079584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi * @param context: (IN/OUT) Context of the core file reader 2089584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi * @param seekMode: (IN) Seek access mode 2099584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi * @param position: (IN/OUT) Position in the file 2109584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi * @return M4NO_ERROR: there is no error 2119584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi * @return M4ERR_PARAMETER: at least one parameter is NULL 2129584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi * @return M4ERR_BAD_CONTEXT: provided context is not a valid one 2139584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi * @return M4ERR_ALLOC: there is no more memory available 2149584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi * @return M4ERR_FILE_INVALID_POSITION: the position cannot be reached 2159584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi ************************************************************************ 2169584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi*/ 2179584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi 2189584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray KundargiM4OSA_ERR M4OSA_fileReadSeek(M4OSA_Context pContext, M4OSA_FileSeekAccessMode seekMode, 2199584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi M4OSA_FilePosition* pPosition) 2209584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi{ 2219584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi M4OSA_FileContext* pFileContext = (M4OSA_FileContext*)pContext; 2229584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi M4OSA_ERR err; 2239584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi 2249584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi M4OSA_TRACE2_2("M4OSA_fileReadSeek : mode = %d pos = %lu", seekMode, 2259584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi (pPosition != M4OSA_NULL) ? (*pPosition) : 0); 2269584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi 2279584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi M4OSA_DEBUG_IF2(M4OSA_NULL == pContext, M4ERR_PARAMETER, 2289584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi "M4OSA_fileReadSeek: pContext is M4OSA_NULL"); 2299584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi M4OSA_DEBUG_IF2(0 == seekMode, M4ERR_PARAMETER, 2309584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi "M4OSA_fileReadSeek: seekMode is 0"); 2319584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi M4OSA_DEBUG_IF2(M4OSA_NULL == pPosition, M4ERR_PARAMETER, 2329584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi "M4OSA_fileReadSeek: pPosition is M4OSA_NULL"); 2339584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi#ifdef M4OSA_FILE_BLOCK_WITH_SEMAPHORE 2349584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi M4OSA_DEBUG_IF2(M4OSA_NULL == pFileContext->semaphore_context, 2359584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi M4ERR_BAD_CONTEXT, "M4OSA_fileReadSeek: semaphore_context is M4OSA_NULL"); 2369584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi#endif /* M4OSA_FILE_BLOCK_WITH_SEMAPHORE */ 2379584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi 2389584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi if (M4OSA_kDescRWAccess == pFileContext->m_DescrModeAccess) 2399584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi { 2409584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi M4OSA_UInt32 SeekModeOption; 2419584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi /* Go to the desired position */ 2429584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi if (M4OSA_kFileSeekBeginning == seekMode) 2439584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi { 2449584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi SeekModeOption = SEEK_SET; 2459584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi } 2469584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi else if (M4OSA_kFileSeekEnd == seekMode) 2479584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi { 2489584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi SeekModeOption = SEEK_END; 2499584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi } 2509584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi else if (M4OSA_kFileSeekCurrent == seekMode) 2519584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi { 2529584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi SeekModeOption = SEEK_CUR; 2539584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi } 2549584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi else 2559584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi { 2569584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi M4OSA_TRACE1_0("M4OSA_fileReadSeek: END WITH ERROR !!! (CONVERION ERROR FOR THE SEEK MODE)"); 2579584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi return M4ERR_PARAMETER; 2589584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi } 2599584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi 2609584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi /** 2619584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi * Go to the desired position */ 2629584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi err = fseek(pFileContext->file_desc, *pPosition, SeekModeOption); 2639584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi if(err != 0) 2649584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi { 2659584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi /* converts the error to PSW format*/ 2669584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi err=((M4OSA_UInt32)(M4_ERR)<<30)+(((M4OSA_FILE_WRITER)&0x003FFF)<<16)+(M4OSA_Int16)(err); 2679584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi M4OSA_TRACE1_1("M4OSA_FileReadSeek error:%x",err); 2689584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi } 2699584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi else 2709584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi { 2719584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi return M4NO_ERROR; 2729584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi } 2739584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi 2749584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi /* Return without error */ 2759584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi return err; 2769584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi } 2779584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi 2789584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi 2799584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi#ifdef M4OSA_FILE_BLOCK_WITH_SEMAPHORE 2809584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi M4OSA_semaphoreWait(pFileContext->semaphore_context, M4OSA_WAIT_FOREVER); 2819584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi#endif /* M4OSA_FILE_BLOCK_WITH_SEMAPHORE */ 2829584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi 2839584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi if(pFileContext->current_seek != SeekRead) 2849584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi { 2859584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi 2869584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi /* fseek to the last read position */ 2879584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi err = M4OSA_fileCommonSeek(pContext, M4OSA_kFileSeekBeginning, 2889584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi &(pFileContext->read_position)); 2899584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi if(M4OSA_ERR_IS_ERROR(err)) 2909584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi { 2919584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi M4OSA_DEBUG(err, "M4OSA_fileReadData: M4OSA_fileCommonSeek"); 2929584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi 2939584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi#ifdef M4OSA_FILE_BLOCK_WITH_SEMAPHORE 2949584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi M4OSA_semaphorePost(pFileContext->semaphore_context); 2959584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi#endif /* M4OSA_FILE_BLOCK_WITH_SEMAPHORE */ 2969584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi 2979584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi return err; 2989584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi } 2999584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi 3009584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi pFileContext->current_seek = SeekRead; 3019584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi } 3029584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi 3039584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi err = M4OSA_fileCommonSeek(pContext, seekMode, pPosition); 3049584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi if(M4OSA_ERR_IS_ERROR(err)) 3059584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi { 3069584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi M4OSA_DEBUG(err, "M4OSA_fileReadData: M4OSA_fileCommonSeek"); 3079584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi } 3089584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi else 3099584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi { 310c5dac4d3fa18a3497242669b823f78a7e48e4e39hongteng pFileContext->read_position = *pPosition; 3119584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi } 3129584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi 3139584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi#ifdef M4OSA_FILE_BLOCK_WITH_SEMAPHORE 3149584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi M4OSA_semaphorePost(pFileContext->semaphore_context); 3159584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi#endif /* M4OSA_FILE_BLOCK_WITH_SEMAPHORE */ 3169584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi 3179584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi return err; 3189584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi} 3199584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi 3209584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi 3219584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi/** 3229584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi ************************************************************************ 3239584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi * @brief This function asks the core file reader to close the file 3249584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi * (associated to the context). 3259584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi * @note The context of the core file reader is freed. 3269584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi * @param pContext: (IN/OUT) Context of the core file reader 3279584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi * @return M4NO_ERROR: there is no error 3289584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi * @return M4ERR_PARAMETER: at least one parameter is NULL 3299584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi * @return M4ERR_BAD_CONTEXT: provided context is not a valid one 3309584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi * @return M4ERR_ALLOC: there is no more memory available 3319584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi ************************************************************************ 3329584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi*/ 3339584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray KundargiM4OSA_ERR M4OSA_fileReadClose(M4OSA_Context pContext) 3349584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi{ 3359584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi M4OSA_FileContext* pFileContext = (M4OSA_FileContext*)pContext; 3369584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi 3379584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi M4OSA_TRACE1_1("M4OSA_fileReadClose : pC = 0x%p", pContext); 3389584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi 3399584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi M4OSA_DEBUG_IF2(M4OSA_NULL == pContext, M4ERR_PARAMETER, 3409584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi "M4OSA_fileReadClose: pContext is M4OSA_NULL"); 3419584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi 3429584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi if(M4OSA_FILE_WRITER == pFileContext->coreID_write) 3439584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi { 3449584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi return M4NO_ERROR; 3459584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi } 3469584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi 3479584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi return M4OSA_fileCommonClose(M4OSA_FILE_READER, pContext); 3489584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi} 3499584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi 3509584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi 3519584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi 3529584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi 3539584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi/** 3549584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi ************************************************************************ 3559584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi * @brief This function asks the core file reader to return the value 3569584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi * associated with the optionID. The caller is responsible for 3579584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi * allocating/de-allocating the memory of the value field. 3589584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi * @note 'value' must be cast according to the type related to the 3599584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi * optionID As the caller is responsible for 3609584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi * allocating/de-allocating the 'value' field, the callee must copy 3619584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi * this field to its internal variable. 3629584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi * @param pContext: (IN/OUT) Context of the core file reader 3639584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi * @param pOptionID: (IN) ID of the option 3649584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi * @param pOptionValue: (OUT) Value of the option 3659584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi * @return M4NO_ERROR: there is no error 3669584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi * @return M4ERR_PARAMETER: at least one parameter is NULL 3679584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi * @return M4ERR_BAD_CONTEXT: provided context is not a valid one 3689584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi * @return M4ERR_BAD_OPTION_ID: the optionID is not a valid one 3699584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi * @return M4ERR_WRITE_ONLY: this option is a write only one 3709584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi * @return M4ERR_NOT_IMPLEMENTED: this option is not implemented 3719584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi ************************************************************************ 3729584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi*/ 3739584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray KundargiM4OSA_ERR M4OSA_fileReadGetOption(M4OSA_Context pContext, M4OSA_FileReadOptionID optionID, 3749584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi M4OSA_DataOption* pOptionValue) 3759584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi{ 3769584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi M4OSA_FileContext* pFileContext = pContext; 3779584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi 3789584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi M4OSA_TRACE2_1("M4OSA_fileReadGetOption : option = 0x%x", optionID); 3799584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi 3809584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi M4OSA_DEBUG_IF2(M4OSA_NULL == pContext, M4ERR_PARAMETER, 3819584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi "M4OSA_fileReadGetOption: pContext is M4OSA_NULL"); 3829584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi M4OSA_DEBUG_IF2(optionID == 0, M4ERR_PARAMETER, 3839584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi "M4OSA_fileReadGetOption: optionID is 0"); 3849584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi M4OSA_DEBUG_IF2(M4OSA_NULL == pOptionValue, M4ERR_PARAMETER, 3859584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi "M4OSA_fileReadGetOption: pOptionValue is M4OSA_NULL"); 3869584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi 3879584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi M4OSA_DEBUG_IF2(!M4OSA_OPTION_ID_IS_COREID(optionID, M4OSA_FILE_READER), 3889584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi M4ERR_BAD_OPTION_ID, "M4OSA_fileReadGetOption"); 3899584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi M4OSA_DEBUG_IF2(!M4OSA_OPTION_ID_IS_READABLE(optionID), 3909584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi M4ERR_WRITE_ONLY, "M4OSA_fileReadGetOption"); 3919584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi#ifdef M4OSA_FILE_BLOCK_WITH_SEMAPHORE 3929584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi M4OSA_DEBUG_IF2(M4OSA_NULL == pFileContext->semaphore_context, 3939584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi M4ERR_BAD_CONTEXT, 3949584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi "M4OSA_fileReadGetOption: semaphore_context is M4OSA_NULL"); 3959584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi#endif /* M4OSA_FILE_BLOCK_WITH_SEMAPHORE */ 3969584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi 3979584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi switch(optionID) 3989584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi { 3999584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi#if(M4OSA_OPTIONID_FILE_READ_GET_FILE_POSITION == M4OSA_TRUE) 4009584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi case M4OSA_kFileReadGetFilePosition: 4019584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi { 4029584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi M4OSA_FilePosition* pPosition = (M4OSA_FilePosition*)pOptionValue; 4039584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi 4049584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi#ifdef M4OSA_FILE_BLOCK_WITH_SEMAPHORE 4059584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi M4OSA_semaphoreWait(pFileContext->semaphore_context, M4OSA_WAIT_FOREVER); 4069584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi#endif /* M4OSA_FILE_BLOCK_WITH_SEMAPHORE */ 4079584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi 4089584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi *pPosition = pFileContext->read_position; 4099584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi 4109584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi#ifdef M4OSA_FILE_BLOCK_WITH_SEMAPHORE 4119584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi M4OSA_semaphorePost(pFileContext->semaphore_context); 4129584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi#endif /* M4OSA_FILE_BLOCK_WITH_SEMAPHORE */ 4139584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi 4149584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi return M4NO_ERROR; 4159584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi } 4169584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi#endif /*M4OSA_OPTIONID_FILE_READ_GET_FILE_POSITION*/ 4179584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi 4189584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi#if(M4OSA_OPTIONID_FILE_READ_IS_EOF == M4OSA_TRUE) 4199584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi case M4OSA_kFileReadIsEOF: 4209584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi { 4219584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi M4OSA_Bool* bIsEndOfFile = (M4OSA_Bool*)pOptionValue; 4229584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi 4239584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi#ifdef M4OSA_FILE_BLOCK_WITH_SEMAPHORE 4249584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi M4OSA_semaphoreWait(pFileContext->semaphore_context, M4OSA_WAIT_FOREVER); 4259584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi#endif /* M4OSA_FILE_BLOCK_WITH_SEMAPHORE */ 4269584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi 4279584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi *bIsEndOfFile = pFileContext->b_is_end_of_file; 4289584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi 4299584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi#ifdef M4OSA_FILE_BLOCK_WITH_SEMAPHORE 4309584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi M4OSA_semaphorePost(pFileContext->semaphore_context); 4319584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi#endif /* M4OSA_FILE_BLOCK_WITH_SEMAPHORE */ 4329584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi 4339584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi return M4NO_ERROR; 4349584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi } 4359584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi#endif /*M4OSA_OPTIONID_FILE_READ_IS_EOF*/ 4369584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi 4379584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi 4389584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi#if(M4OSA_OPTIONID_FILE_READ_GET_FILE_SIZE == M4OSA_TRUE) 4399584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi case M4OSA_kFileReadGetFileSize: 4409584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi { 4419584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi M4OSA_FilePosition* pPosition = (M4OSA_FilePosition*)pOptionValue; 4429584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi M4OSA_Int32 iSavePos = 0; 4439584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi M4OSA_Int32 iSize = 0; 4449584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi 4459584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi#ifdef M4OSA_FILE_BLOCK_WITH_SEMAPHORE 4469584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi M4OSA_semaphoreWait(pFileContext->semaphore_context, M4OSA_WAIT_FOREVER); 4479584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi#endif /* M4OSA_FILE_BLOCK_WITH_SEMAPHORE */ 4489584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi /** 4499584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi * Bugfix: update the file size. 4509584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi * When a file is in read mode, may be another application is writing in. 4519584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi * So, we have to update the file size */ 4529584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi iSavePos = ftell(pFileContext->file_desc); /*1- Check the first position */ 4539584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi fseek(pFileContext->file_desc, 0, SEEK_END); /*2- Go to the end of the file */ 4549584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi iSize = ftell(pFileContext->file_desc); /*3- Check the file size*/ 4559584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi fseek(pFileContext->file_desc, iSavePos, SEEK_SET); /*4- go to the first position*/ 4569584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi pFileContext->file_size = iSize; 4579584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi 4589584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi *pPosition = pFileContext->file_size; 4599584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi 4609584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi#ifdef M4OSA_FILE_BLOCK_WITH_SEMAPHORE 4619584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi M4OSA_semaphorePost(pFileContext->semaphore_context); 4629584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi#endif /* M4OSA_FILE_BLOCK_WITH_SEMAPHORE */ 4639584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi 4649584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi return M4NO_ERROR; 4659584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi } 4669584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi#endif /*M4OSA_OPTIONID_FILE_READ_GET_FILE_SIZE*/ 4679584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi 4689584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi#if(M4OSA_OPTIONID_FILE_READ_GET_FILE_ATTRIBUTE == M4OSA_TRUE) 4699584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi case M4OSA_kFileReadGetFileAttribute: 4709584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi { 4719584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi return M4OSA_fileCommonGetAttribute(pContext, 4729584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi (M4OSA_FileAttribute*)pOptionValue); 4739584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi } 4749584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi#endif /*M4OSA_OPTIONID_FILE_READ_GET_FILE_ATTRIBUTE*/ 4759584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi 4769584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi#if(M4OSA_OPTIONID_FILE_READ_GET_URL == M4OSA_TRUE) 4779584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi case M4OSA_kFileReadGetURL: 4789584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi { 4799584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi return M4OSA_fileCommonGetURL(pContext, (M4OSA_Char**)pOptionValue); 4809584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi } 4819584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi#endif /*M4OSA_OPTIONID_FILE_READ_GET_URL*/ 4829584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi 4839584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi case M4OSA_kFileReadLockMode: 4849584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi { 4859584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi *(M4OSA_UInt32*)pOptionValue = pFileContext->m_uiLockMode; 4869584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi return M4NO_ERROR; 4879584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi } 4889584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi } 4899584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi 4909584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi M4OSA_DEBUG(M4ERR_NOT_IMPLEMENTED, "M4OSA_fileReadGetOption"); 4919584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi 4929584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi return M4ERR_NOT_IMPLEMENTED; 4939584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi} 4949584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi 4959584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi/** 4969584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi ************************************************************************ 4979584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi * @fn M4OSA_ERR M4OSA_fileReadSetOption (M4OSA_Context context, 4989584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi * M4OSA_OptionID optionID, M4OSA_DataOption optionValue)) 4999584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi * @brief This function asks the core file reader to set the value associated with the optionID. 5009584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi * The caller is responsible for allocating/de-allocating the memory of the value field. 5019584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi * @note As the caller is responsible for allocating/de-allocating the 'value' field, the callee must copy this field 5029584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi * to its internal variable. 5039584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi * @param pContext: (IN/OUT) Context of the core file reader 5049584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi * @param optionID: (IN) ID of the option 5059584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi * @param value: (IN) Value of the option 5069584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi * @return M4NO_ERROR: there is no error 5079584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi * @return M4ERR_PARAMETER: at least one parameter is NULL 5089584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi * @return M4ERR_BAD_CONTEXT: provided context is not a valid one 5099584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi * @return M4ERR_BAD_OPTION_ID: the optionID is not a valid one 5109584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi * @return M4ERR_READ_ONLY: this option is a read only one 5119584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi * @return M4ERR_NOT_IMPLEMENTED: this option is not implemented 5129584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi ************************************************************************ 5139584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi*/ 5149584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray KundargiM4OSA_ERR M4OSA_fileReadSetOption(M4OSA_Context pContext, 5159584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi M4OSA_FileReadOptionID optionID, 5169584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi M4OSA_DataOption optionValue) 5179584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi{ 5189584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi M4OSA_FileContext* pFileContext = pContext; 5199584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi 5209584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi M4OSA_TRACE2_1("M4OSA_fileReadSetOption : option = 0x%x", optionID); 5219584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi 5229584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi M4OSA_DEBUG_IF2(M4OSA_NULL == pContext, M4ERR_PARAMETER, 5239584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi "M4OSA_fileReadSetOption: pContext is M4OSA_NULL"); 5249584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi M4OSA_DEBUG_IF2(0 == optionID, M4ERR_PARAMETER, 5259584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi "M4OSA_fileReadSetOption"); 5269584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi M4OSA_DEBUG_IF2(!M4OSA_OPTION_ID_IS_COREID(optionID, M4OSA_FILE_READER), 5279584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi M4ERR_BAD_OPTION_ID, "M4OSA_fileReadSetOption"); 5289584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi 5299584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi M4OSA_DEBUG_IF2(!M4OSA_OPTION_ID_IS_WRITABLE(optionID), 5309584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi M4ERR_READ_ONLY, "M4OSA_fileReadSetOption"); 5319584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi#ifdef M4OSA_FILE_BLOCK_WITH_SEMAPHORE 5329584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi M4OSA_DEBUG_IF2(M4OSA_NULL == pFileContext->semaphore_context, 5339584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi M4ERR_BAD_CONTEXT, 5349584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi "M4OSA_fileReadSetOption: semaphore_context is M4OSA_NULL"); 5359584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi#endif /* M4OSA_FILE_BLOCK_WITH_SEMAPHORE */ 5369584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi 5379584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi switch(optionID) 5389584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi { 5399584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi case M4OSA_kFileReadLockMode: 5409584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi { 5419584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi pFileContext->m_uiLockMode= (M4OSA_UInt32)*(M4OSA_UInt32*)optionValue; 5429584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi return M4NO_ERROR; 5439584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi } 5449584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi default: 5459584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi M4OSA_DEBUG(M4ERR_NOT_IMPLEMENTED, "M4OSA_fileReadSetOption"); 5469584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi return M4ERR_NOT_IMPLEMENTED; 5479584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi } 5489584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi} 5499584f332d3ac3ad66e868cd191b73aa8d63824abDharmaray Kundargi 550