so no need to use a wrapper maintained by ourselves.
Signed-off-by: Kefu Chai <kchai@redhat.com>
#ifdef __cplusplus
}
-// Windows' mkdir doesn't accept a mode argument.
-#define compat_mkdir(pathname, mode) mkdir(pathname)
-
#endif
// O_CLOEXEC is not defined on Windows. Since handles aren't inherited
#define SOCKOPT_VAL_TYPE void*
-#define compat_mkdir(pathname, mode) mkdir(pathname, mode)
-
#endif /* WIN32 */
#endif /* !CEPH_COMPAT_H */
#include <map>
#include <string>
#include <memory>
+#if __has_include(<filesystem>)
+#include <filesystem>
+namespace fs = std::filesystem;
+#elif __has_include(<experimental/filesystem>)
+#include <experimental/filesystem>
+namespace fs = std::experimental::filesystem;
+#endif
#include <errno.h>
#include <unistd.h>
#include <sys/types.h>
int r;
dout(1) << __func__ << dendl;
if (create) {
- r = compat_mkdir(m_db_path.c_str(), 0700);
- if (r < 0) {
- r = -errno;
- if (r != -EEXIST) {
- derr << __func__ << " mkdir failed: " << cpp_strerror(r) << dendl;
- return r;
- }
+ if (fs::exists(m_db_path)) {
r = 0; // ignore EEXIST
+ } else {
+ std::error_code ec;
+ if (!fs::create_directory(m_db_path, ec)) {
+ derr << __func__ << " mkdir failed: " << ec.message() << dendl;
+ return -ec.value();
+ }
+ fs::permissions(m_db_path, fs::perms::owner_all);
}
} else {
r = _load();
#include <map>
#include <string>
#include <memory>
+#if __has_include(<filesystem>)
+#include <filesystem>
+namespace fs = std::filesystem;
+#elif __has_include(<experimental/filesystem>)
+#include <experimental/filesystem>
+namespace fs = std::experimental::filesystem;
+#endif
#include <errno.h>
#include <unistd.h>
#include <sys/types.h>
unique_ptr<rocksdb::Directory> dir;
env->NewDirectory(path, &dir);
} else {
- int r = compat_mkdir(path.c_str(), 0755);
- if (r < 0)
- r = -errno;
- if (r < 0 && r != -EEXIST) {
- derr << __func__ << " failed to create " << path << ": " << cpp_strerror(r)
- << dendl;
- return r;
+ if (!fs::exists(path)) {
+ std::error_code ec;
+ if (!fs::create_directory(path, ec)) {
+ derr << __func__ << " failed to create " << path
+ << ": " << ec.message() << dendl;
+ return -ec.value();
+ }
+ fs::permissions(path,
+ fs::perms::owner_all |
+ fs::perms::group_read | fs::perms::group_exec |
+ fs::perms::others_read | fs::perms::others_exec);
}
}
return 0;