From: Bartlomiej Grzelewski Date: Tue, 3 Jan 2017 17:36:54 +0000 (+0100) Subject: Remove empty lines from rules.merged file. X-Git-Tag: submit/tizen/20170330.102312~17 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=610834c04d58f52d8098a73edcb636c0ee0b7d08;p=platform%2Fcore%2Fsecurity%2Fsecurity-manager.git Remove empty lines from rules.merged file. 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 --- diff --git a/src/common/smack-rules.cpp b/src/common/smack-rules.cpp index a3207e40..31474b1d 100644 --- a/src/common/smack-rules.cpp +++ b/src/common/smack-rules.cpp @@ -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 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());