diff options
author | hashimoto <hashimoto@chromium.org> | 2016-01-07 22:45:31 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2016-01-08 06:46:36 +0000 |
commit | 493d7d098cf40ca717e9951d719ffecd3c09fa45 (patch) | |
tree | be62c9173c6492ee7b4e386c4b38056b5e539c70 /chromeos/binder/transaction_data_reader.cc | |
parent | e7a7fb8054a22a98ea7b08aed9513b0484d9481b (diff) | |
download | chromium_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.cc | 47 |
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); |