Fix T38311: cycles BVH cache crash on Windows.
authorBrecht Van Lommel <brechtvanlommel@gmail.com>
Thu, 23 Jan 2014 00:13:09 +0000 (01:13 +0100)
committerBrecht Van Lommel <brechtvanlommel@gmail.com>
Thu, 23 Jan 2014 00:13:46 +0000 (01:13 +0100)
intern/cycles/util/util_cache.cpp
intern/cycles/util/util_path.cpp
intern/cycles/util/util_path.h

index f1c9dcd79ab340adf4c6b042ad079178e798328f..e20c3a67b75a720fbe4b28df94334cd19cdf3dc3 100644 (file)
@@ -113,23 +113,7 @@ bool Cache::lookup(CacheData& key, CacheData& value)
 
 void Cache::clear_except(const string& name, const set<string>& except)
 {
 
 void Cache::clear_except(const string& name, const set<string>& except)
 {
-       string dir = path_user_get("cache");
-
-       if(boost::filesystem::exists(dir)) {
-               boost::filesystem::directory_iterator it(dir), it_end;
-
-               for(; it != it_end; it++) {
-#if (BOOST_FILESYSTEM_VERSION == 2)
-                       string filename = it->path().filename();
-#else
-                       string filename = it->path().filename().string();
-#endif
-
-                       if(boost::starts_with(filename, name))
-                               if(except.find(filename) == except.end())
-                                       boost::filesystem::remove(it->path());
-               }
-       }
+       path_cache_clear_except(name, except);
 }
 
 CCL_NAMESPACE_END
 }
 
 CCL_NAMESPACE_END
index 1a0bf88bbd1a4240eec13c2cb562e0017fd67254..4fd5df4316d53349607b09b20fb4ffd3ec669c34 100644 (file)
@@ -264,5 +264,27 @@ FILE *path_fopen(const string& path, const string& mode)
 #endif
 }
 
 #endif
 }
 
+void path_cache_clear_except(const string& name, const set<string>& except)
+{
+       string dir = path_user_get("cache");
+
+       if(boost::filesystem::exists(dir)) {
+               boost::filesystem::directory_iterator it(dir), it_end;
+
+               for(; it != it_end; it++) {
+#if (BOOST_FILESYSTEM_VERSION == 2)
+                       string filename = from_boost(it->path().filename());
+#else
+                       string filename = from_boost(it->path().filename().string());
+#endif
+
+                       if(boost::starts_with(filename, name))
+                               if(except.find(filename) == except.end())
+                                       boost::filesystem::remove(to_boost(filename));
+               }
+       }
+
+}
+
 CCL_NAMESPACE_END
 
 CCL_NAMESPACE_END
 
index 3cffd7d91e9868ca27228531d09355990a2eaf21..e9041e63dae4b4c48797dae64ac5bbcd8d26f89c 100644 (file)
 
 #include <stdio.h>
 
 
 #include <stdio.h>
 
+#include "util_set.h"
 #include "util_string.h"
 #include "util_types.h"
 #include "util_vector.h"
 
 CCL_NAMESPACE_BEGIN
 
 #include "util_string.h"
 #include "util_types.h"
 #include "util_vector.h"
 
 CCL_NAMESPACE_BEGIN
 
+/* program paths */
 void path_init(const string& path = "", const string& user_path = "");
 string path_get(const string& sub = "");
 string path_user_get(const string& sub = "");
 
 void path_init(const string& path = "", const string& user_path = "");
 string path_get(const string& sub = "");
 string path_user_get(const string& sub = "");
 
+/* path string manipulation */
 string path_filename(const string& path);
 string path_dirname(const string& path);
 string path_join(const string& dir, const string& file);
 string path_filename(const string& path);
 string path_dirname(const string& path);
 string path_join(const string& dir, const string& file);
-
 string path_escape(const string& path);
 string path_escape(const string& path);
+
+/* file info */
 bool path_exists(const string& path);
 string path_files_md5_hash(const string& dir);
 bool path_exists(const string& path);
 string path_files_md5_hash(const string& dir);
+uint64_t path_modified_time(const string& path);
 
 
+/* directory utility */
 void path_create_directories(const string& path);
 void path_create_directories(const string& path);
+
+/* file read/write utilities */
+FILE *path_fopen(const string& path, const string& mode);
+
 bool path_write_binary(const string& path, const vector<uint8_t>& binary);
 bool path_write_text(const string& path, string& text);
 bool path_read_binary(const string& path, vector<uint8_t>& binary);
 bool path_read_text(const string& path, string& text);
 
 bool path_write_binary(const string& path, const vector<uint8_t>& binary);
 bool path_write_text(const string& path, string& text);
 bool path_read_binary(const string& path, vector<uint8_t>& binary);
 bool path_read_text(const string& path, string& text);
 
-uint64_t path_modified_time(const string& path);
-
+/* source code utility */
 string path_source_replace_includes(const string& source, const string& path);
 
 string path_source_replace_includes(const string& source, const string& path);
 
-FILE *path_fopen(const string& path, const string& mode);
+/* cache utility */
+void path_cache_clear_except(const string& name, const set<string>& except);
 
 CCL_NAMESPACE_END
 
 
 CCL_NAMESPACE_END