Add create(int flags, mode_t mode) to File class
authorJaemin Ryu <jm77.ryu@samsung.com>
Wed, 2 Jan 2019 01:44:18 +0000 (10:44 +0900)
committerJaemin Ryu <jm77.ryu@samsung.com>
Mon, 11 Feb 2019 04:25:37 +0000 (13:25 +0900)
Change-Id: Ie01c1d7861d29220762c4df7aea8fffca533d283
Signed-off-by: Jaemin Ryu <jm77.ryu@samsung.com>
include/klay/filesystem.h
src/filesystem.cpp

index 3cc60c8c42f1233d39db1d542468b6087cab66c3..27a28b32dd1717d825a6d17a5348d99bf22ed41f 100644 (file)
@@ -98,6 +98,7 @@ public:
        off_t size() const;
 
        void create(mode_t mode);
+       void create(int flags, mode_t mode);
        void open(int flags);
        void read(void *buffer, const size_t size) const;
        void write(const void *buffer, const size_t size) const;
index 80fd0748fea6d7d52c72cd6193d9cf0e5e03ae4b..fa8484c2297c5d26b0831a9aae8f53da2de28b71 100644 (file)
@@ -196,6 +196,24 @@ void File::create(mode_t mode)
        }
 }
 
+void File::create(int flags, mode_t mode)
+{
+       if (descriptor != -1) {
+               close();
+       }
+
+       while (1) {
+               descriptor = ::open(path.c_str(), O_CREAT | flags, mode);
+               if (descriptor == -1) {
+                       if (errno == EINTR) {
+                               continue;
+                       }
+                       throw runtime::Exception(runtime::GetSystemErrorMessage());
+               }
+               return;
+       }
+}
+
 void File::open(int flags)
 {
        if (descriptor != -1) {