M4OSA_FileCommon.c revision aa382f3637a68361989d5b70e3184bddcc472d3d
1855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi/*
2855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * Copyright (C) 2004-2011 NXP Software
3855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * Copyright (C) 2011 The Android Open Source Project
4855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi *
5855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * Licensed under the Apache License, Version 2.0 (the "License");
6855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * you may not use this file except in compliance with the License.
7855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * You may obtain a copy of the License at
8855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi *
9855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi *      http://www.apache.org/licenses/LICENSE-2.0
10855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi *
11855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * Unless required by applicable law or agreed to in writing, software
12855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * distributed under the License is distributed on an "AS IS" BASIS,
13855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * See the License for the specific language governing permissions and
15855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * limitations under the License.
16855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi */
17855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi/**
18855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi ************************************************************************
19855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @file         M4OSA_FileCommon.c
20855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @brief        File common for Android
21855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @note         This file implements functions used by both the file writer
22855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi *               and file reader.
23855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi ************************************************************************
24855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi*/
25855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
26855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#ifndef USE_STAGEFRIGHT_CODECS
27855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#error "USE_STAGEFRIGHT_CODECS is not defined"
28d67e9da63323d965760337913f86de28024531a4Basavapatna Dattaguru#endif /*USE_STAGEFRIGHT_CODECS*/
29855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
30855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#ifdef UTF_CONVERSION
31855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#include <string.h>
32855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#endif /*UTF_CONVERSION*/
33855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
34855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#include <sys/stat.h>
35855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#include <errno.h>
36855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
37855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#ifdef M4OSA_FILE_BLOCK_WITH_SEMAPHORE
38855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#include "M4OSA_Semaphore.h"
39855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#endif /* M4OSA_FILE_BLOCK_WITH_SEMAPHORE */
40855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
41855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
42855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#include "M4OSA_Debug.h"
43855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#include "M4OSA_FileCommon.h"
44855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#include "M4OSA_FileCommon_priv.h"
45855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#include "M4OSA_Memory.h"
46855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#include "M4OSA_CharStar.h"
47855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
48855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi/**
49855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi ************************************************************************
50855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @brief      This function opens the provided URL and returns its context.
51855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi *             If an error occured, the context is set to NULL.
52855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @param      core_id: (IN) Core ID of the caller (M4OSA_FILE_READER or M4OSA_FILE_WRITER)
53855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @param      context: (OUT) Context of the core file reader
54855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @param      url: (IN) URL of the input file
55855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @param      fileModeAccess: (IN) File mode access
56855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @return     M4NO_ERROR: there is no error
57855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @return     M4ERR_PARAMETER: at least one parameter is NULL
58855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @return     M4ERR_ALLOC: there is no more memory available
59855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @return     M4ERR_NOT_IMPLEMENTED: the URL does not match with the supported
60855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi *             file
61855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @return     M4ERR_FILE_NOT_FOUND: the file cannot be found
62855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @return     M4ERR_FILE_LOCKED: the file is locked by an other
63855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi *             application/process
64855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @return     M4ERR_FILE_BAD_MODE_ACCESS: the file mode access is not correct
65855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi ************************************************************************
66855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi*/
67855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray KundargiM4OSA_ERR M4OSA_fileCommonOpen(M4OSA_UInt16 core_id, M4OSA_Context* pContext,
68855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi                               M4OSA_Char* pUrl, M4OSA_FileModeAccess fileModeAccess)
69855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi{
70855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
71855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    M4OSA_Int32 i            = 0;
72855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    M4OSA_Int32 iMode        = 0;
73855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    M4OSA_Int32 iSize        = 0;
74855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    M4OSA_Int32 iSavePos    = 0;
75855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
76855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    M4OSA_Char  mode[4]            = "";
77855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    M4OSA_Char* pReadString        = (M4OSA_Char*)"r";
78855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    M4OSA_Char* pWriteString    = (M4OSA_Char*)"w";
79855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    M4OSA_Char* pAppendString    = (M4OSA_Char*)"a";
80855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    M4OSA_Char* pBinaryString    = (M4OSA_Char*)"b";
81855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    M4OSA_Char* pPlusString        = (M4OSA_Char*)"+";
82855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
83855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    M4OSA_ERR err = M4NO_ERROR;
84855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
85855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    FILE* pFileHandler = M4OSA_NULL;
86855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    M4OSA_FileContext *pFileContext    = M4OSA_NULL;
87855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
88945956bb7126e483c3bcf7583c9f7acaae952830Dharmaray Kundargi
89855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#ifdef UTF_CONVERSION
90855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    /*FB: to test the UTF16->UTF8 conversion into Video Artist*/
91855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    /*Convert the URL from UTF16 to UTF8*/
92855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    M4OSA_Void* tempConversionBuf;
93855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    M4OSA_UInt32 tempConversionSize = 1000;
94855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
95694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu    tempConversionBuf = (M4OSA_Char*)M4OSA_32bitAlignedMalloc(tempConversionSize +1, 0, "conversion buf");
96855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    if(tempConversionBuf == M4OSA_NULL)
97855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    {
98855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi        M4OSA_TRACE1_0("Error when allocating conversion buffer\n");
99855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi        return M4ERR_PARAMETER;
100855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    }
101855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    M4OSA_ToUTF8_OSAL(pUrl, tempConversionBuf, &tempConversionSize);
102855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    ((M4OSA_Char*)tempConversionBuf)[tempConversionSize ] = '\0';
103855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
104855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    printf("file open %s\n", tempConversionBuf);
105855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#endif /*UTF CONVERSION*/
106855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
107855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    M4OSA_TRACE3_4("M4OSA_fileCommonOpen\t\tM4OSA_UInt16 %d\tM4OSA_Context* 0x%x\t"
108855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi        "M4OSA_Char* %s\tfileModeAccess %d", core_id, pContext, pUrl, fileModeAccess);
109855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
110855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    M4OSA_DEBUG_IF2(M4OSA_NULL == pContext,    M4ERR_PARAMETER,    "M4OSA_fileCommonOpen: pContext is M4OSA_NULL");
111855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    M4OSA_DEBUG_IF2(M4OSA_NULL == pUrl,        M4ERR_PARAMETER,    "M4OSA_fileCommonOpen: pUrl  is M4OSA_NULL");
112855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    M4OSA_DEBUG_IF2(0 == fileModeAccess,    M4ERR_PARAMETER,    "M4OSA_fileCommonOpen: fileModeAccess is 0");
113855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
114855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    /* Read mode not set for the reader */
115855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    M4OSA_DEBUG_IF1((M4OSA_FILE_READER == core_id) && !(fileModeAccess & M4OSA_kFileRead),
116855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi        M4ERR_FILE_BAD_MODE_ACCESS, "M4OSA_fileCommonOpen: M4OSA_kFileRead");
117855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
118855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    /* Read mode not set for the reader */
119855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    M4OSA_DEBUG_IF1((M4OSA_FILE_READER == core_id) && !(fileModeAccess & M4OSA_kFileRead),
120855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi        M4ERR_FILE_BAD_MODE_ACCESS, "M4OSA_fileCommonOpen: M4OSA_kFileRead");
121855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
122855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    /* M4OSAfileReadOpen cannot be used with Write file mode access */
123855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    M4OSA_DEBUG_IF1((M4OSA_FILE_READER == core_id) && (fileModeAccess & M4OSA_kFileWrite),
124855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi        M4ERR_FILE_BAD_MODE_ACCESS, "M4OSA_fileCommonOpen: M4OSA_kFileWrite");
125855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
126855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    /* Append and Create flags cannot be used with Read */
127855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    M4OSA_DEBUG_IF1((M4OSA_FILE_READER == core_id) && (fileModeAccess & M4OSA_kFileAppend),
128855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi        M4ERR_FILE_BAD_MODE_ACCESS, "M4OSA_fileCommonOpen: M4OSA_kFileAppend");
129855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
130855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    M4OSA_DEBUG_IF1((M4OSA_FILE_READER == core_id) && (fileModeAccess & M4OSA_kFileCreate),
131855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi        M4ERR_FILE_BAD_MODE_ACCESS, "M4OSA_fileCommonOpen: M4OSA_kFileCreate");
132855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
133855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    /* Write mode not set for the writer */
134855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    M4OSA_DEBUG_IF1((M4OSA_FILE_WRITER == core_id) && !(fileModeAccess & M4OSA_kFileWrite),
135855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi        M4ERR_FILE_BAD_MODE_ACCESS, "M4OSA_fileCommonOpen: M4OSA_kFileWrite");
136855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
137855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    /* Create flag necessary for opening file */
138855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    if ((fileModeAccess & M4OSA_kFileRead) &&
139855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi        (fileModeAccess & M4OSA_kFileWrite)&&(fileModeAccess & M4OSA_kFileCreate))
140855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    {
141947721ba962c19913b76658cdbb19ae8c77c9c50Dheeraj Sharma        strncat((char *)mode, (const char *)pWriteString, (size_t)1);
142947721ba962c19913b76658cdbb19ae8c77c9c50Dheeraj Sharma        strncat((char *)mode, (const char *)pPlusString, (size_t)1);
143855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    }
144855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    else
145855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    {
146855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi        if(fileModeAccess & M4OSA_kFileAppend)
147855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi        {
148947721ba962c19913b76658cdbb19ae8c77c9c50Dheeraj Sharma            strncat((char *)mode, (const char *)pAppendString, (size_t)1);
149855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi        }
150855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi        else if(fileModeAccess & M4OSA_kFileRead)
151855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi        {
152947721ba962c19913b76658cdbb19ae8c77c9c50Dheeraj Sharma            strncat((char *)mode, (const char *)pReadString, (size_t)1);
153855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi        }
154855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi        else if(fileModeAccess & M4OSA_kFileWrite)
155855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi        {
156947721ba962c19913b76658cdbb19ae8c77c9c50Dheeraj Sharma            strncat((char *)mode, (const char *)pWriteString, (size_t)1);
157855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi        }
158855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
159855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi        if((fileModeAccess & M4OSA_kFileRead)&&(fileModeAccess & M4OSA_kFileWrite))
160855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi        {
161947721ba962c19913b76658cdbb19ae8c77c9c50Dheeraj Sharma            strncat((char *)mode,(const char *)pPlusString, (size_t)1);
162855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi        }
163855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    }
164855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
165855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    if(!(fileModeAccess & M4OSA_kFileIsTextMode))
166855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    {
167947721ba962c19913b76658cdbb19ae8c77c9c50Dheeraj Sharma        strncat((char *)mode, (const char *)pBinaryString,(size_t)1);
168855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    }
169855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
170855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    /*Open the file*/
171855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
172855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#ifdef UTF_CONVERSION
173855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    /*Open the converted path*/
174855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    pFileHandler = fopen((const char *)tempConversionBuf, (const char *)mode);
175855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    /*Free the temporary decoded buffer*/
176694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu    free(tempConversionBuf);
1775d33cc161e7d13459b4833dbc8b769093c3f80b0Dheeraj Sharma#else /* UTF_CONVERSION */
1785d33cc161e7d13459b4833dbc8b769093c3f80b0Dheeraj Sharma    pFileHandler = fopen((const char *)pUrl, (const char *)mode);
179855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#endif /* UTF_CONVERSION */
180855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
181855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    if (M4OSA_NULL == pFileHandler)
182855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    {
183855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi        switch(errno)
184855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi        {
185855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi        case ENOENT:
186855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi            {
187855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi                M4OSA_DEBUG(M4ERR_FILE_NOT_FOUND, "M4OSA_fileCommonOpen: No such file or directory");
188855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi                M4OSA_TRACE1_1("File not found: %s", pUrl);
189855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi                return M4ERR_FILE_NOT_FOUND;
190855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi            }
191855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi        case EACCES:
192855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi            {
193855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi                M4OSA_DEBUG(M4ERR_FILE_LOCKED, "M4OSA_fileCommonOpen: Permission denied");
194855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi                return M4ERR_FILE_LOCKED;
195855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi            }
196855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi         case EINVAL:
197855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi         {
198855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi            M4OSA_DEBUG(M4ERR_FILE_BAD_MODE_ACCESS, "M4OSA_fileCommonOpen: Invalid Argument");
199855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi            return M4ERR_FILE_BAD_MODE_ACCESS;
200855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi         }
201855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi        case EMFILE:
202855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi         case ENOSPC:
203855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi        case ENOMEM:
204855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi            {
205855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi                M4OSA_DEBUG(M4ERR_ALLOC, "M4OSA_fileCommonOpen: Too many open files");
206855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi                return M4ERR_ALLOC;
207855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi            }
208855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi        default:
209855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi            {
210855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi                M4OSA_DEBUG(M4ERR_NOT_IMPLEMENTED, "M4OSA_fileCommonOpen");
211855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi                return M4ERR_NOT_IMPLEMENTED;
212855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi            }
213855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi        }
214855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    }
215855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
216855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    /* Allocate the file context */
217694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu    pFileContext = (M4OSA_FileContext*) M4OSA_32bitAlignedMalloc(sizeof(M4OSA_FileContext),
218855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi                    core_id, (M4OSA_Char*)"M4OSA_fileCommonOpen: file context");
219855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    if (M4OSA_NULL == pFileContext)
220855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    {
221855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi        fclose(pFileHandler);
222855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi        M4OSA_DEBUG(M4ERR_ALLOC, "M4OSA_fileCommonOpen");
223855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi        return M4ERR_ALLOC;
224855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    }
225855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
226855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    pFileContext->file_desc        = pFileHandler;
227855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    pFileContext->access_mode    = fileModeAccess;
228855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    pFileContext->current_seek    = SeekNone;
229855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    pFileContext->b_is_end_of_file    = M4OSA_FALSE;
230855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
231855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    /**
232855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi     * Note: Never use this expression "i = (value1 == value2) ? x: y;"
233855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi     * because that doens't compile on other platforms (ADS for example)
234855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi     * Use: if(value1 == value2)
235855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi     *        { i= x; ..etc
236855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi     */
237855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    pFileContext->coreID_write = 0;
238855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    pFileContext->coreID_read = 0;
239855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    pFileContext->m_DescrModeAccess = M4OSA_kDescNoneAccess;
240855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
241855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    if (M4OSA_FILE_READER == core_id)
242855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    {
243855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi        pFileContext->coreID_read = core_id;
244855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi        pFileContext->m_DescrModeAccess = M4OSA_kDescReadAccess;
245855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    }
246855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    else if (M4OSA_FILE_WRITER == core_id)
247855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    {
248855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi        pFileContext->coreID_write = core_id;
249855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi        pFileContext->m_DescrModeAccess = M4OSA_kDescWriteAccess;
250855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    }
251855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
252aa382f3637a68361989d5b70e3184bddcc472d3dhongteng    pFileContext->read_position = 0;
253aa382f3637a68361989d5b70e3184bddcc472d3dhongteng    pFileContext->write_position = 0;
254855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
255855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    /* Allocate the memory to store the URL string */
256694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu    pFileContext->url_name = (M4OSA_Char*) M4OSA_32bitAlignedMalloc(strlen((const char *)pUrl)+1,
257855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi                        core_id, (M4OSA_Char*)"M4OSA_fileCommonOpen: URL name");
258855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    if (M4OSA_NULL == pFileContext->url_name)
259855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    {
260855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi        fclose(pFileHandler);
261694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu        free(pFileContext);
262855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi        M4OSA_DEBUG(M4ERR_ALLOC, "M4OSA_fileCommonOpen");
263855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi        return M4ERR_ALLOC;
264855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    }
265947721ba962c19913b76658cdbb19ae8c77c9c50Dheeraj Sharma    M4OSA_chrNCopy(pFileContext->url_name, pUrl, strlen((const char *)pUrl)+1);
266855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
267855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    /* Get the file name */
268855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    err = M4OSA_fileCommonGetFilename(pUrl, &pFileContext->file_name);
269855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    if(M4NO_ERROR != err)
270855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    {
271855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi        fclose(pFileHandler);
272694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu        free(pFileContext->url_name);
273694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu        free(pFileContext);
274855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi        M4OSA_DEBUG(err, "M4OSA_fileCommonOpen");
275855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi        return err;
276855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    }
277855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
278855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#ifdef M4OSA_FILE_BLOCK_WITH_SEMAPHORE
279855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    M4OSA_semaphoreOpen(&(pFileContext->semaphore_context), 1); /* Allocate the semaphore */
280855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#endif /* M4OSA_FILE_BLOCK_WITH_SEMAPHORE */
281855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
282855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
283855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
284855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#ifdef USE_STAGEFRIGHT_CODECS
285855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    // Workaround for file system bug on Stingray/Honeycomb where a file re-created will keep
286855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    // the original file's size filled with 0s. Do not seek to the end to avoid ill effects
287855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    if(fileModeAccess & M4OSA_kFileAppend) {
288855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi        /* Get the file size */
289855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi        iSavePos = ftell(pFileHandler);            /*    1- Check the first position */
290855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi        fseek(pFileHandler, 0, SEEK_END);        /*    2- Go to the end of the file*/
291855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi        iSize = ftell(pFileHandler);            /*    3- Check the file size        */
292855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi        fseek(pFileHandler, iSavePos, SEEK_SET);/*    4- go to the first position */
293855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    } else {
294855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi        iSize = 0;
295855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    }
296855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#else /* USE_STAGEFRIGHT_CODECS */
297855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    /* Get the file size */
298855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    iSavePos = ftell(pFileHandler);            /*    1- Check the first position */
299855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    fseek(pFileHandler, 0, SEEK_END);        /*    2- Go to the end of the file*/
300855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    iSize = ftell(pFileHandler);            /*    3- Check the file size        */
301855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    fseek(pFileHandler, iSavePos, SEEK_SET);/*    4- go to the first position */
302855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#endif /* USE_STAGEFRIGHT_CODECS */
303855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
304855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
305855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
306855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    /* Warning possible overflow if the file is higher than 2GBytes */
307855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    pFileContext->file_size = iSize;
308855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
309855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    *pContext = pFileContext;
310855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
311855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    return M4NO_ERROR;
312855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi}
313855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
314855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
315855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi/**
316855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi ************************************************************************
317855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @brief      This function convert from UTF16 to UTF8
318855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @param      pBufferIn: (IN) UTF16 input path
319855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @param      pBufferOut: (OUT) UTF8 output path
320855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @param      bufferOutSize: (IN/OUT) size of the output path
321855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @return     M4NO_ERROR: there is no error
322855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @return     M4ERR_PARAMETER: the output path size is not enough to contain
323855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi *               the decoded path
324855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi ************************************************************************
325855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi*/
326855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#ifdef UTF_CONVERSION
327855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray KundargiM4OSA_ERR M4OSA_ToUTF8_OSAL (M4OSA_Void   *pBufferIn, M4OSA_UInt8  *pBufferOut,
328855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi                                                    M4OSA_UInt32 *bufferOutSize)
329855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi{
330855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    M4OSA_UInt16 i;
331855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    wchar_t      *w_str = (wchar_t *) pBufferIn;
332855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    M4OSA_UInt32 len, size_needed, size_given;
333855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    if (pBufferIn == NULL)
334855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    {
335855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi        *pBufferOut=NULL;
336855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi        *bufferOutSize=1;
337855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    }
338855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    else
339855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    {
340855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi        len         = wcslen(w_str);
341855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi        size_needed = len+1;
342855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi        size_given  = *bufferOutSize;
343855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
344855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi       *bufferOutSize=size_needed;
345855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi        if (size_given < size_needed )
346855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi        {
347855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi            return M4ERR_PARAMETER;
348855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi        }
349855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi        else
350855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi        {
351855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi            for (i=0; i<len; i++)
352855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi            {
353855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi                pBufferOut[i]=(M4OSA_UInt8)w_str[i];
354855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi            }
355855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi            pBufferOut[len]=0;
356855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi        }
357855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    }
358855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    return M4NO_ERROR;
359855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi}
360855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#endif /*UTF CONVERSION*/
361855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
362855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi/**
363855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi ************************************************************************
364855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @brief      This function seeks at the provided position.
365855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @param      context: (IN/OUT) Context of the core file reader
366855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @param      seekMode: (IN) Seek access mode
367855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @param      position: (IN/OUT) Position in the file
368855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @return     M4NO_ERROR: there is no error
369855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @return     M4ERR_PARAMETER: at least one parameter is NULL
370855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @return     M4ERR_BAD_CONTEXT: provided context is not a valid one
371855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @return     M4ERR_ALLOC: there is no more memory available
372855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @return     M4ERR_FILE_INVALID_POSITION: the position cannot be reached
373855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi ************************************************************************
374855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi*/
375855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray KundargiM4OSA_ERR M4OSA_fileCommonSeek(M4OSA_Context pContext,
376855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi                               M4OSA_FileSeekAccessMode seekMode,
377855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi                               M4OSA_FilePosition* pFilePos)
378855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi{
379855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    M4OSA_FileContext* pFileContext = pContext;
380855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    M4OSA_FilePosition fpos_current;
381855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    M4OSA_FilePosition fpos_seek;
382aa382f3637a68361989d5b70e3184bddcc472d3dhongteng    M4OSA_FilePosition fpos_null = 0;
383aa382f3637a68361989d5b70e3184bddcc472d3dhongteng    M4OSA_FilePosition fpos_neg_un = -1;
384855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    M4OSA_FilePosition fpos_file_size;
385855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    M4OSA_FilePosition fpos_seek_from_beginning;
386855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
387855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    M4OSA_TRACE3_3("M4OSA_fileCommonSeek\t\tM4OSA_Context 0x%x\t M4OSA_FileSeekAccessMode %d\tM4OSA_FilePosition* 0x%x",
388855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi        pContext, seekMode, pFilePos);
389855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
390855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    M4OSA_DEBUG_IF2(M4OSA_NULL == pContext, M4ERR_PARAMETER, "M4OSA_fileCommonSeek");
391855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    M4OSA_DEBUG_IF2(0 == seekMode, M4ERR_PARAMETER, "M4OSA_fileCommonSeek");
392855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    M4OSA_DEBUG_IF2(M4OSA_NULL == pFilePos, M4ERR_PARAMETER, "M4OSA_fileCommonSeek");
393855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
394aa382f3637a68361989d5b70e3184bddcc472d3dhongteng    fpos_file_size = pFileContext->file_size;
395855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
396855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    if(SeekRead == pFileContext->current_seek)
397855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    {
398aa382f3637a68361989d5b70e3184bddcc472d3dhongteng        fpos_current = pFileContext->read_position;
399855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    }
400855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    else if(SeekWrite == pFileContext->current_seek)
401855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    {
402aa382f3637a68361989d5b70e3184bddcc472d3dhongteng        fpos_current = pFileContext->write_position;
403855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    }
404855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    else
405855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    {
406aa382f3637a68361989d5b70e3184bddcc472d3dhongteng        fpos_current = 0;
407855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    }
408855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
409855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    switch(seekMode)
410855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    {
411855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    case M4OSA_kFileSeekCurrent:
412855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi        {
413aa382f3637a68361989d5b70e3184bddcc472d3dhongteng            fpos_seek = *pFilePos;
414855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi            break;
415855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi        }
416855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    case M4OSA_kFileSeekBeginning:
417855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi        {
418aa382f3637a68361989d5b70e3184bddcc472d3dhongteng            fpos_seek = *pFilePos - fpos_current;
419aa382f3637a68361989d5b70e3184bddcc472d3dhongteng            break;
420855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi        }
421855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    case M4OSA_kFileSeekEnd:
422855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi        {
423aa382f3637a68361989d5b70e3184bddcc472d3dhongteng            fpos_seek = *pFilePos + fpos_file_size - fpos_current;
424855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi            break;
425855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi        }
426855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    default:
427855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi        {
428855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi            return M4ERR_PARAMETER;
429855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi        }
430855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    }
431855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
432aa382f3637a68361989d5b70e3184bddcc472d3dhongteng    fpos_seek_from_beginning = fpos_current + fpos_seek;
433855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
434855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    if(fseek(pFileContext->file_desc, fpos_seek, SEEK_CUR) != 0)
435855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    {
436855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi        switch(errno)
437855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi        {
438855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi        case EINVAL:
439855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi            {
440855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi            /* meaning the value for origin is invalid or the position
441855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi                specified by offset is before the beginning of the file */
442855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi                return M4ERR_FILE_INVALID_POSITION;
443855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi            }
444855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
445855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi        case EBADF:
446855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi        default:
447855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi            {
448855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi                return M4ERR_BAD_CONTEXT;/* file handle is invalid */
449855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi            }
450855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi        }
451855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    }
452855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
453855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    /* Set the returned position from the beginning of the file */
454aa382f3637a68361989d5b70e3184bddcc472d3dhongteng    *pFilePos = fpos_seek_from_beginning;
455855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
456855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    /* SEEK done, reset end of file value */
457855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    pFileContext->b_is_end_of_file = M4OSA_FALSE;
458855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
459855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    return M4NO_ERROR;
460855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi}
461855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
462855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
463855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi/**
464855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi ************************************************************************
465855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @brief      This function asks to close the file (associated to the context)
466855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @note       The context of the core file reader/writer is freed.
467855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @param      context: (IN/OUT) Context of the core file reader
468855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @return     M4NO_ERROR: there is no error
469855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @return     M4ERR_PARAMETER: at least one parameter is NULL
470855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @return     M4ERR_BAD_CONTEXT: provided context is not a valid one
471855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @return     M4ERR_ALLOC: there is no more memory available
472855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi ************************************************************************
473855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi*/
474855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
475855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray KundargiM4OSA_ERR M4OSA_fileCommonClose(M4OSA_UInt16 core_id, M4OSA_Context pContext)
476855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi{
477855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    M4OSA_FileContext* pFileContext = pContext;
478855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    M4OSA_Int32 i32_err_code=0;
479855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
480855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    M4OSA_TRACE3_2("M4OSA_fileCommonClose\tM4OSA_UInt16 %d\tM4OSA_Context 0x%x",
481855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi                                                             core_id, pContext);
482855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    M4OSA_DEBUG_IF2(M4OSA_NULL == pContext,
483855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi              M4ERR_PARAMETER, "M4OSA_fileCommonClose: pContext is M4OSA_NULL");
484855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#ifdef M4OSA_FILE_BLOCK_WITH_SEMAPHORE
485855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    M4OSA_DEBUG_IF2(M4OSA_NULL == pFileContext->semaphore_context, M4ERR_BAD_CONTEXT,
486855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi                     "M4OSA_fileCommonClose: semaphore_context is M4OSA_NULL");
487855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#endif /* M4OSA_FILE_BLOCK_WITH_SEMAPHORE */
488855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
489694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu    free(pFileContext->url_name);
490855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    pFileContext->url_name = M4OSA_NULL;
491855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
492694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu    free(pFileContext->file_name);
493855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    pFileContext->file_name = M4OSA_NULL;
494855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
495855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    i32_err_code = fclose(pFileContext->file_desc);
496855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
497855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    pFileContext->file_desc = M4OSA_NULL;
498855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
499855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#ifdef M4OSA_FILE_BLOCK_WITH_SEMAPHORE
500855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    M4OSA_semaphoreClose(pFileContext->semaphore_context);/* free the semaphore */
501855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#endif /* M4OSA_FILE_BLOCK_WITH_SEMAPHORE */
502855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
503694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu    free(pFileContext);
504855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
505855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    if (i32_err_code != 0)
506855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    {
507855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi        M4OSA_DEBUG(M4ERR_BAD_CONTEXT, "M4OSA_fileCommonClose");
508855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi        return M4ERR_BAD_CONTEXT;
509855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    }
510855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
511855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    return M4NO_ERROR;
512855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi}
513855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
514855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
515855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi/**
516855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi ************************************************************************
517855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @brief      This function gets the file attributes (associated to the
518855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi *             context)
519855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @param      context: (IN) Context of the core file reader
520855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @param      attribute: (OUT) The file attribute (allocated by the caller)
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 ************************************************************************
525855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi*/
526855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray KundargiM4OSA_ERR M4OSA_fileCommonGetAttribute(M4OSA_Context pContext, M4OSA_FileAttribute* pAttribute)
527855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi{
528855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
529855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    M4OSA_FileContext* fileContext = pContext;
530855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
531855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    struct stat TheStat;
532855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
533855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    M4OSA_TRACE3_2("M4OSA_fileCommonGetAttribute\tM4OSA_Context 0x%x\t"
534855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi        "M4OSA_FileAttribute* 0x%x", pContext, pAttribute);
535855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
536855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    M4OSA_DEBUG_IF2(M4OSA_NULL == pContext,        M4ERR_PARAMETER, "M4OSA_fileCommonGetAttribute");
537855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    M4OSA_DEBUG_IF2(M4OSA_NULL == pAttribute,    M4ERR_PARAMETER, "M4OSA_fileCommonGetAttribute");
538855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
539855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    if(stat((char*)fileContext->url_name, &TheStat) != 0)
540855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    {
541855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi        M4OSA_DEBUG(M4ERR_BAD_CONTEXT, "M4OSA_fileCommonGetAttribute");
542855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi        return M4ERR_BAD_CONTEXT;
543855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    }
544855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
545aa382f3637a68361989d5b70e3184bddcc472d3dhongteng    pAttribute->creationDate.time = (M4OSA_Time)TheStat.st_ctime;
546aa382f3637a68361989d5b70e3184bddcc472d3dhongteng    pAttribute->lastAccessDate.time = (M4OSA_Time)TheStat.st_atime;
547aa382f3637a68361989d5b70e3184bddcc472d3dhongteng    pAttribute->modifiedDate.time = (M4OSA_Time)TheStat.st_mtime;
548855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
549aa382f3637a68361989d5b70e3184bddcc472d3dhongteng    pAttribute->creationDate.timeScale = 1;
550aa382f3637a68361989d5b70e3184bddcc472d3dhongteng    pAttribute->lastAccessDate.timeScale = 1;
551aa382f3637a68361989d5b70e3184bddcc472d3dhongteng    pAttribute->modifiedDate.timeScale = 1;
552855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
553aa382f3637a68361989d5b70e3184bddcc472d3dhongteng    pAttribute->creationDate.referenceYear = 1970;
554aa382f3637a68361989d5b70e3184bddcc472d3dhongteng    pAttribute->lastAccessDate.referenceYear = 1970;
555aa382f3637a68361989d5b70e3184bddcc472d3dhongteng    pAttribute->modifiedDate.referenceYear = 1970;
556855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
557855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    pAttribute->modeAccess = fileContext->access_mode;
558855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
559855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    return M4NO_ERROR;
560855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi}
561855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
562855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi/**
563855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi ************************************************************************
564855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @brief      This function gets the file URL (associated to the context).
565855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @note
566855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @param      context: (IN) Context of the core file reader
567855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @param      url: (OUT) The buffer containing the URL (allocated by
568855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi *             M4OSA_fileCommonGetURL)
569855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @return     M4NO_ERROR: there is no error
570855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @return     M4ERR_PARAMETER: at least one parameter is NULL
571855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @return     M4ERR_BAD_CONTEXT: provided context is not a valid one
572855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @return     M4ERR_ALLOC: there is no more memory available
573855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi ************************************************************************
574855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi*/
575855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray KundargiM4OSA_ERR M4OSA_fileCommonGetURL(M4OSA_Context pContext, M4OSA_Char** pUrl)
576855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi{
577855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    M4OSA_FileContext* pFileContext = pContext;
578855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    M4OSA_UInt32    uiLength;
579855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
580855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    M4OSA_TRACE3_2("M4OSA_fileCommonGetURL\tM4OSA_Context 0x%x\tM4OSA_Char** 0x%x",
581855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi                    pContext, pUrl);
582855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
583855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    M4OSA_DEBUG_IF2(M4OSA_NULL == pContext,    M4ERR_PARAMETER,
584855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi                              "M4OSA_fileCommonGetURL: pContext is M4OSA_NULL");
585855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    M4OSA_DEBUG_IF2(M4OSA_NULL == pUrl,    M4ERR_PARAMETER,
586855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi                                  "M4OSA_fileCommonGetURL: pUrl is M4OSA_NULL");
587855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
588947721ba962c19913b76658cdbb19ae8c77c9c50Dheeraj Sharma    uiLength = strlen((const char *)pFileContext->url_name)+1;
589855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
590855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    /* Allocate the memory to store the url_name */
591694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu    *pUrl = (M4OSA_Char*)M4OSA_32bitAlignedMalloc(uiLength, M4OSA_FILE_COMMON,
592855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi                                    (M4OSA_Char*)"M4OSA_fileCommonGetURL: url");
593855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    if(M4OSA_NULL == *pUrl)
594855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    {
595855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi        M4OSA_DEBUG(M4ERR_ALLOC, "M4OSA_fileCommonGetURL");
596855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi        return M4ERR_ALLOC;
597855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    }
598855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
599855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    M4OSA_chrNCopy(*pUrl, pFileContext->url_name, uiLength);
600855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
601855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    return M4NO_ERROR;
602855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi}
603855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
604855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
605855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi/**
606855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi ************************************************************************
607855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @brief      This function gets a string containing the file name associated
608855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi *             to the input URL.
609855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @note       The user should not forget to delete the output string using
610855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi *             M4OSA_strDestroy
611855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @param      pUrl:            (IN) The buffer containing the URL
612855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @param      pFileName:    (OUT) The string containing the URL. It is
613855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi *                            allocated inside this function
614855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @return     M4NO_ERROR: there is no error
615855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @return     M4ERR_NOT_IMPLEMENTED: the URL does not match with the supported
616855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi *             file
617855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @return     M4ERR_ALLOC: there is no more memory available
618855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi ************************************************************************
619855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi*/
620855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray KundargiM4OSA_ERR M4OSA_fileCommonGetFilename(M4OSA_Char* pUrl, M4OSA_Char** pFileName)
621855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi{
622855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    M4OSA_Int32 i            = 0;
623855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    M4OSA_Int32 iUrlLen        = 0;
624855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    M4OSA_Int32 FileNameLen = 0;
625855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
626855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    M4OSA_Char* ptrUrl        = M4OSA_NULL;
627855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    M4OSA_Char* ptrFilename    = M4OSA_NULL;
628855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
629855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    M4OSA_TRACE3_2("M4OSA_fileCommonGetURL\tM4OSA_Char* %s\tM4OSA_Char** 0x%x",
630855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi                                                               pUrl, pFileName);
631855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
632855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    M4OSA_DEBUG_IF2(M4OSA_NULL == pUrl,    M4ERR_PARAMETER,
633855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi                             "M4OSA_fileCommonGetFilename: pUrl is M4OSA_NULL");
634855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    M4OSA_DEBUG_IF2(M4OSA_NULL == pFileName,    M4ERR_PARAMETER,
635855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi                        "M4OSA_fileCommonGetFilename: pFileName is M4OSA_NULL");
636855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
637855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    *pFileName = M4OSA_NULL;
638855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
639855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    /*Parse URL*/
640947721ba962c19913b76658cdbb19ae8c77c9c50Dheeraj Sharma    iUrlLen = strlen((const char *)pUrl);
641855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    for(i=iUrlLen-1; i>=0; i--)
642855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    {
643855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi        if (pUrl[i] != '\\' && pUrl[i] != '/')
644855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi        {
645855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi            FileNameLen++;
646855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi        }
647855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi        else
648855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi        {
649855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi            break; /* find the beginning of the file name */
650855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi        }
651855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    }
652855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
653694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu    ptrFilename = (M4OSA_Char*) M4OSA_32bitAlignedMalloc(FileNameLen+1, M4OSA_FILE_COMMON,
654855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi                    (M4OSA_Char*)"M4OSA_fileCommonGetFilename: Filename string");
655855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    if (ptrFilename == M4OSA_NULL)
656855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    {
657855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi        M4OSA_DEBUG(M4ERR_ALLOC, "M4OSA_fileCommonGetFilename");
658855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi        return M4ERR_ALLOC;
659855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    }
660855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
661855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    ptrUrl = pUrl + (iUrlLen - FileNameLen);
662855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    M4OSA_chrNCopy(ptrFilename, ptrUrl, FileNameLen+1);
663855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
664855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    *pFileName = ptrFilename;
665855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
666855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    return M4NO_ERROR;
667855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi}
668855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
669