[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    [ksecrets] src/runtime/ksecrets_backend: Backend open logic in place
From:       Valentin Rusu <kde () rusu ! info>
Date:       2015-08-07 19:57:14
Message-ID: E1ZNnlS-0002yB-CF () scm ! kde ! org
[Download RAW message or body]

Git commit c7d72fb2a7422737cd169fa8252f472d63bab689 by Valentin Rusu.
Committed on 06/08/2015 at 22:26.
Pushed by vrusu into branch 'master'.

Backend open logic in place

M  +1    -1    src/runtime/ksecrets_backend/CMakeLists.txt
M  +58   -0    src/runtime/ksecrets_backend/ksecrets_backend.cpp
M  +16   -10   src/runtime/ksecrets_backend/ksecrets_backend.h
M  +8    -3    src/runtime/ksecrets_backend/ksecrets_backend_p.h

http://commits.kde.org/ksecrets/c7d72fb2a7422737cd169fa8252f472d63bab689

diff --git a/src/runtime/ksecrets_backend/CMakeLists.txt b/src/runtime/ksecrets_backend/CMakeLists.txt
index 105271d..9c9c806 100644
--- a/src/runtime/ksecrets_backend/CMakeLists.txt
+++ b/src/runtime/ksecrets_backend/CMakeLists.txt
@@ -6,7 +6,7 @@ set(ksecrets_backend_SRC
    ksecrets_backend.cpp)
 
 add_library(ksecrets_backend SHARED ${ksecrets_backend_SRC})
-target_link_libraries(ksecrets_backend)
+target_link_libraries(ksecrets_backend pthread)
 target_compile_features(ksecrets_backend PRIVATE cxx_range_for)
 set_target_properties(ksecrets_backend PROPERTIES PREFIX "")
 
diff --git a/src/runtime/ksecrets_backend/ksecrets_backend.cpp b/src/runtime/ksecrets_backend/ksecrets_backend.cpp
index a75dbde..876614e 100644
--- a/src/runtime/ksecrets_backend/ksecrets_backend.cpp
+++ b/src/runtime/ksecrets_backend/ksecrets_backend.cpp
@@ -22,4 +22,62 @@
 #include "ksecrets_backend.h"
 #include "ksecrets_backend_p.h"
 
+#include <future>
+#include <thread>
+#include <sys/stat.h>
 
+KSecretsBackendPrivate::KSecretsBackendPrivate(KSecretsBackend* b)
+    : b_(b)
+{
+}
+
+KSecretsBackend::KSecretsBackend()
+    : d(new KSecretsBackendPrivate(this))
+{
+}
+
+KSecretsBackend::~KSecretsBackend() = default;
+
+std::future<KSecretsBackend::OpenResult> KSecretsBackend::open(
+    std::string&& path, bool readonly /* =true */) noexcept
+{
+    // sanity checks
+    if (path.empty()) {
+        return std::async(std::launch::deferred, []() {
+            return OpenResult{ OpenResult::OpenStatus::NoPathGiven, 0 };
+        });
+    }
+
+    struct stat buf;
+    if (stat(path.c_str(), &buf) != 0) {
+        auto err = errno;
+        return std::async(std::launch::deferred, [err]() {
+            return OpenResult{ OpenResult::OpenStatus::SystemError, errno };
+        });
+    }
+
+    // now we can proceed
+    auto localThis = this;
+    if (!readonly) {
+        return std::async(std::launch::async,
+            [localThis, path]() { return localThis->d->lock_open(path); });
+    }
+    else {
+        return std::async(std::launch::deferred,
+            [localThis, path]() { return localThis->d->open(path); });
+    }
+}
+
+KSecretsBackend::OpenResult KSecretsBackendPrivate::lock_open(
+    const std::string& path)
+{
+    // TODO
+    return { KSecretsBackend::OpenResult::OpenStatus::Good, 0};
+}
+
+KSecretsBackend::OpenResult KSecretsBackendPrivate::open(
+    const std::string& path)
+{
+    // TODO
+    return { KSecretsBackend::OpenResult::OpenStatus::Good, 0};
+}
diff --git a/src/runtime/ksecrets_backend/ksecrets_backend.h b/src/runtime/ksecrets_backend/ksecrets_backend.h
index 22b2441..fa6b9ef 100644
--- a/src/runtime/ksecrets_backend/ksecrets_backend.h
+++ b/src/runtime/ksecrets_backend/ksecrets_backend.h
@@ -27,6 +27,8 @@
 #include <vector>
 #include <future>
 
+class KSecretsBackendPrivate;
+
 /**
  * Secrets storage for KSecrets Service.
  *
@@ -75,7 +77,6 @@
  *       would be destroyed, releasing the file, upon block exit.
  */
 class KSecretsBackend {
-    class KSecretsBackendPrivate;
     class ItemPrivate;
     class CollectionPrivate;
 
@@ -218,16 +219,21 @@ public:
      */
     KSecretsBackend();
     KSecretsBackend(const KSecretsBackend&) = delete;
-    virtual ~KSecretsBackend() = default;
-
-    enum class OpenStatus {
-        Good,
-        NoPathGiven,
-        FileLocked,
-        FileNotFound,
-        PermissionDeniedByTheSystem
+    virtual ~KSecretsBackend();
+
+    struct OpenResult {
+        enum class OpenStatus {
+            Good,
+            NoPathGiven,
+            FileLocked,
+            SystemError // @see
+        };
+
+        OpenStatus status_;
+        int errno_;
     };
-    std::future<OpenStatus> open(
+
+    std::future<OpenResult> open(
         std::string&&, bool readOnly = true) noexcept;
     std::vector<std::string> dirCollections() noexcept;
     /*
diff --git a/src/runtime/ksecrets_backend/ksecrets_backend_p.h b/src/runtime/ksecrets_backend/ksecrets_backend_p.h
index 0f8be59..156a9f1 100644
--- a/src/runtime/ksecrets_backend/ksecrets_backend_p.h
+++ b/src/runtime/ksecrets_backend/ksecrets_backend_p.h
@@ -21,12 +21,17 @@
 #ifndef KSECRETSBACKEND_P_H
 #define KSECRETSBACKEND_P_H
 
-class KSecretsBackend;
+#include "ksecrets_backend.h"
 
 class KSecretsBackendPrivate {
-    KSecretsBackendPrivate(KSecretsBackend*);
-};
+public:
+    KSecretsBackendPrivate() = delete;
+    explicit KSecretsBackendPrivate(KSecretsBackend*);
 
+    KSecretsBackend::OpenResult lock_open(const std::string&);
+    KSecretsBackend::OpenResult open(const std::string&);
 
+    KSecretsBackend* b_;
+};
 
 #endif
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic