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