OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "dbus/message.h" | 5 #include "dbus/message.h" |
6 | 6 |
7 #include "base/basictypes.h" | 7 #include "base/basictypes.h" |
8 #include "base/format_macros.h" | 8 #include "base/format_macros.h" |
9 #include "base/logging.h" | 9 #include "base/logging.h" |
10 #include "base/stringprintf.h" | 10 #include "base/stringprintf.h" |
(...skipping 243 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
254 } | 254 } |
255 | 255 |
256 MessageWriter::~MessageWriter() { | 256 MessageWriter::~MessageWriter() { |
257 } | 257 } |
258 | 258 |
259 void MessageWriter::AppendByte(uint8 value) { | 259 void MessageWriter::AppendByte(uint8 value) { |
260 AppendBasic(DBUS_TYPE_BYTE, &value); | 260 AppendBasic(DBUS_TYPE_BYTE, &value); |
261 } | 261 } |
262 | 262 |
263 void MessageWriter::AppendBool(bool value) { | 263 void MessageWriter::AppendBool(bool value) { |
264 AppendBasic(DBUS_TYPE_BOOLEAN, &value); | 264 // The size of dbus_bool_t and the size of bool are different. The |
| 265 // former is always 4 per dbus-types.h, whereas the latter is usually 1. |
| 266 // dbus_message_iter_append_basic() used in AppendBasic() expects four |
| 267 // bytes for DBUS_TYPE_BOOLEAN, so we must pass a dbus_bool_t, instead |
| 268 // of a bool, to AppendBasic(). |
| 269 dbus_bool_t dbus_value = value; |
| 270 AppendBasic(DBUS_TYPE_BOOLEAN, &dbus_value); |
265 } | 271 } |
266 | 272 |
267 void MessageWriter::AppendInt16(int16 value) { | 273 void MessageWriter::AppendInt16(int16 value) { |
268 AppendBasic(DBUS_TYPE_INT16, &value); | 274 AppendBasic(DBUS_TYPE_INT16, &value); |
269 } | 275 } |
270 | 276 |
271 void MessageWriter::AppendUint16(uint16 value) { | 277 void MessageWriter::AppendUint16(uint16 value) { |
272 AppendBasic(DBUS_TYPE_UINT16, &value); | 278 AppendBasic(DBUS_TYPE_UINT16, &value); |
273 } | 279 } |
274 | 280 |
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
383 static_cast<int>(length)); | 389 static_cast<int>(length)); |
384 CHECK(success) << "Unable to allocate memory"; | 390 CHECK(success) << "Unable to allocate memory"; |
385 CloseContainer(&array_writer); | 391 CloseContainer(&array_writer); |
386 } | 392 } |
387 | 393 |
388 void MessageWriter::AppendVariantOfByte(uint8 value) { | 394 void MessageWriter::AppendVariantOfByte(uint8 value) { |
389 AppendVariantOfBasic(DBUS_TYPE_BYTE, &value); | 395 AppendVariantOfBasic(DBUS_TYPE_BYTE, &value); |
390 } | 396 } |
391 | 397 |
392 void MessageWriter::AppendVariantOfBool(bool value) { | 398 void MessageWriter::AppendVariantOfBool(bool value) { |
393 AppendVariantOfBasic(DBUS_TYPE_BOOLEAN, &value); | 399 // See the comment at MessageWriter::AppendBool(). |
| 400 dbus_bool_t dbus_value = value; |
| 401 AppendVariantOfBasic(DBUS_TYPE_BOOLEAN, &dbus_value); |
394 } | 402 } |
395 | 403 |
396 void MessageWriter::AppendVariantOfInt16(int16 value) { | 404 void MessageWriter::AppendVariantOfInt16(int16 value) { |
397 AppendVariantOfBasic(DBUS_TYPE_INT16, &value); | 405 AppendVariantOfBasic(DBUS_TYPE_INT16, &value); |
398 } | 406 } |
399 | 407 |
400 void MessageWriter::AppendVariantOfUint16(uint16 value) { | 408 void MessageWriter::AppendVariantOfUint16(uint16 value) { |
401 AppendVariantOfBasic(DBUS_TYPE_UINT16, &value); | 409 AppendVariantOfBasic(DBUS_TYPE_UINT16, &value); |
402 } | 410 } |
403 | 411 |
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
466 bool MessageReader::HasMoreData() { | 474 bool MessageReader::HasMoreData() { |
467 const int dbus_type = dbus_message_iter_get_arg_type(&raw_message_iter_); | 475 const int dbus_type = dbus_message_iter_get_arg_type(&raw_message_iter_); |
468 return dbus_type != DBUS_TYPE_INVALID; | 476 return dbus_type != DBUS_TYPE_INVALID; |
469 } | 477 } |
470 | 478 |
471 bool MessageReader::PopByte(uint8* value) { | 479 bool MessageReader::PopByte(uint8* value) { |
472 return PopBasic(DBUS_TYPE_BYTE, value); | 480 return PopBasic(DBUS_TYPE_BYTE, value); |
473 } | 481 } |
474 | 482 |
475 bool MessageReader::PopBool(bool* value) { | 483 bool MessageReader::PopBool(bool* value) { |
476 return PopBasic(DBUS_TYPE_BOOLEAN, value); | 484 // Like MessageWriter::AppendBool(), we should copy |value| to |
| 485 // dbus_bool_t, as dbus_message_iter_get_basic() used in PopBasic() |
| 486 // expects four bytes for DBUS_TYPE_BOOLEAN. |
| 487 dbus_bool_t dbus_value = FALSE; |
| 488 const bool success = PopBasic(DBUS_TYPE_BOOLEAN, &dbus_value); |
| 489 *value = static_cast<bool>(dbus_value); |
| 490 return success; |
477 } | 491 } |
478 | 492 |
479 bool MessageReader::PopInt16(int16* value) { | 493 bool MessageReader::PopInt16(int16* value) { |
480 return PopBasic(DBUS_TYPE_INT16, value); | 494 return PopBasic(DBUS_TYPE_INT16, value); |
481 } | 495 } |
482 | 496 |
483 bool MessageReader::PopUint16(uint16* value) { | 497 bool MessageReader::PopUint16(uint16* value) { |
484 return PopBasic(DBUS_TYPE_UINT16, value); | 498 return PopBasic(DBUS_TYPE_UINT16, value); |
485 } | 499 } |
486 | 500 |
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
562 object_paths->push_back(object_path); | 576 object_paths->push_back(object_path); |
563 } | 577 } |
564 return true; | 578 return true; |
565 } | 579 } |
566 | 580 |
567 bool MessageReader::PopVariantOfByte(uint8* value) { | 581 bool MessageReader::PopVariantOfByte(uint8* value) { |
568 return PopVariantOfBasic(DBUS_TYPE_BYTE, value); | 582 return PopVariantOfBasic(DBUS_TYPE_BYTE, value); |
569 } | 583 } |
570 | 584 |
571 bool MessageReader::PopVariantOfBool(bool* value) { | 585 bool MessageReader::PopVariantOfBool(bool* value) { |
572 return PopVariantOfBasic(DBUS_TYPE_BOOLEAN, value); | 586 // See the comment at MessageReader::PopBool(). |
| 587 dbus_bool_t dbus_value = FALSE; |
| 588 const bool success = PopVariantOfBasic(DBUS_TYPE_BOOLEAN, &dbus_value); |
| 589 *value = static_cast<bool>(dbus_value); |
| 590 return success; |
573 } | 591 } |
574 | 592 |
575 bool MessageReader::PopVariantOfInt16(int16* value) { | 593 bool MessageReader::PopVariantOfInt16(int16* value) { |
576 return PopVariantOfBasic(DBUS_TYPE_INT16, value); | 594 return PopVariantOfBasic(DBUS_TYPE_INT16, value); |
577 } | 595 } |
578 | 596 |
579 bool MessageReader::PopVariantOfUint16(uint16* value) { | 597 bool MessageReader::PopVariantOfUint16(uint16* value) { |
580 return PopVariantOfBasic(DBUS_TYPE_UINT16, value); | 598 return PopVariantOfBasic(DBUS_TYPE_UINT16, value); |
581 } | 599 } |
582 | 600 |
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
655 } | 673 } |
656 | 674 |
657 bool MessageReader::PopVariantOfBasic(int dbus_type, void* value) { | 675 bool MessageReader::PopVariantOfBasic(int dbus_type, void* value) { |
658 dbus::MessageReader variant_reader(message_); | 676 dbus::MessageReader variant_reader(message_); |
659 if (!PopVariant(&variant_reader)) | 677 if (!PopVariant(&variant_reader)) |
660 return false; | 678 return false; |
661 return variant_reader.PopBasic(dbus_type, value); | 679 return variant_reader.PopBasic(dbus_type, value); |
662 } | 680 } |
663 | 681 |
664 } // namespace dbus | 682 } // namespace dbus |
OLD | NEW |