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