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