summaryrefslogtreecommitdiffstats
path: root/libvideoeditor/osal/src/M4OSA_FileCommon.c
diff options
context:
space:
mode:
Diffstat (limited to 'libvideoeditor/osal/src/M4OSA_FileCommon.c')
-rwxr-xr-xlibvideoeditor/osal/src/M4OSA_FileCommon.c667
1 files changed, 0 insertions, 667 deletions
diff --git a/libvideoeditor/osal/src/M4OSA_FileCommon.c b/libvideoeditor/osal/src/M4OSA_FileCommon.c
deleted file mode 100755
index c12db5d..0000000
--- a/libvideoeditor/osal/src/M4OSA_FileCommon.c
+++ /dev/null
@@ -1,667 +0,0 @@
-/*
- * Copyright (C) 2011 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- ************************************************************************
- * @file M4OSA_FileCommon.c
- * @brief File common for Android
- * @note This file implements functions used by both the file writer
- * and file reader.
- ************************************************************************
-*/
-
-#ifndef USE_STAGEFRIGHT_CODECS
-#error "USE_STAGEFRIGHT_CODECS is not defined"
-#endif /*USE_STAGEFRIGHT_CODECS*/
-
-#ifdef UTF_CONVERSION
-#include <string.h>
-#endif /*UTF_CONVERSION*/
-
-#include <sys/stat.h>
-#include <errno.h>
-
-#ifdef M4OSA_FILE_BLOCK_WITH_SEMAPHORE
-#include "M4OSA_Semaphore.h"
-#endif /* M4OSA_FILE_BLOCK_WITH_SEMAPHORE */
-
-
-#include "M4OSA_Debug.h"
-#include "M4OSA_FileCommon.h"
-#include "M4OSA_FileCommon_priv.h"
-#include "M4OSA_Memory.h"
-#include "M4OSA_CharStar.h"
-
-/**
- ************************************************************************
- * @brief This function opens the provided URL and returns its context.
- * If an error occured, the context is set to NULL.
- * @param core_id: (IN) Core ID of the caller (M4OSA_FILE_READER or M4OSA_FILE_WRITER)
- * @param context: (OUT) Context of the core file reader
- * @param url: (IN) URL of the input file
- * @param fileModeAccess: (IN) File mode access
- * @return M4NO_ERROR: there is no error
- * @return M4ERR_PARAMETER: at least one parameter is NULL
- * @return M4ERR_ALLOC: there is no more memory available
- * @return M4ERR_NOT_IMPLEMENTED: the URL does not match with the supported
- * file
- * @return M4ERR_FILE_NOT_FOUND: the file cannot be found
- * @return M4ERR_FILE_LOCKED: the file is locked by an other
- * application/process
- * @return M4ERR_FILE_BAD_MODE_ACCESS: the file mode access is not correct
- ************************************************************************
-*/
-M4OSA_ERR M4OSA_fileCommonOpen(M4OSA_UInt16 core_id, M4OSA_Context* pContext,
- M4OSA_Char* pUrl, M4OSA_FileModeAccess fileModeAccess)
-{
-
- M4OSA_Int32 i = 0;
- M4OSA_Int32 iMode = 0;
- M4OSA_Int32 iSize = 0;
- M4OSA_Int32 iSavePos = 0;
-
- M4OSA_Char mode[4] = "";
- M4OSA_Char* pReadString = (M4OSA_Char*)"r";
- M4OSA_Char* pWriteString = (M4OSA_Char*)"w";
- M4OSA_Char* pAppendString = (M4OSA_Char*)"a";
- M4OSA_Char* pBinaryString = (M4OSA_Char*)"b";
- M4OSA_Char* pPlusString = (M4OSA_Char*)"+";
-
- M4OSA_ERR err = M4NO_ERROR;
-
- FILE* pFileHandler = M4OSA_NULL;
- M4OSA_FileContext *pFileContext = M4OSA_NULL;
-
-
-#ifdef UTF_CONVERSION
- /*FB: to test the UTF16->UTF8 conversion into Video Artist*/
- /*Convert the URL from UTF16 to UTF8*/
- M4OSA_Void* tempConversionBuf;
- M4OSA_UInt32 tempConversionSize = 1000;
-
- tempConversionBuf = (M4OSA_Char*)M4OSA_32bitAlignedMalloc(tempConversionSize +1, 0, "conversion buf");
- if(tempConversionBuf == M4OSA_NULL)
- {
- M4OSA_TRACE1_0("Error when allocating conversion buffer\n");
- return M4ERR_PARAMETER;
- }
- M4OSA_ToUTF8_OSAL(pUrl, tempConversionBuf, &tempConversionSize);
- ((M4OSA_Char*)tempConversionBuf)[tempConversionSize ] = '\0';
-
- printf("file open %s\n", tempConversionBuf);
-#endif /*UTF CONVERSION*/
-
- M4OSA_TRACE3_4("M4OSA_fileCommonOpen\t\tM4OSA_UInt16 %d\tM4OSA_Context* 0x%x\t"
- "M4OSA_Char* %s\tfileModeAccess %d", core_id, pContext, pUrl, fileModeAccess);
-
- M4OSA_DEBUG_IF2(M4OSA_NULL == pContext, M4ERR_PARAMETER, "M4OSA_fileCommonOpen: pContext is M4OSA_NULL");
- M4OSA_DEBUG_IF2(M4OSA_NULL == pUrl, M4ERR_PARAMETER, "M4OSA_fileCommonOpen: pUrl is M4OSA_NULL");
- M4OSA_DEBUG_IF2(0 == fileModeAccess, M4ERR_PARAMETER, "M4OSA_fileCommonOpen: fileModeAccess is 0");
-
- /* Read mode not set for the reader */
- M4OSA_DEBUG_IF1((M4OSA_FILE_READER == core_id) && !(fileModeAccess & M4OSA_kFileRead),
- M4ERR_FILE_BAD_MODE_ACCESS, "M4OSA_fileCommonOpen: M4OSA_kFileRead");
-
- /* Read mode not set for the reader */
- M4OSA_DEBUG_IF1((M4OSA_FILE_READER == core_id) && !(fileModeAccess & M4OSA_kFileRead),
- M4ERR_FILE_BAD_MODE_ACCESS, "M4OSA_fileCommonOpen: M4OSA_kFileRead");
-
- /* M4OSAfileReadOpen cannot be used with Write file mode access */
- M4OSA_DEBUG_IF1((M4OSA_FILE_READER == core_id) && (fileModeAccess & M4OSA_kFileWrite),
- M4ERR_FILE_BAD_MODE_ACCESS, "M4OSA_fileCommonOpen: M4OSA_kFileWrite");
-
- /* Append and Create flags cannot be used with Read */
- M4OSA_DEBUG_IF1((M4OSA_FILE_READER == core_id) && (fileModeAccess & M4OSA_kFileAppend),
- M4ERR_FILE_BAD_MODE_ACCESS, "M4OSA_fileCommonOpen: M4OSA_kFileAppend");
-
- M4OSA_DEBUG_IF1((M4OSA_FILE_READER == core_id) && (fileModeAccess & M4OSA_kFileCreate),
- M4ERR_FILE_BAD_MODE_ACCESS, "M4OSA_fileCommonOpen: M4OSA_kFileCreate");
-
- /* Write mode not set for the writer */
- M4OSA_DEBUG_IF1((M4OSA_FILE_WRITER == core_id) && !(fileModeAccess & M4OSA_kFileWrite),
- M4ERR_FILE_BAD_MODE_ACCESS, "M4OSA_fileCommonOpen: M4OSA_kFileWrite");
-
- /* Create flag necessary for opening file */
- if ((fileModeAccess & M4OSA_kFileRead) &&
- (fileModeAccess & M4OSA_kFileWrite)&&(fileModeAccess & M4OSA_kFileCreate))
- {
- strncat((char *)mode, (const char *)pWriteString, (size_t)1);
- strncat((char *)mode, (const char *)pPlusString, (size_t)1);
- }
- else
- {
- if(fileModeAccess & M4OSA_kFileAppend)
- {
- strncat((char *)mode, (const char *)pAppendString, (size_t)1);
- }
- else if(fileModeAccess & M4OSA_kFileRead)
- {
- strncat((char *)mode, (const char *)pReadString, (size_t)1);
- }
- else if(fileModeAccess & M4OSA_kFileWrite)
- {
- strncat((char *)mode, (const char *)pWriteString, (size_t)1);
- }
-
- if((fileModeAccess & M4OSA_kFileRead)&&(fileModeAccess & M4OSA_kFileWrite))
- {
- strncat((char *)mode,(const char *)pPlusString, (size_t)1);
- }
- }
-
- if(!(fileModeAccess & M4OSA_kFileIsTextMode))
- {
- strncat((char *)mode, (const char *)pBinaryString,(size_t)1);
- }
-
- /*Open the file*/
-
-#ifdef UTF_CONVERSION
- /*Open the converted path*/
- pFileHandler = fopen((const char *)tempConversionBuf, (const char *)mode);
- /*Free the temporary decoded buffer*/
- free(tempConversionBuf);
-#else /* UTF_CONVERSION */
- pFileHandler = fopen((const char *)pUrl, (const char *)mode);
-#endif /* UTF_CONVERSION */
-
- if (M4OSA_NULL == pFileHandler)
- {
- switch(errno)
- {
- case ENOENT:
- {
- M4OSA_DEBUG(M4ERR_FILE_NOT_FOUND, "M4OSA_fileCommonOpen: No such file or directory");
- M4OSA_TRACE1_1("File not found: %s", pUrl);
- return M4ERR_FILE_NOT_FOUND;
- }
- case EACCES:
- {
- M4OSA_DEBUG(M4ERR_FILE_LOCKED, "M4OSA_fileCommonOpen: Permission denied");
- return M4ERR_FILE_LOCKED;
- }
- case EINVAL:
- {
- M4OSA_DEBUG(M4ERR_FILE_BAD_MODE_ACCESS, "M4OSA_fileCommonOpen: Invalid Argument");
- return M4ERR_FILE_BAD_MODE_ACCESS;
- }
- case EMFILE:
- case ENOSPC:
- case ENOMEM:
- {
- M4OSA_DEBUG(M4ERR_ALLOC, "M4OSA_fileCommonOpen: Too many open files");
- return M4ERR_ALLOC;
- }
- default:
- {
- M4OSA_DEBUG(M4ERR_NOT_IMPLEMENTED, "M4OSA_fileCommonOpen");
- return M4ERR_NOT_IMPLEMENTED;
- }
- }
- }
-
- /* Allocate the file context */
- pFileContext = (M4OSA_FileContext*) M4OSA_32bitAlignedMalloc(sizeof(M4OSA_FileContext),
- core_id, (M4OSA_Char*)"M4OSA_fileCommonOpen: file context");
- if (M4OSA_NULL == pFileContext)
- {
- fclose(pFileHandler);
- M4OSA_DEBUG(M4ERR_ALLOC, "M4OSA_fileCommonOpen");
- return M4ERR_ALLOC;
- }
-
- pFileContext->file_desc = pFileHandler;
- pFileContext->access_mode = fileModeAccess;
- pFileContext->current_seek = SeekNone;
- pFileContext->b_is_end_of_file = M4OSA_FALSE;
-
- /**
- * Note: Never use this expression "i = (value1 == value2) ? x: y;"
- * because that doens't compile on other platforms (ADS for example)
- * Use: if(value1 == value2)
- * { i= x; ..etc
- */
- pFileContext->coreID_write = 0;
- pFileContext->coreID_read = 0;
- pFileContext->m_DescrModeAccess = M4OSA_kDescNoneAccess;
-
- if (M4OSA_FILE_READER == core_id)
- {
- pFileContext->coreID_read = core_id;
- pFileContext->m_DescrModeAccess = M4OSA_kDescReadAccess;
- }
- else if (M4OSA_FILE_WRITER == core_id)
- {
- pFileContext->coreID_write = core_id;
- pFileContext->m_DescrModeAccess = M4OSA_kDescWriteAccess;
- }
-
- pFileContext->read_position = 0;
- pFileContext->write_position = 0;
-
- /* Allocate the memory to store the URL string */
- pFileContext->url_name = (M4OSA_Char*) M4OSA_32bitAlignedMalloc(strlen((const char *)pUrl)+1,
- core_id, (M4OSA_Char*)"M4OSA_fileCommonOpen: URL name");
- if (M4OSA_NULL == pFileContext->url_name)
- {
- fclose(pFileHandler);
- free(pFileContext);
- M4OSA_DEBUG(M4ERR_ALLOC, "M4OSA_fileCommonOpen");
- return M4ERR_ALLOC;
- }
- M4OSA_chrNCopy(pFileContext->url_name, pUrl, strlen((const char *)pUrl)+1);
-
- /* Get the file name */
- err = M4OSA_fileCommonGetFilename(pUrl, &pFileContext->file_name);
- if(M4NO_ERROR != err)
- {
- fclose(pFileHandler);
- free(pFileContext->url_name);
- free(pFileContext);
- M4OSA_DEBUG(err, "M4OSA_fileCommonOpen");
- return err;
- }
-
-#ifdef M4OSA_FILE_BLOCK_WITH_SEMAPHORE
- M4OSA_semaphoreOpen(&(pFileContext->semaphore_context), 1); /* Allocate the semaphore */
-#endif /* M4OSA_FILE_BLOCK_WITH_SEMAPHORE */
-
-
-
-#ifdef USE_STAGEFRIGHT_CODECS
- // Workaround for file system bug on Stingray/Honeycomb where a file re-created will keep
- // the original file's size filled with 0s. Do not seek to the end to avoid ill effects
- if(fileModeAccess & M4OSA_kFileAppend) {
- /* Get the file size */
- iSavePos = ftell(pFileHandler); /* 1- Check the first position */
- fseek(pFileHandler, 0, SEEK_END); /* 2- Go to the end of the file*/
- iSize = ftell(pFileHandler); /* 3- Check the file size */
- fseek(pFileHandler, iSavePos, SEEK_SET);/* 4- go to the first position */
- } else {
- iSize = 0;
- }
-#else /* USE_STAGEFRIGHT_CODECS */
- /* Get the file size */
- iSavePos = ftell(pFileHandler); /* 1- Check the first position */
- fseek(pFileHandler, 0, SEEK_END); /* 2- Go to the end of the file*/
- iSize = ftell(pFileHandler); /* 3- Check the file size */
- fseek(pFileHandler, iSavePos, SEEK_SET);/* 4- go to the first position */
-#endif /* USE_STAGEFRIGHT_CODECS */
-
-
-
- /* Warning possible overflow if the file is higher than 2GBytes */
- pFileContext->file_size = iSize;
-
- *pContext = pFileContext;
-
- return M4NO_ERROR;
-}
-
-
-/**
- ************************************************************************
- * @brief This function convert from UTF16 to UTF8
- * @param pBufferIn: (IN) UTF16 input path
- * @param pBufferOut: (OUT) UTF8 output path
- * @param bufferOutSize: (IN/OUT) size of the output path
- * @return M4NO_ERROR: there is no error
- * @return M4ERR_PARAMETER: the output path size is not enough to contain
- * the decoded path
- ************************************************************************
-*/
-#ifdef UTF_CONVERSION
-M4OSA_ERR M4OSA_ToUTF8_OSAL (M4OSA_Void *pBufferIn, M4OSA_UInt8 *pBufferOut,
- M4OSA_UInt32 *bufferOutSize)
-{
- M4OSA_UInt16 i;
- wchar_t *w_str = (wchar_t *) pBufferIn;
- M4OSA_UInt32 len, size_needed, size_given;
- if (pBufferIn == NULL)
- {
- *pBufferOut=NULL;
- *bufferOutSize=1;
- }
- else
- {
- len = wcslen(w_str);
- size_needed = len+1;
- size_given = *bufferOutSize;
-
- *bufferOutSize=size_needed;
- if (size_given < size_needed )
- {
- return M4ERR_PARAMETER;
- }
- else
- {
- for (i=0; i<len; i++)
- {
- pBufferOut[i]=(M4OSA_UInt8)w_str[i];
- }
- pBufferOut[len]=0;
- }
- }
- return M4NO_ERROR;
-}
-#endif /*UTF CONVERSION*/
-
-/**
- ************************************************************************
- * @brief This function seeks at the provided position.
- * @param context: (IN/OUT) Context of the core file reader
- * @param seekMode: (IN) Seek access mode
- * @param position: (IN/OUT) Position in the file
- * @return M4NO_ERROR: there is no error
- * @return M4ERR_PARAMETER: at least one parameter is NULL
- * @return M4ERR_BAD_CONTEXT: provided context is not a valid one
- * @return M4ERR_ALLOC: there is no more memory available
- * @return M4ERR_FILE_INVALID_POSITION: the position cannot be reached
- ************************************************************************
-*/
-M4OSA_ERR M4OSA_fileCommonSeek(M4OSA_Context pContext,
- M4OSA_FileSeekAccessMode seekMode,
- M4OSA_FilePosition* pFilePos)
-{
- M4OSA_FileContext* pFileContext = pContext;
- M4OSA_FilePosition fpos_current;
- M4OSA_FilePosition fpos_seek;
- M4OSA_FilePosition fpos_null = 0;
- M4OSA_FilePosition fpos_neg_un = -1;
- M4OSA_FilePosition fpos_file_size;
- M4OSA_FilePosition fpos_seek_from_beginning;
-
- M4OSA_TRACE3_3("M4OSA_fileCommonSeek\t\tM4OSA_Context 0x%x\t M4OSA_FileSeekAccessMode %d\tM4OSA_FilePosition* 0x%x",
- pContext, seekMode, pFilePos);
-
- M4OSA_DEBUG_IF2(M4OSA_NULL == pContext, M4ERR_PARAMETER, "M4OSA_fileCommonSeek");
- M4OSA_DEBUG_IF2(0 == seekMode, M4ERR_PARAMETER, "M4OSA_fileCommonSeek");
- M4OSA_DEBUG_IF2(M4OSA_NULL == pFilePos, M4ERR_PARAMETER, "M4OSA_fileCommonSeek");
-
- fpos_file_size = pFileContext->file_size;
-
- if(SeekRead == pFileContext->current_seek)
- {
- fpos_current = pFileContext->read_position;
- }
- else if(SeekWrite == pFileContext->current_seek)
- {
- fpos_current = pFileContext->write_position;
- }
- else
- {
- fpos_current = 0;
- }
-
- switch(seekMode)
- {
- case M4OSA_kFileSeekCurrent:
- {
- fpos_seek = *pFilePos;
- break;
- }
- case M4OSA_kFileSeekBeginning:
- {
- fpos_seek = *pFilePos - fpos_current;
- break;
- }
- case M4OSA_kFileSeekEnd:
- {
- fpos_seek = *pFilePos + fpos_file_size - fpos_current;
- break;
- }
- default:
- {
- return M4ERR_PARAMETER;
- }
- }
-
- fpos_seek_from_beginning = fpos_current + fpos_seek;
-
- if(fseek(pFileContext->file_desc, fpos_seek, SEEK_CUR) != 0)
- {
- switch(errno)
- {
- case EINVAL:
- {
- /* meaning the value for origin is invalid or the position
- specified by offset is before the beginning of the file */
- return M4ERR_FILE_INVALID_POSITION;
- }
-
- case EBADF:
- default:
- {
- return M4ERR_BAD_CONTEXT;/* file handle is invalid */
- }
- }
- }
-
- /* Set the returned position from the beginning of the file */
- *pFilePos = fpos_seek_from_beginning;
-
- /* SEEK done, reset end of file value */
- pFileContext->b_is_end_of_file = M4OSA_FALSE;
-
- return M4NO_ERROR;
-}
-
-
-/**
- ************************************************************************
- * @brief This function asks to close the file (associated to the context)
- * @note The context of the core file reader/writer is freed.
- * @param context: (IN/OUT) Context of the core file reader
- * @return M4NO_ERROR: there is no error
- * @return M4ERR_PARAMETER: at least one parameter is NULL
- * @return M4ERR_BAD_CONTEXT: provided context is not a valid one
- * @return M4ERR_ALLOC: there is no more memory available
- ************************************************************************
-*/
-
-M4OSA_ERR M4OSA_fileCommonClose(M4OSA_UInt16 core_id, M4OSA_Context pContext)
-{
- M4OSA_FileContext* pFileContext = pContext;
- M4OSA_Int32 i32_err_code=0;
-
- M4OSA_TRACE3_2("M4OSA_fileCommonClose\tM4OSA_UInt16 %d\tM4OSA_Context 0x%x",
- core_id, pContext);
- M4OSA_DEBUG_IF2(M4OSA_NULL == pContext,
- M4ERR_PARAMETER, "M4OSA_fileCommonClose: pContext is M4OSA_NULL");
-#ifdef M4OSA_FILE_BLOCK_WITH_SEMAPHORE
- M4OSA_DEBUG_IF2(M4OSA_NULL == pFileContext->semaphore_context, M4ERR_BAD_CONTEXT,
- "M4OSA_fileCommonClose: semaphore_context is M4OSA_NULL");
-#endif /* M4OSA_FILE_BLOCK_WITH_SEMAPHORE */
-
- free(pFileContext->url_name);
- pFileContext->url_name = M4OSA_NULL;
-
- free(pFileContext->file_name);
- pFileContext->file_name = M4OSA_NULL;
-
- i32_err_code = fclose(pFileContext->file_desc);
-
- pFileContext->file_desc = M4OSA_NULL;
-
-#ifdef M4OSA_FILE_BLOCK_WITH_SEMAPHORE
- M4OSA_semaphoreClose(pFileContext->semaphore_context);/* free the semaphore */
-#endif /* M4OSA_FILE_BLOCK_WITH_SEMAPHORE */
-
- free(pFileContext);
-
- if (i32_err_code != 0)
- {
- M4OSA_DEBUG(M4ERR_BAD_CONTEXT, "M4OSA_fileCommonClose");
- return M4ERR_BAD_CONTEXT;
- }
-
- return M4NO_ERROR;
-}
-
-
-/**
- ************************************************************************
- * @brief This function gets the file attributes (associated to the
- * context)
- * @param context: (IN) Context of the core file reader
- * @param attribute: (OUT) The file attribute (allocated by the caller)
- * @return M4NO_ERROR: there is no error
- * @return M4ERR_PARAMETER: at least one parameter is NULL
- * @return M4ERR_BAD_CONTEXT: provided context is not a valid one
- ************************************************************************
-*/
-M4OSA_ERR M4OSA_fileCommonGetAttribute(M4OSA_Context pContext, M4OSA_FileAttribute* pAttribute)
-{
-
- M4OSA_FileContext* fileContext = pContext;
-
- struct stat TheStat;
-
- M4OSA_TRACE3_2("M4OSA_fileCommonGetAttribute\tM4OSA_Context 0x%x\t"
- "M4OSA_FileAttribute* 0x%x", pContext, pAttribute);
-
- M4OSA_DEBUG_IF2(M4OSA_NULL == pContext, M4ERR_PARAMETER, "M4OSA_fileCommonGetAttribute");
- M4OSA_DEBUG_IF2(M4OSA_NULL == pAttribute, M4ERR_PARAMETER, "M4OSA_fileCommonGetAttribute");
-
- if(stat((char*)fileContext->url_name, &TheStat) != 0)
- {
- M4OSA_DEBUG(M4ERR_BAD_CONTEXT, "M4OSA_fileCommonGetAttribute");
- return M4ERR_BAD_CONTEXT;
- }
-
- pAttribute->creationDate.time = (M4OSA_Time)TheStat.st_ctime;
- pAttribute->lastAccessDate.time = (M4OSA_Time)TheStat.st_atime;
- pAttribute->modifiedDate.time = (M4OSA_Time)TheStat.st_mtime;
-
- pAttribute->creationDate.timeScale = 1;
- pAttribute->lastAccessDate.timeScale = 1;
- pAttribute->modifiedDate.timeScale = 1;
-
- pAttribute->creationDate.referenceYear = 1970;
- pAttribute->lastAccessDate.referenceYear = 1970;
- pAttribute->modifiedDate.referenceYear = 1970;
-
- pAttribute->modeAccess = fileContext->access_mode;
-
- return M4NO_ERROR;
-}
-
-/**
- ************************************************************************
- * @brief This function gets the file URL (associated to the context).
- * @note
- * @param context: (IN) Context of the core file reader
- * @param url: (OUT) The buffer containing the URL (allocated by
- * M4OSA_fileCommonGetURL)
- * @return M4NO_ERROR: there is no error
- * @return M4ERR_PARAMETER: at least one parameter is NULL
- * @return M4ERR_BAD_CONTEXT: provided context is not a valid one
- * @return M4ERR_ALLOC: there is no more memory available
- ************************************************************************
-*/
-M4OSA_ERR M4OSA_fileCommonGetURL(M4OSA_Context pContext, M4OSA_Char** pUrl)
-{
- M4OSA_FileContext* pFileContext = pContext;
- M4OSA_UInt32 uiLength;
-
- M4OSA_TRACE3_2("M4OSA_fileCommonGetURL\tM4OSA_Context 0x%x\tM4OSA_Char** 0x%x",
- pContext, pUrl);
-
- M4OSA_DEBUG_IF2(M4OSA_NULL == pContext, M4ERR_PARAMETER,
- "M4OSA_fileCommonGetURL: pContext is M4OSA_NULL");
- M4OSA_DEBUG_IF2(M4OSA_NULL == pUrl, M4ERR_PARAMETER,
- "M4OSA_fileCommonGetURL: pUrl is M4OSA_NULL");
-
- uiLength = strlen((const char *)pFileContext->url_name)+1;
-
- /* Allocate the memory to store the url_name */
- *pUrl = (M4OSA_Char*)M4OSA_32bitAlignedMalloc(uiLength, M4OSA_FILE_COMMON,
- (M4OSA_Char*)"M4OSA_fileCommonGetURL: url");
- if(M4OSA_NULL == *pUrl)
- {
- M4OSA_DEBUG(M4ERR_ALLOC, "M4OSA_fileCommonGetURL");
- return M4ERR_ALLOC;
- }
-
- M4OSA_chrNCopy(*pUrl, pFileContext->url_name, uiLength);
-
- return M4NO_ERROR;
-}
-
-
-/**
- ************************************************************************
- * @brief This function gets a string containing the file name associated
- * to the input URL.
- * @note The user should not forget to delete the output string using
- * M4OSA_strDestroy
- * @param pUrl: (IN) The buffer containing the URL
- * @param pFileName: (OUT) The string containing the URL. It is
- * allocated inside this function
- * @return M4NO_ERROR: there is no error
- * @return M4ERR_NOT_IMPLEMENTED: the URL does not match with the supported
- * file
- * @return M4ERR_ALLOC: there is no more memory available
- ************************************************************************
-*/
-M4OSA_ERR M4OSA_fileCommonGetFilename(M4OSA_Char* pUrl, M4OSA_Char** pFileName)
-{
- M4OSA_Int32 i = 0;
- M4OSA_Int32 iUrlLen = 0;
- M4OSA_Int32 FileNameLen = 0;
-
- M4OSA_Char* ptrUrl = M4OSA_NULL;
- M4OSA_Char* ptrFilename = M4OSA_NULL;
-
- M4OSA_TRACE3_2("M4OSA_fileCommonGetURL\tM4OSA_Char* %s\tM4OSA_Char** 0x%x",
- pUrl, pFileName);
-
- M4OSA_DEBUG_IF2(M4OSA_NULL == pUrl, M4ERR_PARAMETER,
- "M4OSA_fileCommonGetFilename: pUrl is M4OSA_NULL");
- M4OSA_DEBUG_IF2(M4OSA_NULL == pFileName, M4ERR_PARAMETER,
- "M4OSA_fileCommonGetFilename: pFileName is M4OSA_NULL");
-
- *pFileName = M4OSA_NULL;
-
- /*Parse URL*/
- iUrlLen = strlen((const char *)pUrl);
- for(i=iUrlLen-1; i>=0; i--)
- {
- if (pUrl[i] != '\\' && pUrl[i] != '/')
- {
- FileNameLen++;
- }
- else
- {
- break; /* find the beginning of the file name */
- }
- }
-
- ptrFilename = (M4OSA_Char*) M4OSA_32bitAlignedMalloc(FileNameLen+1, M4OSA_FILE_COMMON,
- (M4OSA_Char*)"M4OSA_fileCommonGetFilename: Filename string");
- if (ptrFilename == M4OSA_NULL)
- {
- M4OSA_DEBUG(M4ERR_ALLOC, "M4OSA_fileCommonGetFilename");
- return M4ERR_ALLOC;
- }
-
- ptrUrl = pUrl + (iUrlLen - FileNameLen);
- M4OSA_chrNCopy(ptrFilename, ptrUrl, FileNameLen+1);
-
- *pFileName = ptrFilename;
-
- return M4NO_ERROR;
-}
-