diff options
author | Gerald Begumisa <ben_g@users.sourceforge.net> | 2007-09-05 19:59:36 +0000 |
---|---|---|
committer | Gerald Begumisa <ben_g@users.sourceforge.net> | 2007-09-05 19:59:36 +0000 |
commit | f5408a17ac87c54a7a991e310147debf95123a5d (patch) | |
tree | 19136df6152b02ede0d9517e9fa27878f9994a63 | |
parent | 3aeac353ac9ecfdbbb29c80fa683628af070b019 (diff) |
Added functionality to set the ownership of the directories leading up to the media file to the values specified in config.xml
git-svn-id: https://oreka.svn.sourceforge.net/svnroot/oreka/trunk@481 09dcff7a-b715-0410-9601-b79a96267cd0
-rw-r--r-- | orkbasecxx/BatchProcessing.cpp | 2 | ||||
-rw-r--r-- | orkbasecxx/Utils.cpp | 58 | ||||
-rw-r--r-- | orkbasecxx/Utils.h | 2 | ||||
-rw-r--r-- | orkbasecxx/audiofile/LibSndFileFile.cpp | 3 | ||||
-rw-r--r-- | orkbasecxx/audiofile/MediaChunkFile.cpp | 2 | ||||
-rw-r--r-- | orkbasecxx/audiofile/PcmFile.cpp | 3 |
6 files changed, 63 insertions, 7 deletions
diff --git a/orkbasecxx/BatchProcessing.cpp b/orkbasecxx/BatchProcessing.cpp index dd082b0..6cd4c68 100644 --- a/orkbasecxx/BatchProcessing.cpp +++ b/orkbasecxx/BatchProcessing.cpp @@ -249,7 +249,7 @@ void BatchProcessing::ThreadHandler(void *args) } CStdString path = CONFIG.m_audioOutputPath + "/" + audioTapeRef->GetPath(); - FileRecursiveMkdir(path); + FileRecursiveMkdir(path, CONFIG.m_audioFilePermissions, CONFIG.m_audioFileOwner, CONFIG.m_audioFileGroup, CONFIG.m_audioOutputPath); CStdString file = path + "/" + audioTapeRef->GetIdentifier(); outFileRef->Open(file, AudioFile::WRITE, false, fileRef->GetSampleRate()); diff --git a/orkbasecxx/Utils.cpp b/orkbasecxx/Utils.cpp index fa670e4..3a6bc84 100644 --- a/orkbasecxx/Utils.cpp +++ b/orkbasecxx/Utils.cpp @@ -71,10 +71,16 @@ bool FileCanOpen(CStdString& path) return false; } -void FileRecursiveMkdir(CStdString& path) +void FileRecursiveMkdir(CStdString& path, int permissions, CStdString owner, CStdString group, CStdString rootDirectory) { - int position = 0; + int position = 0, newPermissions = permissions; bool done = false; + + /* + * Create the directories first. We have separated this because + * we do not want the introduction of rootDirectory to break + * any old functionality. + */ while (!done) { position = path.Find('/', position+1); @@ -88,6 +94,54 @@ void FileRecursiveMkdir(CStdString& path) ACE_OS::mkdir((PCSTR)level); } } + + done = false; + position = 0; + if(rootDirectory.size()) + { + if(path.Find(rootDirectory) >= 0) + { + position = 1 + rootDirectory.size(); + } + } + + if(newPermissions & S_IRUSR) + { + newPermissions |= S_IXUSR; + } + + if(newPermissions & S_IRGRP) + { + newPermissions |= S_IXGRP; + } + + if(newPermissions & S_IROTH) + { + newPermissions |= S_IXOTH; + } + + while (!done) + { + position = path.Find('/', position+1); + if (position == -1) + { + done = true; + } + else + { + CStdString level = path.Left(position); + + if(owner.size() && group.size()) + { + FileSetOwnership(level, owner, group); + } + + if(newPermissions) + { + FileSetPermissions(level, newPermissions); + } + } + } } int FileSetPermissions(CStdString filename, int permissions) diff --git a/orkbasecxx/Utils.h b/orkbasecxx/Utils.h index dd82b76..a0ef277 100644 --- a/orkbasecxx/Utils.h +++ b/orkbasecxx/Utils.h @@ -73,7 +73,7 @@ CStdString DLL_IMPORT_EXPORT_ORKBASE FileBaseName(CStdString& path); CStdString DLL_IMPORT_EXPORT_ORKBASE FilePath(CStdString& path); CStdString DLL_IMPORT_EXPORT_ORKBASE FileStripExtension(CStdString& filename); bool DLL_IMPORT_EXPORT_ORKBASE FileCanOpen(CStdString& path); -void DLL_IMPORT_EXPORT_ORKBASE FileRecursiveMkdir(CStdString& path); +void DLL_IMPORT_EXPORT_ORKBASE FileRecursiveMkdir(CStdString& path, int permissions, CStdString owner, CStdString group, CStdString rootDirectory); int DLL_IMPORT_EXPORT_ORKBASE FileSetPermissions(CStdString filename, int permissions); int DLL_IMPORT_EXPORT_ORKBASE FileSetOwnership(CStdString filename, CStdString owner, CStdString group); diff --git a/orkbasecxx/audiofile/LibSndFileFile.cpp b/orkbasecxx/audiofile/LibSndFileFile.cpp index 3da3b77..c7377fd 100644 --- a/orkbasecxx/audiofile/LibSndFileFile.cpp +++ b/orkbasecxx/audiofile/LibSndFileFile.cpp @@ -15,6 +15,7 @@ #include "Utils.h" #include "LibSndFileFile.h" +#include "ConfigManager.h" LibSndFileFile::LibSndFileFile(int fileFormat) { @@ -54,7 +55,7 @@ void LibSndFileFile::Open(CStdString& filename, fileOpenModeEnum mode, bool ster throw(CStdString("libsndfile: Selected output format not supported")); } - FileRecursiveMkdir(m_filename); + FileRecursiveMkdir(m_filename, CONFIG.m_audioFilePermissions, CONFIG.m_audioFileOwner, CONFIG.m_audioFileGroup, CONFIG.m_audioOutputPath); int sndFileMode; mode == READ ? sndFileMode = SFM_READ : sndFileMode = SFM_WRITE; diff --git a/orkbasecxx/audiofile/MediaChunkFile.cpp b/orkbasecxx/audiofile/MediaChunkFile.cpp index 314f337..3856be5 100644 --- a/orkbasecxx/audiofile/MediaChunkFile.cpp +++ b/orkbasecxx/audiofile/MediaChunkFile.cpp @@ -176,7 +176,7 @@ void MediaChunkFile::Open(CStdString& filename, fileOpenModeEnum mode, bool ster } else { - FileRecursiveMkdir(m_filename); + FileRecursiveMkdir(m_filename, CONFIG.m_audioFilePermissions, CONFIG.m_audioFileOwner, CONFIG.m_audioFileGroup, CONFIG.m_audioOutputPath); m_stream = ACE_OS::fopen((PCSTR)m_filename, "wb"); if(CONFIG.m_audioFilePermissions) diff --git a/orkbasecxx/audiofile/PcmFile.cpp b/orkbasecxx/audiofile/PcmFile.cpp index 7c66cd5..85f49e3 100644 --- a/orkbasecxx/audiofile/PcmFile.cpp +++ b/orkbasecxx/audiofile/PcmFile.cpp @@ -13,6 +13,7 @@ #include "Utils.h" #include "PcmFile.h" +#include "ConfigManager.h" PcmFile::PcmFile() { @@ -104,7 +105,7 @@ void PcmFile::Open(CStdString& filename, fileOpenModeEnum mode, bool stereo, int } else { - FileRecursiveMkdir(m_filename); + FileRecursiveMkdir(m_filename, CONFIG.m_audioFilePermissions, CONFIG.m_audioFileOwner, CONFIG.m_audioFileGroup, CONFIG.m_audioOutputPath); m_stream = ACE_OS::fopen((PCSTR)m_filename, "wb"); } if(!m_stream) |