SHARE
TWEET

Untitled

a guest Jan 27th, 2016 52 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. From c572f99bba131b98b2747b296a87c4489e0141fd Mon Sep 17 00:00:00 2001
  2. From: =?UTF-8?q?Jos=C3=A9=20Roberto=20de=20Souza?= <jose.souza@intel.com>
  3. Date: Wed, 27 Jan 2016 18:32:49 -0200
  4. Subject: [PATCH] eldbus: Correctly read/write boolean to eina_value
  5.  
  6. DBus bool type is a uint32_t not a uint8_t, just changing how read
  7. and write, not chaging how it is stored in eina_value to save some
  8. bytes of RAM.
  9.  
  10. This fix the stack overflow pointed out here: https://phab.enlightenment.org/T3089
  11.  
  12. @fix
  13. ---
  14.  src/lib/eldbus/eldbus_message_from_eina_value.c | 28 ++++++++++++++++++++++---
  15.  src/lib/eldbus/eldbus_message_to_eina_value.c   | 17 +++++++++++++--
  16.  2 files changed, 40 insertions(+), 5 deletions(-)
  17.  
  18. diff --git a/src/lib/eldbus/eldbus_message_from_eina_value.c b/src/lib/eldbus/eldbus_message_from_eina_value.c
  19. index 3d594fb..4280a6b 100644
  20. --- a/src/lib/eldbus/eldbus_message_from_eina_value.c
  21. +++ b/src/lib/eldbus/eldbus_message_from_eina_value.c
  22. @@ -118,7 +118,6 @@ _array_append(const char *type, const Eina_Value *value_array, Eldbus_Message_It
  23.               }
  24.             break;
  25.          }
  26. -      case 'b'://boolean
  27.        case 'y'://byte
  28.          {
  29.             unsigned char z;
  30. @@ -130,6 +129,17 @@ _array_append(const char *type, const Eina_Value *value_array, Eldbus_Message_It
  31.               }
  32.             break;
  33.          }
  34. +      case 'b'://boolean
  35. +        {
  36. +           unsigned char z;
  37. +           unsigned i;
  38. +           for (i = 0; i < eina_value_array_count(value_array); i++)
  39. +             {
  40. +                eina_value_array_get(value_array, i, &z);
  41. +                eldbus_message_iter_basic_append(array, type[1], (uint32_t)z);
  42. +             }
  43. +           break;
  44. +        }
  45.        case 'n'://int16
  46.          {
  47.             int16_t z;
  48. @@ -230,7 +240,6 @@ _basic_append_value_struct(char type, const Eina_Value *value, const Eina_Value_
  49.             eldbus_message_iter_basic_append(iter, type, txt);
  50.             break;
  51.          }
  52. -      case 'b'://boolean
  53.        case 'y'://byte
  54.          {
  55.             unsigned char byte;
  56. @@ -238,6 +247,13 @@ _basic_append_value_struct(char type, const Eina_Value *value, const Eina_Value_
  57.             eldbus_message_iter_basic_append(iter, type, byte);
  58.             break;
  59.          }
  60. +      case 'b'://boolean
  61. +        {
  62. +           unsigned char boolean;
  63. +           eina_value_struct_get(value, desc->members[idx].name, &boolean);
  64. +           eldbus_message_iter_basic_append(iter, type, (uint32_t)boolean);
  65. +           break;
  66. +        }
  67.        case 'n'://int16
  68.          {
  69.             int16_t i;
  70. @@ -395,7 +411,6 @@ _basic_append_value(char type, const Eina_Value *value, Eldbus_Message_Iter *ite
  71.             eldbus_message_iter_basic_append(iter, type, txt);
  72.             break;
  73.          }
  74. -      case 'b'://boolean
  75.        case 'y'://byte
  76.          {
  77.             unsigned char byte;
  78. @@ -403,6 +418,13 @@ _basic_append_value(char type, const Eina_Value *value, Eldbus_Message_Iter *ite
  79.             eldbus_message_iter_basic_append(iter, type, byte);
  80.             break;
  81.          }
  82. +      case 'b'://boolean
  83. +        {
  84. +           unsigned char boolean;
  85. +           eina_value_get(value, &boolean);
  86. +           eldbus_message_iter_basic_append(iter, type, (uint32_t)boolean);
  87. +           break;
  88. +        }
  89.        case 'n'://int16
  90.          {
  91.             int16_t i;
  92. diff --git a/src/lib/eldbus/eldbus_message_to_eina_value.c b/src/lib/eldbus/eldbus_message_to_eina_value.c
  93. index 87258bf..32be7ee 100644
  94. --- a/src/lib/eldbus/eldbus_message_to_eina_value.c
  95. +++ b/src/lib/eldbus/eldbus_message_to_eina_value.c
  96. @@ -164,7 +164,6 @@ _message_iter_basic_array_to_eina_value(char type, Eina_Value *value, Eldbus_Mes
  97.                eina_value_array_append(value, txt);
  98.              break;
  99.           }
  100. -       case 'b'://boolean
  101.         case 'y'://byte
  102.           {
  103.              unsigned char byte;
  104. @@ -172,6 +171,13 @@ _message_iter_basic_array_to_eina_value(char type, Eina_Value *value, Eldbus_Mes
  105.                eina_value_array_append(value, byte);
  106.              break;
  107.           }
  108. +       case 'b'://boolean
  109. +         {
  110. +            uint32_t boolean;
  111. +            while (eldbus_message_iter_get_and_next(iter, type, &boolean))
  112. +              eina_value_array_append(value, (uint8_t)boolean);
  113. +            break;
  114. +         }
  115.         case 'n'://int16
  116.           {
  117.              int16_t i;
  118. @@ -316,7 +322,6 @@ _message_iter_struct_to_eina_value(Eldbus_Message_Iter *iter)
  119.                  eina_value_set(v, txt);
  120.                  break;
  121.               }
  122. -           case 'b'://boolean
  123.             case 'y'://byte
  124.               {
  125.                  unsigned char byte;
  126. @@ -325,6 +330,14 @@ _message_iter_struct_to_eina_value(Eldbus_Message_Iter *iter)
  127.                  eina_value_set(v, byte);
  128.                  break;
  129.               }
  130. +           case 'b'://boolean
  131. +             {
  132. +                 uint32_t value;
  133. +                 v = eina_value_new(EINA_VALUE_TYPE_UCHAR);
  134. +                 eldbus_message_iter_basic_get(iter, &value);
  135. +                 eina_value_set(v, (uint8_t)value);
  136. +                 break;
  137. +             }
  138.             case 'n'://int16
  139.               {
  140.                  int16_t i;
  141. --
  142. 2.7.0
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top