1855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi/* 2855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * Copyright (C) 2011 The Android Open Source Project 3855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * 4855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * Licensed under the Apache License, Version 2.0 (the "License"); 5855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * you may not use this file except in compliance with the License. 6855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * You may obtain a copy of the License at 7855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * 8855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * http://www.apache.org/licenses/LICENSE-2.0 9855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * 10855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * Unless required by applicable law or agreed to in writing, software 11855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * distributed under the License is distributed on an "AS IS" BASIS, 12855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * See the License for the specific language governing permissions and 14855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * limitations under the License. 15855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi */ 16855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi/** 17855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi ************************************************************************ 18855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @file M4OSA_FileWriter.c 19855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @brief File writer for Android 20855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @note This file implements functions to write in a file. 21855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi ************************************************************************ 22855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi*/ 23855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 24855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#include "M4OSA_Debug.h" 25855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#include "M4OSA_FileCommon_priv.h" 26855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#include "M4OSA_FileWriter.h" 27855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#include "M4OSA_FileWriter_priv.h" 28855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#include "M4OSA_Memory.h" 29855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 30855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#ifdef M4OSA_FILE_BLOCK_WITH_SEMAPHORE 31855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#include "M4OSA_Semaphore.h" 32855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#endif /* M4OSA_FILE_BLOCK_WITH_SEMAPHORE */ 33855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 34855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi/** 35855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi ************************************************************************ 36855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @brief This function opens the provided URL and returns its context. 37855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * If an error occured, the context is set to NULL. 38855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @param pContext: (OUT) Context of the core file writer 39855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @param pUrl: (IN) URL of the input file 40855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @param fileModeAccess: (IN) File mode access 41855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @return M4NO_ERROR: there is no error 42855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @return M4ERR_PARAMETER: at least one parameter is NULL 43855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @return M4ERR_ALLOC: there is no more memory available 44855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @return M4ERR_NOT_IMPLEMENTED: the URL does not match with the supported 45855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * file 46855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @return M4ERR_FILE_NOT_FOUND: the file cannot be found 47855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @return M4ERR_FILE_LOCKED: the file is locked by an other 48855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * application/process 49855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @return M4ERR_FILE_BAD_MODE_ACCESS: the file mode access is not correct 50855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi ************************************************************************ 51855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi*/ 52855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray KundargiM4OSA_ERR M4OSA_fileWriteOpen(M4OSA_Context* pContext, M4OSA_Void* pUrl, 53855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_UInt32 fileModeAccess) 54855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi{ 55855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_TRACE1_3("M4OSA_fileWriteOpen : pC = 0x%p fd = 0x%p mode = %d", 56855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi pContext, pUrl, fileModeAccess); 57855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 58855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi return M4OSA_fileCommonOpen(M4OSA_FILE_WRITER, pContext, pUrl, 59855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi fileModeAccess); 60855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi} 61855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 62855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 63855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi/** 64855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi ************************************************************************ 65855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @brief This function writes the 'size' bytes stored at 'data' memory 66855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * in the file selected by its context. 67855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @note The caller is responsible for allocating/de-allocating the 68855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * memory for 'data' parameter. 69855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @note Moreover the data pointer must be allocated to store at least 70855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * 'size' bytes. 71855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @param pContext: (IN/OUT) Context of the core file reader 72855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @param buffer: (IN) Data pointer of the write data 73855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @param size: (IN) Size of the data to write (in bytes) 74855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @return M4NO_ERROR: there is no error 75855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @return M4ERR_PARAMETER: at least one parameter is NULL 76855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @return M4ERR_BAD_CONTEXT: provided context is not a valid one 77855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @return M4ERR_ALLOC: there is no more memory available 78855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi ************************************************************************ 79855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi*/ 80855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray KundargiM4OSA_ERR M4OSA_fileWriteData(M4OSA_Context pContext, M4OSA_MemAddr8 data, 81855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_UInt32 uiSize) 82855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi{ 83855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_FileContext* pFileContext = pContext; 84855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_ERR err; 85855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_UInt32 uiSizeWrite; 86855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 87855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_TRACE2_2("M4OSA_fileWriteData : data = 0x%p size = %lu", data, 88855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi uiSize); 89855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 90855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_DEBUG_IF2(M4OSA_NULL == pContext, M4ERR_PARAMETER, 91855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi "M4OSA_fileWriteData: pContext is M4OSA_NULL"); 92855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_DEBUG_IF2(M4OSA_NULL == data, M4ERR_PARAMETER, 93855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi "M4OSA_fileWriteData: data is M4OSA_NULL"); 94855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_DEBUG_IF2(0 == uiSize, M4ERR_PARAMETER, 95855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi "M4OSA_fileWriteData: uiSize is 0"); 96855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#ifdef M4OSA_FILE_BLOCK_WITH_SEMAPHORE 97855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_DEBUG_IF2(M4OSA_NULL == pFileContext->semaphore_context, 98855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4ERR_BAD_CONTEXT, 99855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi "M4OSA_fileWriteData: semaphore_context is M4OSA_NULL"); 100855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#endif /* M4OSA_FILE_BLOCK_WITH_SEMAPHORE */ 101855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 102855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi if (M4OSA_kDescRWAccess == pFileContext->m_DescrModeAccess) 103855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 104855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_UInt32 WriteSize; 105855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi err = M4NO_ERROR; 106855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi WriteSize = fwrite((void *)data,1, uiSize, pFileContext->file_desc); 107855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi if(WriteSize != uiSize) 108855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 109855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi /* converts the error to PSW format*/ 110855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi err = ((M4OSA_UInt32)(M4_ERR)<<30)+(((M4OSA_FILE_WRITER)&0x003FFF)<<16)+(M4OSA_Int16)(WriteSize); 111855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_TRACE1_1("M4OSA_FileWriteData error:%x",err); 112855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 113855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi fflush(pFileContext->file_desc); 114855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 115aa382f3637a68361989d5b70e3184bddcc472d3dhongteng pFileContext->write_position = pFileContext->write_position + WriteSize; 116855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 117855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi /* Update the file size */ 118aa382f3637a68361989d5b70e3184bddcc472d3dhongteng if(pFileContext->write_position > pFileContext->file_size) 119855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 120aa382f3637a68361989d5b70e3184bddcc472d3dhongteng pFileContext->file_size = pFileContext->write_position; 121855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 122855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi return err; 123855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 124855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 125855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#ifdef M4OSA_FILE_BLOCK_WITH_SEMAPHORE 126855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_semaphoreWait(pFileContext->semaphore_context, M4OSA_WAIT_FOREVER); 127855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#endif /* M4OSA_FILE_BLOCK_WITH_SEMAPHORE */ 128855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 129855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi if(pFileContext->current_seek != SeekWrite) 130855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 131855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi /* fseek to the last read position */ 132855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi err = M4OSA_fileCommonSeek(pContext, M4OSA_kFileSeekBeginning, 133855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi &(pFileContext->write_position)); 134855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 135855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi if(M4OSA_ERR_IS_ERROR(err)) 136855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 137855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#ifdef M4OSA_FILE_BLOCK_WITH_SEMAPHORE 138855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_semaphorePost(pFileContext->semaphore_context); 139855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#endif /* M4OSA_FILE_BLOCK_WITH_SEMAPHORE */ 140855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_DEBUG(err, "M4OSA_fileWriteData: M4OSA_fileCommonSeek"); 141855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi return err; 142855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 143855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 144855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi pFileContext->current_seek = SeekWrite; 145855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 146855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 147855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi /* Write data */ 148855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi uiSizeWrite = fwrite(data, sizeof(M4OSA_Char), uiSize, pFileContext->file_desc); 149855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 150855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi if(uiSizeWrite == (M4OSA_UInt32)-1) 151855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 152855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#ifdef M4OSA_FILE_BLOCK_WITH_SEMAPHORE 153855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_semaphorePost(pFileContext->semaphore_context); 154855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#endif /* M4OSA_FILE_BLOCK_WITH_SEMAPHORE */ 155855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 156855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi /* An error occured */ 157855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 158855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_DEBUG(M4ERR_BAD_CONTEXT, "M4OSA_fileWriteData: fwrite failed"); 159855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi return M4ERR_BAD_CONTEXT; 160855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 161855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 162aa382f3637a68361989d5b70e3184bddcc472d3dhongteng pFileContext->write_position = pFileContext->write_position + uiSizeWrite; 163855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 164855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi /* Update the file size */ 165aa382f3637a68361989d5b70e3184bddcc472d3dhongteng if(pFileContext->write_position > pFileContext->file_size) 166855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 167aa382f3637a68361989d5b70e3184bddcc472d3dhongteng pFileContext->file_size = pFileContext->write_position; 168855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 169855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 170855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi if((M4OSA_UInt32)uiSizeWrite < uiSize) 171855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 172855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#ifdef M4OSA_FILE_BLOCK_WITH_SEMAPHORE 173855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_semaphorePost(pFileContext->semaphore_context); 174855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#endif /* M4OSA_FILE_BLOCK_WITH_SEMAPHORE */ 175855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 176855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_DEBUG(M4ERR_ALLOC, "M4OSA_fileWriteData"); 177855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi return M4ERR_ALLOC; 178855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 179855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 180855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#ifdef M4OSA_FILE_BLOCK_WITH_SEMAPHORE 181855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_semaphorePost(pFileContext->semaphore_context); 182855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#endif /* M4OSA_FILE_BLOCK_WITH_SEMAPHORE */ 183855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 184855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi return M4NO_ERROR; 185855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi} 186855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 187855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 188855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi/** 189855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi ************************************************************************ 190855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @brief This function seeks at the provided position in the core file 191855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * writer (selected by its 'context'). The position is related to 192855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * the seekMode parameter it can be either from the beginning, 193855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * from the end or from the current postion. To support large file 194855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * access (more than 2GBytes), the position is provided on a 64 195855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * bits. 196855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @note If this function returns an error the current position pointer 197855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * in the file must not change. Else the current position pointer 198855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * must be updated. 199855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @param pContext: (IN/OUT) Context of the core file reader 200855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @param seekMode: (IN) Seek access mode 201855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @param position: (IN/OUT) Position in the file 202855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @return M4NO_ERROR: there is no error 203855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @return M4ERR_PARAMETER: at least one parameter is NULL 204855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @return M4ERR_BAD_CONTEXT: provided context is not a valid one 205855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @return M4ERR_ALLOC: there is no more memory available 206855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @return M4ERR_FILE_INVALID_POSITION: the position cannot be reached 207855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi ************************************************************************ 208855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi */ 209855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray KundargiM4OSA_ERR M4OSA_fileWriteSeek(M4OSA_Context pContext, M4OSA_FileSeekAccessMode seekMode, 210855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_FilePosition* pPosition) 211855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi{ 212855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_FileContext* pFileContext = (M4OSA_FileContext*)pContext; 213855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_ERR err; 214855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 215855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_TRACE2_2("M4OSA_fileWriteSeek : mode = %d pos = %lu", 216855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi seekMode, (M4OSA_NULL != pPosition) ? (*pPosition) : 0); 217855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 218855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_DEBUG_IF2(M4OSA_NULL == pContext, M4ERR_PARAMETER, 219855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi "M4OSA_fileWriteSeek: pContext is M4OSA_NULL"); 220855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_DEBUG_IF2(0 == seekMode, M4ERR_PARAMETER, 221855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi "M4OSA_fileWriteSeek: seemMode is 0"); 222855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_DEBUG_IF2(M4OSA_NULL == pPosition, M4ERR_PARAMETER, 223855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi "M4OSA_fileWriteSeek: pPosition is M4OSA_NULL"); 224855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#ifdef M4OSA_FILE_BLOCK_WITH_SEMAPHORE 225855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_DEBUG_IF2(M4OSA_NULL == pFileContext->semaphore_context, M4ERR_BAD_CONTEXT, 226855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi "M4OSA_fileWriteSeek: semaphore_context is M4OSA_NULL"); 227855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#endif /* M4OSA_FILE_BLOCK_WITH_SEMAPHORE */ 228855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 229855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi if (M4OSA_kDescRWAccess == pFileContext->m_DescrModeAccess) /* read write */ 230855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 231855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_UInt32 SeekModeOption; 232855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi /*The position for the seek mode between the SHP and the OSAl part are different */ 233855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi if (M4OSA_kFileSeekBeginning == seekMode) 234855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 235855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi SeekModeOption = SEEK_SET; 236855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 237855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi else if (M4OSA_kFileSeekEnd == seekMode) 238855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 239855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi SeekModeOption = SEEK_END; 240855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 241855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi else if (M4OSA_kFileSeekCurrent == seekMode) 242855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 243855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi SeekModeOption = SEEK_CUR; 244855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 245855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi else 246855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 247855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_TRACE1_0("M4OSA_fileWriteSeek: END WITH ERROR !!! (CONVERION ERROR FOR THE SEEK MODE) "); 248855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi return M4ERR_PARAMETER; 249855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 250855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 251855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi /** 252855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * Go to the desired position */ 253855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi err = fseek(pFileContext->file_desc,*pPosition,SeekModeOption); 254855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi if(err != 0) 255855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 256855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi /* converts the error to PSW format*/ 257855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi err=((M4OSA_UInt32)(M4_ERR)<<30)+(((M4OSA_FILE_WRITER)&0x003FFF)<<16)+(M4OSA_Int16)(err); 258855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_TRACE1_1("M4OSA_FileWriteSeek error:%x",err); 259855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 260855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi else 261855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 262855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi return M4NO_ERROR; 263855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 264855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 265855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi return err; 266855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 267855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 268855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#ifdef M4OSA_FILE_BLOCK_WITH_SEMAPHORE 269855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_semaphoreWait(pFileContext->semaphore_context, M4OSA_WAIT_FOREVER); 270855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#endif /* M4OSA_FILE_BLOCK_WITH_SEMAPHORE */ 271855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 272855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi err = M4OSA_fileCommonSeek(pContext, seekMode, pPosition); 273855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 274855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi if(M4OSA_ERR_IS_ERROR(err)) 275855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 276855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_DEBUG(err, "M4OSA_fileWriteSeek: M4OSA_fileCommonSeek"); 277855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 278855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#ifdef M4OSA_FILE_BLOCK_WITH_SEMAPHORE 279855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_semaphorePost(pFileContext->semaphore_context); 280855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#endif /* M4OSA_FILE_BLOCK_WITH_SEMAPHORE */ 281855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 282855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi return err; 283855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 284855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 285aa382f3637a68361989d5b70e3184bddcc472d3dhongteng pFileContext->write_position = *pPosition; 286855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 287855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi pFileContext->current_seek = SeekWrite; 288855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 289855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#ifdef M4OSA_FILE_BLOCK_WITH_SEMAPHORE 290855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_semaphorePost(pFileContext->semaphore_context); 291855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#endif /* M4OSA_FILE_BLOCK_WITH_SEMAPHORE */ 292855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 293855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi return M4NO_ERROR; 294855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi} 295855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 296855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 297855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi/** 298855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi ************************************************************************ 299855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @brief This function asks the core file writer to close the file 300855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * (associated to the context). 301855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @note The context of the core file writer is freed. 302855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @param pContext: (IN/OUT) Context of the core file writer 303855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @return M4NO_ERROR: there is no error 304855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @return M4ERR_PARAMETER: at least one parameter is NULL 305855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @return M4ERR_BAD_CONTEXT: provided context is not a valid one 306855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @return M4ERR_ALLOC: there is no more memory available 307855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi************************************************************************ 308855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi*/ 309855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 310855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray KundargiM4OSA_ERR M4OSA_fileWriteClose(M4OSA_Context pContext) 311855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi{ 312855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_FileContext* pFileContext = (M4OSA_FileContext*)pContext; 313855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 314855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_TRACE1_1("M4OSA_fileWriteClose : pC = 0x%p", pContext); 315855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 316855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_DEBUG_IF2(M4OSA_NULL == pContext, M4ERR_PARAMETER, 317855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi "M4OSA_fileWriteClose: pContext is M4OSA_NULL"); 318855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 319855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi return M4OSA_fileCommonClose(M4OSA_FILE_WRITER, pContext); 320855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi} 321855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 322855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 323855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi/** 324855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi ************************************************************************ 325855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @brief This function flushes the stream associated to the context. 326855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @param pContext: (IN/OUT) Context of the core file writer 327855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @return M4NO_ERROR: there is no error 328855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @return M4ERR_PARAMETER: at least one parameter is NULL 329855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @return M4ERR_BAD_CONTEXT: provided context is not a valid one 330855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi ************************************************************************ 331855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi*/ 332855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray KundargiM4OSA_ERR M4OSA_fileWriteFlush(M4OSA_Context pContext) 333855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi{ 334855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_FileContext* pFileContext = pContext; 335855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_ERR err = M4NO_ERROR; 336855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 337855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_TRACE2_1("M4OSA_fileWriteFlush : pC = 0x%p", pContext); 338855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 339855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_DEBUG_IF2(M4OSA_NULL == pContext, M4ERR_PARAMETER, 340855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi "M4OSA_fileWriteFlush: pcontext is M4OSA_NULL"); 341855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 342855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#ifdef M4OSA_FILE_BLOCK_WITH_SEMAPHORE 343855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_DEBUG_IF2(M4OSA_NULL == pFileContext->semaphore_context, M4ERR_BAD_CONTEXT, 344855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi "M4OSA_fileWriteFlush: semaphore_context is M4OSA_NULL"); 345855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#endif /* M4OSA_FILE_BLOCK_WITH_SEMAPHORE */ 346855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 347855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#ifdef M4OSA_FILE_BLOCK_WITH_SEMAPHORE 348855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_semaphoreWait(pFileContext->semaphore_context, M4OSA_WAIT_FOREVER); 349855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#endif /* M4OSA_FILE_BLOCK_WITH_SEMAPHORE */ 350855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 351855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi if (fflush(pFileContext->file_desc) != 0) 352855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 353855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi err = M4ERR_BAD_CONTEXT; 354855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 355855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 356855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#ifdef M4OSA_FILE_BLOCK_WITH_SEMAPHORE 357855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_semaphorePost(pFileContext->semaphore_context); 358855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#endif /* M4OSA_FILE_BLOCK_WITH_SEMAPHORE */ 359855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 360855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi return err; 361855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi} 362855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 363855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 364855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi/** 365855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi ************************************************************************ 366855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @brief This function asks the core file writer to return the value 367855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * associated with the optionID. 368855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * The caller is responsible for allocating/de-allocating the 369855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * memory of the value field. 370855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @note 'value' must be cast according to the type related to the 371855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * optionID 372855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * As the caller is responsible for allocating/de-allocating the 373855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * 'value' field, the callee must copy this field 374855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * to its internal variable. 375855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @param pContext: (IN/OUT) Context of the core file writer 376855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @param optionID: (IN) ID of the option 377855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @param value: (OUT) Value of the option 378855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @return M4NO_ERROR: there is no error 379855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @return M4ERR_PARAMETER: at least one parameter is NULL 380855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @return M4ERR_BAD_CONTEXT: provided context is not a valid one 381855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @return M4ERR_BAD_OPTION_ID: the optionID is not a valid one 382855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @return M4ERR_WRITE_ONLY: this option is a write only one 383855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @return M4ERR_NOT_IMPLEMENTED: this option is not implemented 384855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi************************************************************************ 385855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi*/ 386855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 387855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray KundargiM4OSA_ERR M4OSA_fileWriteGetOption(M4OSA_Context pContext, M4OSA_OptionID optionID, 388855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_DataOption* pOptionValue) 389855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi{ 390855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_FileContext* pFileContext = pContext; 391855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 392855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_TRACE2_1("M4OSA_fileWriteGetOption : option = 0x%x", optionID); 393855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 394855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_DEBUG_IF2(M4OSA_NULL == pContext, M4ERR_PARAMETER, 395855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi "M4OSA_fileWriteGetOption: pContext is M4OSA_NULL"); 396855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_DEBUG_IF2(optionID == 0, M4ERR_PARAMETER, "M4OSA_fileWriteGetOption"); 397855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_DEBUG_IF2(M4OSA_NULL == pOptionValue, M4ERR_PARAMETER, 398855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi "M4OSA_fileWriteGetOption: pOtionValue is M4OSA_NULL"); 399855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 400855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_DEBUG_IF2(!M4OSA_OPTION_ID_IS_COREID(optionID, M4OSA_FILE_WRITER), 401855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4ERR_BAD_OPTION_ID, "M4OSA_fileWriteGetOption"); 402855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_DEBUG_IF2(!M4OSA_OPTION_ID_IS_READABLE(optionID), M4ERR_WRITE_ONLY, 403855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi "M4OSA_fileWriteGetOption"); 404855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#ifdef M4OSA_FILE_BLOCK_WITH_SEMAPHORE 405855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_DEBUG_IF2(M4OSA_NULL == pFileContext->semaphore_context, M4ERR_BAD_CONTEXT, 406855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi "M4OSA_fileWriteGetOption: semaphore_context is M4OSA_NULL"); 407855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#endif /* M4OSA_FILE_BLOCK_WITH_SEMAPHORE */ 408855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 409855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi switch(optionID) 410855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 411855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#if(M4OSA_OPTIONID_FILE_WRITE_GET_FILE_POSITION == M4OSA_TRUE) 412855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi case M4OSA_kFileWriteGetFilePosition: 413855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 414855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_FilePosition* position = (M4OSA_FilePosition*)pOptionValue; 415855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 416855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#ifdef M4OSA_FILE_BLOCK_WITH_SEMAPHORE 417855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_semaphoreWait(pFileContext->semaphore_context, M4OSA_WAIT_FOREVER); 418855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#endif /* M4OSA_FILE_BLOCK_WITH_SEMAPHORE */ 419855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 420855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi *position = pFileContext->write_position; 421855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 422855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#ifdef M4OSA_FILE_BLOCK_WITH_SEMAPHORE 423855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_semaphorePost(pFileContext->semaphore_context); 424855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#endif /* M4OSA_FILE_BLOCK_WITH_SEMAPHORE */ 425855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 426855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi return M4NO_ERROR; 427855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 428855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#endif /*M4OSA_OPTIONID_FILE_WRITE_GET_FILE_POSITION*/ 429855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 430855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#if(M4OSA_OPTIONID_FILE_WRITE_GET_FILE_SIZE == M4OSA_TRUE) 431855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi case M4OSA_kFileWriteGetFileSize: 432855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 433855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_FilePosition* position = (M4OSA_FilePosition*)pOptionValue; 434855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 435855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi if(M4OSA_kDescRWAccess == pFileContext->m_DescrModeAccess) 436855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 437855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_Int32 iSavePos = 0; 438855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_Int32 iSize = 0; 439855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 440855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi iSavePos = ftell(pFileContext->file_desc); /*1- Check the first position */ 441855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi fseek(pFileContext->file_desc, 0, SEEK_END); /*2- Go to the end of the file */ 442855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi *position = ftell(pFileContext->file_desc); /*3- Check the file size*/ 443855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi fseek(pFileContext->file_desc, iSavePos, SEEK_SET); /*4- go to the first position*/ 444855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi return M4NO_ERROR; 445855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 446855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 447855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#ifdef M4OSA_FILE_BLOCK_WITH_SEMAPHORE 448855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_semaphoreWait(pFileContext->semaphore_context, M4OSA_WAIT_FOREVER); 449855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#endif /* M4OSA_FILE_BLOCK_WITH_SEMAPHORE */ 450855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 451855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi *position = pFileContext->file_size; 452855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 453855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#ifdef M4OSA_FILE_BLOCK_WITH_SEMAPHORE 454855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_semaphorePost(pFileContext->semaphore_context); 455855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#endif /* M4OSA_FILE_BLOCK_WITH_SEMAPHORE */ 456855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 457855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi return M4NO_ERROR; 458855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 459855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#endif /*M4OSA_OPTIONID_FILE_WRITE_GET_FILE_SIZE*/ 460855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 461855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#if(M4OSA_OPTIONID_FILE_WRITE_GET_URL == M4OSA_TRUE) 462855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi case M4OSA_kFileWriteGetURL: 463855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 464855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi return M4OSA_fileCommonGetURL (pContext, (M4OSA_Char**)pOptionValue); 465855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 466855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#endif /*M4OSA_OPTIONID_FILE_WRITE_GET_URL*/ 467855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 468855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#if(M4OSA_OPTIONID_FILE_WRITE_GET_FILE_ATTRIBUTE == M4OSA_TRUE) 469855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi case M4OSA_kFileWriteGetAttribute: 470855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 471855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi return M4OSA_fileCommonGetAttribute(pContext, 472855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi (M4OSA_FileAttribute*)pOptionValue); 473855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 474855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#endif /*M4OSA_OPTIONID_FILE_WRITE_GET_FILE_ATTRIBUTE*/ 475855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 476855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#if(M4OSA_OPTIONID_FILE_WRITE_GET_READER_CONTEXT == M4OSA_TRUE) 477855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi case M4OSA_kFileWriteGetReaderContext: 478855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 479855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_FileModeAccess access = pFileContext->access_mode; 480855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 481855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_DEBUG_IF1(!(access & M4OSA_kFileRead), M4ERR_BAD_CONTEXT, 482855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi "M4OSA_fileWriteGetOption: M4OSA_kFileRead"); 483855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 484855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_DEBUG_IF1(!(access & M4OSA_kFileWrite), M4ERR_BAD_CONTEXT, 485855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi "M4OSA_fileWriteGetOption: M4OSA_kFileWrite"); 486855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 487855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi pFileContext->coreID_read = M4OSA_FILE_READER; 488855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 489855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi *pOptionValue = pContext; 490855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 491855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi return M4NO_ERROR; 492855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 493855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#endif /*M4OSA_OPTIONID_FILE_WRITE_GET_READER_CONTEXT*/ 494855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 495855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi case M4OSA_kFileWriteLockMode: 496855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 497855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi *(M4OSA_UInt32*)pOptionValue = pFileContext->m_uiLockMode; 498855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi return M4NO_ERROR; 499855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 500855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 501855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 502855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 503855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_DEBUG(M4ERR_NOT_IMPLEMENTED, "M4OSA_fileWriteGetOption"); 504855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 505855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi return M4ERR_NOT_IMPLEMENTED; 506855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi} 507855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 508855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 509855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi/** 510855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi************************************************************************ 511855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi* @brief This function asks the core file writer to set the value 512855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi* associated with the optionID. 513855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi* The caller is responsible for allocating/de-allocating the 514855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi* memory of the value field. 515855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi* @note As the caller is responsible for allocating/de-allocating the 516855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi* 'value' field, the callee must copy this field to its internal 517855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi* variable. 518855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi* @param pContext: (IN/OUT) Context of the core file writer 519855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi* @param optionID: (IN) ID of the option 520855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi* @param value: (IN) Value of the option 521855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi* @return M4NO_ERROR: there is no error 522855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi* @return M4ERR_PARAMETER: at least one parameter is NULL 523855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi* @return M4ERR_BAD_CONTEXT: provided context is not a valid one 524855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi* @return M4ERR_BAD_OPTION_ID: the optionID is not a valid one 525855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi* @return M4ERR_READ_ONLY: this option is a read only one 526855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi* @return M4ERR_NOT_IMPLEMENTED: this option is not implemented 527855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi************************************************************************ 528855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi*/ 529855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 530855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray KundargiM4OSA_ERR M4OSA_fileWriteSetOption(M4OSA_Context pContext, 531855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_OptionID optionID, 532855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_DataOption optionValue) 533855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi{ 534855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_FileContext* pFileContext = pContext; 535855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 536855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_TRACE2_1("M4OSA_fileWriteSetOption : option = 0x%x", optionID); 537855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 538855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_DEBUG_IF2(M4OSA_NULL == pContext, M4ERR_PARAMETER, 539855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi "M4OSA_fileWriteSetOption"); 540855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 541855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_DEBUG_IF2(0 == optionID, M4ERR_PARAMETER, "M4OSA_fileWriteSetOption"); 542855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 543855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_DEBUG_IF2(!M4OSA_OPTION_ID_IS_COREID(optionID, M4OSA_FILE_WRITER), 544855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4ERR_BAD_OPTION_ID, "M4OSA_fileWriteSetOption"); 545855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 546855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_DEBUG_IF2(!M4OSA_OPTION_ID_IS_WRITABLE(optionID), M4ERR_READ_ONLY, 547855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi "M4OSA_fileReadSetOption"); 548855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 549855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#ifdef M4OSA_FILE_BLOCK_WITH_SEMAPHORE 550855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi M4OSA_DEBUG_IF2(M4OSA_NULL == pFileContext->semaphore_context, M4ERR_BAD_CONTEXT, 551855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi "M4OSA_fileWriteSetOption: semaphore_context is M4OSA_NULL"); 552855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#endif /* M4OSA_FILE_BLOCK_WITH_SEMAPHORE */ 553855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 554855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi switch(optionID) 555855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 556855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi case M4OSA_kFileWriteLockMode: 557855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 558855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi pFileContext->m_uiLockMode = (M4OSA_UInt32)*(M4OSA_UInt32*)optionValue; 559855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi return M4NO_ERROR; 560855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 561855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 562855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi case M4OSA_kFileWriteDescMode: 563855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi { 564855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi pFileContext->m_DescrModeAccess = (M4OSA_Int32)*(M4OSA_Int32*)optionValue; 565855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi return M4NO_ERROR; 566855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 567855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 568855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi default: 569855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi return M4ERR_NOT_IMPLEMENTED; 570855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi } 571855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 572855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi return M4ERR_NOT_IMPLEMENTED; 573855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi} 574855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi 575