summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGerald Begumisa <ben_g@users.sourceforge.net>2007-09-05 19:59:36 +0000
committerGerald Begumisa <ben_g@users.sourceforge.net>2007-09-05 19:59:36 +0000
commitf5408a17ac87c54a7a991e310147debf95123a5d (patch)
tree19136df6152b02ede0d9517e9fa27878f9994a63
parent3aeac353ac9ecfdbbb29c80fa683628af070b019 (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.cpp2
-rw-r--r--orkbasecxx/Utils.cpp58
-rw-r--r--orkbasecxx/Utils.h2
-rw-r--r--orkbasecxx/audiofile/LibSndFileFile.cpp3
-rw-r--r--orkbasecxx/audiofile/MediaChunkFile.cpp2
-rw-r--r--orkbasecxx/audiofile/PcmFile.cpp3
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)