summaryrefslogtreecommitdiffstats
path: root/chromeos/binder/transaction_data_reader.cc
diff options
context:
space:
mode:
authorhashimoto <hashimoto@chromium.org>2016-01-07 22:45:31 -0800
committerCommit bot <commit-bot@chromium.org>2016-01-08 06:46:36 +0000
commit493d7d098cf40ca717e9951d719ffecd3c09fa45 (patch)
treebe62c9173c6492ee7b4e386c4b38056b5e539c70 /chromeos/binder/transaction_data_reader.cc
parente7a7fb8054a22a98ea7b08aed9513b0484d9481b (diff)
downloadchromium_src-493d7d098cf40ca717e9951d719ffecd3c09fa45.zip
chromium_src-493d7d098cf40ca717e9951d719ffecd3c09fa45.tar.gz
chromium_src-493d7d098cf40ca717e9951d719ffecd3c09fa45.tar.bz2
Add string read & write methods
WritableTransactionData::WriteInterfaceToken() will be used to construct transaction parameters. BUG=563282 Review URL: https://codereview.chromium.org/1565833003 Cr-Commit-Position: refs/heads/master@{#368287}
Diffstat (limited to 'chromeos/binder/transaction_data_reader.cc')
-rw-r--r--chromeos/binder/transaction_data_reader.cc47
1 files changed, 47 insertions, 0 deletions
diff --git a/chromeos/binder/transaction_data_reader.cc b/chromeos/binder/transaction_data_reader.cc
index ba97826..f242fd8 100644
--- a/chromeos/binder/transaction_data_reader.cc
+++ b/chromeos/binder/transaction_data_reader.cc
@@ -65,6 +65,53 @@ bool TransactionDataReader::ReadDouble(double* value) {
return ReadData(value, sizeof(*value));
}
+bool TransactionDataReader::ReadCString(const char** value) {
+ *value = reader_.current();
+ for (size_t len = 0; reader_.HasMoreData(); ++len) {
+ char c = 0;
+ if (!reader_.Read(&c, sizeof(c))) {
+ return false;
+ }
+ if (c == 0) {
+ return reader_.Skip(AddPadding(len + 1) - (len + 1));
+ }
+ }
+ return false;
+}
+
+bool TransactionDataReader::ReadString(std::string* value) {
+ int32_t len = 0;
+ if (!ReadInt32(&len)) {
+ return false;
+ }
+ if (len == 0) {
+ // Read only when the string is not empty.
+ // This is different from ReadString16().
+ value->clear();
+ return true;
+ }
+ const char* start = reader_.current();
+ if (!reader_.Skip(AddPadding(len + 1))) {
+ return false;
+ }
+ value->assign(start, len);
+ return true;
+}
+
+bool TransactionDataReader::ReadString16(base::string16* value) {
+ int32_t len = 0;
+ if (!ReadInt32(&len)) {
+ return false;
+ }
+ const base::char16* start =
+ reinterpret_cast<const base::char16*>(reader_.current());
+ if (!reader_.Skip(AddPadding((len + 1) * sizeof(base::char16)))) {
+ return false;
+ }
+ value->assign(start, len);
+ return true;
+}
+
scoped_refptr<Object> TransactionDataReader::ReadObject(
CommandBroker* command_broker) {
DCHECK(command_broker);