aboutsummaryrefslogtreecommitdiffstats
path: root/utility
diff options
context:
space:
mode:
authorJean-Michel Trivi <jmtrivi@google.com>2015-07-15 15:37:57 -0700
committerJean-Michel Trivi <jmtrivi@google.com>2015-07-15 17:09:51 -0700
commita9be2d378b7ad84e679a48efa81f42fb54f85d9a (patch)
tree587d34728dac3517a213d6d2a9a6ebdecd4e7531 /utility
parentc99720d29f2ee618cc74c9336d2cd2a26544c020 (diff)
downloadexternal_parameter-framework-a9be2d378b7ad84e679a48efa81f42fb54f85d9a.zip
external_parameter-framework-a9be2d378b7ad84e679a48efa81f42fb54f85d9a.tar.gz
external_parameter-framework-a9be2d378b7ad84e679a48efa81f42fb54f85d9a.tar.bz2
Drop release v2.6.0+no-stlport
Bug 246391 Change-Id: I662b7b0f90c97cb169978e1b64ad1fe32c440cf5 Signed-off-by: Jean-Michel Trivi <jmtrivi@google.com>
Diffstat (limited to 'utility')
-rw-r--r--utility/Android.mk3
-rw-r--r--utility/CMakeLists.txt1
-rw-r--r--utility/FullIo.cpp80
-rw-r--r--utility/FullIo.hpp68
-rw-r--r--utility/Utility.cpp13
-rw-r--r--utility/Utility.h19
6 files changed, 182 insertions, 2 deletions
diff --git a/utility/Android.mk b/utility/Android.mk
index 09f3de7..168c423 100644
--- a/utility/Android.mk
+++ b/utility/Android.mk
@@ -34,7 +34,8 @@ LOCAL_PATH := $(call my-dir)
common_src_files := \
Tokenizer.cpp \
Utility.cpp \
- NaiveTokenizer.cpp
+ NaiveTokenizer.cpp \
+ FullIo.cpp \
common_module := libpfw_utility
common_module_tags := optional
diff --git a/utility/CMakeLists.txt b/utility/CMakeLists.txt
index 9f81027..5386f5b 100644
--- a/utility/CMakeLists.txt
+++ b/utility/CMakeLists.txt
@@ -29,6 +29,7 @@
add_library(pfw_utility STATIC
Tokenizer.cpp
Utility.cpp
+ FullIo.cpp
NaiveTokenizer.cpp)
# '-fPIC' needed for linking against shared libraries (e.g. libparameter)
diff --git a/utility/FullIo.cpp b/utility/FullIo.cpp
new file mode 100644
index 0000000..59765b5
--- /dev/null
+++ b/utility/FullIo.cpp
@@ -0,0 +1,80 @@
+/*
+ * Copyright (c) 2015, Intel Corporation
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation and/or
+ * other materials provided with the distribution.
+ *
+ * 3. Neither the name of the copyright holder nor the names of its contributors
+ * may be used to endorse or promote products derived from this software without
+ * specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "FullIo.hpp"
+
+#include <cerrno>
+#include <unistd.h>
+
+namespace utility
+{
+
+/** Workaround c++ `void *` arithmetic interdiction. */
+template <class Ptr>
+Ptr *add(Ptr *ptr, size_t count) {
+ return (char *)ptr + count;
+}
+
+template <class Buff>
+static bool fullAccess(ssize_t (&accessor)(int, Buff, size_t),
+ bool (&accessFailed)(ssize_t),
+ int fd, Buff buf, size_t count) {
+ size_t done = 0; // Bytes already access in previous iterations
+ while (done < count) {
+ ssize_t accessed = accessor(fd, add(buf, done), count - done);
+ if (accessFailed(accessed)) {
+ return false;
+ }
+ done += accessed;
+ }
+ return true;
+}
+
+static bool accessFailed(ssize_t accessRes) {
+ return accessRes == -1 and errno != EAGAIN and errno != EINTR;
+}
+
+bool fullWrite(int fd, const void *buf, size_t count) {
+ return fullAccess(::write, accessFailed, fd, buf, count);
+}
+
+static bool readFailed(ssize_t readRes) {
+ if (readRes == 0) { // read should not return 0 (EOF)
+ errno = 0;
+ return true;
+ }
+ return accessFailed(readRes);
+}
+bool fullRead(int fd, void *buf, size_t count) {
+ return fullAccess(::read, readFailed, fd, buf, count);
+}
+
+} // namespace utility
+
diff --git a/utility/FullIo.hpp b/utility/FullIo.hpp
new file mode 100644
index 0000000..353551d
--- /dev/null
+++ b/utility/FullIo.hpp
@@ -0,0 +1,68 @@
+/*
+ * Copyright (c) 2015, Intel Corporation
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation and/or
+ * other materials provided with the distribution.
+ *
+ * 3. Neither the name of the copyright holder nor the names of its contributors
+ * may be used to endorse or promote products derived from this software without
+ * specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#pragma once
+
+#include <cstddef>
+
+namespace utility
+{
+
+/** Write *completely* a buffer in a file descriptor.
+ *
+ * A wrapper around unistd::write that resumes write on incomplete access
+ * and EAGAIN/EINTR error.
+ *
+ * @see man 2 write for the parameters.
+ *
+ * @return true if the buffer could be completely written,
+ * false on failure (see write's man errno section).
+ */
+bool fullWrite(int fd, const void *buf, size_t count);
+
+/** Fill a buffer from a file descriptor.
+ *
+ * A wrapper around unistd::read that resumes read on incomplete access
+ * and EAGAIN/EINTR error.
+ *
+ * @see man 2 read for the parameters.
+ *
+ * @return true if the buffer could be completely fill,
+ * false on failure (see read's man errno section).
+ *
+ * If the buffer could not be filled due to an EOF, return false but set
+ * errno to 0.
+ * @TODO Add a custom strerror to prevent logging "success" (`sterror(0)`) on
+ * EOF errors ?
+ */
+bool fullRead(int fd, void *buf, size_t count);
+
+} // namespace utility
+
diff --git a/utility/Utility.cpp b/utility/Utility.cpp
index dc0bce1..e5f689a 100644
--- a/utility/Utility.cpp
+++ b/utility/Utility.cpp
@@ -32,6 +32,7 @@
#include <sstream>
#include <iterator>
+#include <stdint.h>
using std::string;
@@ -72,3 +73,15 @@ void CUtility::asString(const std::map<std::string, std::string>& mapStr,
CUtility::asString(listKeysValues, strOutput, strItemSeparator);
}
+void CUtility::appendTitle(string& strTo, const string& strTitle)
+{
+ strTo += "\n" + strTitle + "\n";
+
+ uint32_t uiLength = strTitle.size();
+
+ while (uiLength--) {
+
+ strTo += "=";
+ }
+ strTo += "\n";
+}
diff --git a/utility/Utility.h b/utility/Utility.h
index 51f796f..93acd82 100644
--- a/utility/Utility.h
+++ b/utility/Utility.h
@@ -33,6 +33,7 @@
#include <string>
#include <list>
#include <map>
+#include <sstream>
class CUtility
{
@@ -62,5 +63,21 @@ public:
std::string& strOutput,
const std::string& strItemSeparator = ", ",
const std::string& strKeyValueSeparator = ":");
-};
+ /** Utility to easily convert a builtin type into string
+ *
+ * FIXME: Should be replaced by std::to_string after C++11 introduction
+ */
+ template <class T>
+ static std::string toString(T uiValue)
+ {
+ std::ostringstream ostr;
+
+ ostr << uiValue;
+
+ return ostr.str();
+ }
+
+ /** Utility to underline */
+ static void appendTitle(std::string& strTo, const std::string& strTitle);
+};