libsparse: remove unused files
[project/make_ext4fs.git] / unencrypted_properties.cpp
1 #include "unencrypted_properties.h"
2
3 #include <sys/stat.h>
4
5 namespace properties {
6     const char* key = "key";
7     const char* ref = "ref";
8     const char* type = "type";
9     const char* password = "password";
10 }
11
12 namespace
13 {
14     const char* unencrypted_folder = "unencrypted";
15 }
16
17 UnencryptedProperties::UnencryptedProperties(const char* device)
18   : folder_(std::string() + device + "/" + unencrypted_folder)
19 {
20 }
21
22 UnencryptedProperties::UnencryptedProperties()
23 {
24 }
25
26 template<> std::string UnencryptedProperties::Get(const char* name,
27                                       std::string default_value)
28 {
29     if (!OK()) return default_value;
30     std::ifstream i(folder_ + "/" + name, std::ios::binary);
31     if (!i) {
32         return default_value;
33     }
34
35     i.seekg(0, std::ios::end);
36     int length = i.tellg();
37     i.seekg(0, std::ios::beg);
38     if (length == -1) {
39         return default_value;
40     }
41
42     std::string s(length, 0);
43     i.read(&s[0], length);
44     if (!i) {
45         return default_value;
46     }
47
48     return s;
49 }
50
51 template<> bool UnencryptedProperties::Set(const char* name, std::string const& value)
52 {
53     if (!OK()) return false;
54     std::ofstream o(folder_ + "/" + name, std::ios::binary);
55     o << value;
56     return !o.fail();
57 }
58
59 UnencryptedProperties UnencryptedProperties::GetChild(const char* name)
60 {
61     UnencryptedProperties e4p;
62     if (!OK()) return e4p;
63
64     std::string directory(folder_ + "/" + name);
65     if (mkdir(directory.c_str(), 700) == -1 && errno != EEXIST) {
66         return e4p;
67     }
68
69     e4p.folder_ = directory;
70     return e4p;
71 }
72
73 bool UnencryptedProperties::Remove(const char* name)
74 {
75     if (remove((folder_ + "/" + name).c_str())
76         && errno != ENOENT) {
77         return false;
78     }
79
80     return true;
81 }
82
83 bool UnencryptedProperties::OK() const
84 {
85     return !folder_.empty();
86 }