Remove empty lines from rules.merged file. 69/108269/2
authorBartlomiej Grzelewski <b.grzelewski@samsung.com>
Tue, 3 Jan 2017 17:36:54 +0000 (18:36 +0100)
committerGerrit Code Review <gerrit@review.vlan103.tizen.org>
Mon, 23 Jan 2017 14:39:19 +0000 (06:39 -0800)
In some narrow case:
 * file have size of page_size+1
 * file ends with combination "\n\n"
kernel returns error during rules loading.

Change-Id: I6f24b76224c7b013c93003e8d0d6738b665c6949

src/common/smack-rules.cpp

index a3207e40234107808dcaebf1de292f1035a01bed..31474b1dc6135be6064594bef92a784dfd107d91 100644 (file)
@@ -344,7 +344,17 @@ void SmackRules::mergeRules()
 
     for(auto const &e : files) {
         std::ifstream src(std::string(SMACK_RULES_PATH) + "/" + e, std::ios::binary);
-        dst << src.rdbuf() << '\n';
+        src.seekg(0, std::ios::end);
+        size_t size = src.tellg();
+
+        std::vector<char> buffer(size);
+        src.seekg(0);
+        src.read(buffer.data(), size);
+        dst.write(buffer.data(), size);
+
+        if (!buffer.empty() && buffer[size-1] != '\n')
+            dst << '\n';
+
         if (dst.bad()) {
             LogError("I/O Error. File " << SMACK_RULES_PATH_MERGED << " will not be updated!");
             unlink(SMACK_RULES_PATH_MERGED_T.c_str());