Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'intern/cycles/util/util_path.cpp')
-rw-r--r--intern/cycles/util/util_path.cpp57
1 files changed, 56 insertions, 1 deletions
diff --git a/intern/cycles/util/util_path.cpp b/intern/cycles/util/util_path.cpp
index 086063bcb81..90093e32d58 100644
--- a/intern/cycles/util/util_path.cpp
+++ b/intern/cycles/util/util_path.cpp
@@ -24,6 +24,8 @@
#include <OpenImageIO/sysutil.h>
OIIO_NAMESPACE_USING
+#include <stdio.h>
+
#define BOOST_FILESYSTEM_VERSION 2
#include <boost/filesystem.hpp>
@@ -32,10 +34,12 @@ OIIO_NAMESPACE_USING
CCL_NAMESPACE_BEGIN
static string cached_path = "";
+static string cached_user_path = "";
-void path_init(const string& path)
+void path_init(const string& path, const string& user_path)
{
cached_path = path;
+ cached_user_path = user_path;
}
string path_get(const string& sub)
@@ -46,6 +50,14 @@ string path_get(const string& sub)
return path_join(cached_path, sub);
}
+string path_user_get(const string& sub)
+{
+ if(cached_user_path == "")
+ cached_user_path = path_dirname(Sysutil::this_program_path());
+
+ return path_join(cached_user_path, sub);
+}
+
string path_filename(const string& path)
{
return boost::filesystem::path(path).filename();
@@ -97,5 +109,48 @@ string path_files_md5_hash(const string& dir)
return hash.get_hex();
}
+bool path_write_binary(const string& path, const vector<uint8_t>& binary)
+{
+ /* write binary file from memory */
+ boost::filesystem::create_directories(path_dirname(path));
+
+ FILE *f = fopen(path.c_str(), "wb");
+
+ if(!f)
+ return false;
+
+ if(binary.size() > 0)
+ fwrite(&binary[0], sizeof(uint8_t), binary.size(), f);
+
+ fclose(f);
+
+ return true;
+}
+
+bool path_read_binary(const string& path, vector<uint8_t>& binary)
+{
+ binary.resize(boost::filesystem::file_size(path));
+
+ /* read binary file into memory */
+ FILE *f = fopen(path.c_str(), "rb");
+
+ if(!f)
+ return false;
+
+ if(binary.size() == 0) {
+ fclose(f);
+ return false;
+ }
+
+ if(fread(&binary[0], sizeof(uint8_t), binary.size(), f) != binary.size()) {
+ fclose(f);
+ return false;
+ }
+
+ fclose(f);
+
+ return true;
+}
+
CCL_NAMESPACE_END