From fd2d761f1460a6d8836a0c304890ad00d9139f52 Mon Sep 17 00:00:00 2001 From: Guillaume Dumont Date: Fri, 11 Dec 2015 15:05:41 -0500 Subject: [PATCH] Replace mkdir by cross-platform counterpart --- examples/mnist/convert_mnist_data.cpp | 5 +++-- include/caffe/util/io.hpp | 11 ++++++++++- src/caffe/util/db_lmdb.cpp | 4 +++- 3 files changed, 16 insertions(+), 4 deletions(-) diff --git a/examples/mnist/convert_mnist_data.cpp b/examples/mnist/convert_mnist_data.cpp index 16d28093dd5..42918b33eef 100644 --- a/examples/mnist/convert_mnist_data.cpp +++ b/examples/mnist/convert_mnist_data.cpp @@ -24,6 +24,7 @@ #include "caffe/proto/caffe.pb.h" #include "caffe/util/format.hpp" +#include "caffe/util/io.hpp" #if defined(USE_LEVELDB) && defined(USE_LMDB) @@ -90,8 +91,8 @@ void convert_dataset(const char* image_filename, const char* label_filename, batch = new leveldb::WriteBatch(); } else if (db_backend == "lmdb") { // lmdb LOG(INFO) << "Opening lmdb " << db_path; - CHECK_EQ(mkdir(db_path, 0744), 0) - << "mkdir " << db_path << "failed"; + CHECK(MakeDir(db_path, 0744)) + << "MakeDir " << db_path << "failed"; CHECK_EQ(mdb_env_create(&mdb_env), MDB_SUCCESS) << "mdb_env_create failed"; CHECK_EQ(mdb_env_set_mapsize(mdb_env, 1099511627776), MDB_SUCCESS) // 1TB << "mdb_env_set_mapsize failed"; diff --git a/include/caffe/util/io.hpp b/include/caffe/util/io.hpp index 1a599883ca3..23ac98f3ffc 100644 --- a/include/caffe/util/io.hpp +++ b/include/caffe/util/io.hpp @@ -21,13 +21,22 @@ namespace caffe { using ::google::protobuf::Message; using ::boost::filesystem::path; +inline bool MakeDir(const char* dirname, int perms = 0777) { + bool success = boost::filesystem::create_directory(dirname); + if (success) { + boost::filesystem::permissions( + dirname, static_cast(perms)); + } + return success; +} + inline void MakeTempDir(string* temp_dirname) { temp_dirname->clear(); const path& model = boost::filesystem::temp_directory_path()/"caffe_test.%%%%-%%%%"; for ( int i = 0; i < CAFFE_TMP_DIR_RETRIES; i++ ) { const path& dir = boost::filesystem::unique_path(model).string(); - bool done = boost::filesystem::create_directory(dir); + bool done = MakeDir(dir.string().c_str()); if ( done ) { *temp_dirname = dir.string(); return; diff --git a/src/caffe/util/db_lmdb.cpp b/src/caffe/util/db_lmdb.cpp index 0bc82b53e2b..f148f37d3a6 100644 --- a/src/caffe/util/db_lmdb.cpp +++ b/src/caffe/util/db_lmdb.cpp @@ -5,6 +5,8 @@ #include +#include "caffe/util/io.hpp" + namespace caffe { namespace db { const size_t LMDB_MAP_SIZE = 1099511627776; // 1 TB @@ -13,7 +15,7 @@ void LMDB::Open(const string& source, Mode mode) { MDB_CHECK(mdb_env_create(&mdb_env_)); MDB_CHECK(mdb_env_set_mapsize(mdb_env_, LMDB_MAP_SIZE)); if (mode == NEW) { - CHECK_EQ(mkdir(source.c_str(), 0744), 0) << "mkdir " << source << "failed"; + CHECK(MakeDir(source.c_str(), 0744)) << "MakeDir " << source << "failed"; } int flags = 0; if (mode == READ) {