]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
Merge, from trunk, r15655,6,7 (Followup to r14908 (BZ #342603))
authorJulian Seward <jseward@acm.org>
Mon, 21 Sep 2015 09:57:29 +0000 (09:57 +0000)
committerJulian Seward <jseward@acm.org>
Mon, 21 Sep 2015 09:57:29 +0000 (09:57 +0000)
git-svn-id: svn://svn.valgrind.org/valgrind/branches/VALGRIND_3_11_BRANCH@15664

coregrind/m_syswrap/syswrap-linux.c

index 980f881b1ba2e703455254d979df255e22d4c1d7..163c0da7457704dd625a6c37e4eb2c4dca5dd1c5 100644 (file)
@@ -6862,11 +6862,10 @@ PRE(sys_ioctl)
             PRE_MEM_READ("ioctl(VKI_I2C_SMBUS).i2c_smbus_ioctl_data.command",
                          (Addr)&vkis->command, sizeof(vkis->command));
             /* i2c_smbus_write_quick hides its value in read_write, so
-               this variable can hava a different meaning */
+               this variable can have a different meaning */
             /* to make matters worse i2c_smbus_write_byte stores its
                value in command */
-            if ( ! (((vkis->size == VKI_I2C_SMBUS_QUICK) 
-                     && (vkis->command == VKI_I2C_SMBUS_QUICK)) ||
+            if ( ! ((vkis->size == VKI_I2C_SMBUS_QUICK) ||
                  ((vkis->size == VKI_I2C_SMBUS_BYTE)
                   && (vkis->read_write == VKI_I2C_SMBUS_WRITE))))  {
                     /* the rest uses the byte array to store the data,
@@ -6884,7 +6883,7 @@ PRE(sys_ioctl)
                         case VKI_I2C_SMBUS_I2C_BLOCK_BROKEN:
                         case VKI_I2C_SMBUS_BLOCK_PROC_CALL:
                         case VKI_I2C_SMBUS_I2C_BLOCK_DATA:
-                            size = vkis->data->block[0];
+                            size = 1 + vkis->data->block[0];
                             break;
                         default:
                             size = 0;
@@ -9388,14 +9387,11 @@ POST(sys_ioctl)
             struct vki_i2c_smbus_ioctl_data *vkis
                = (struct vki_i2c_smbus_ioctl_data *) ARG3;
             /* i2c_smbus_write_quick hides its value in read_write, so
-               this variable can hava a different meaning */
-            /* to make matters worse i2c_smbus_write_byte stores its
-               value in command */
+               this variable can have a different meaning */
             if ((vkis->read_write == VKI_I2C_SMBUS_READ)
                 || (vkis->size == VKI_I2C_SMBUS_PROC_CALL)
                 || (vkis->size == VKI_I2C_SMBUS_BLOCK_PROC_CALL)) {
-                if ( ! ((vkis->size == VKI_I2C_SMBUS_QUICK) 
-                        && (vkis->command == VKI_I2C_SMBUS_QUICK))) {
+                if ( ! (vkis->size == VKI_I2C_SMBUS_QUICK)) {
                     UInt size;
                     switch(vkis->size) {
                         case VKI_I2C_SMBUS_BYTE:
@@ -9410,7 +9406,7 @@ POST(sys_ioctl)
                         case VKI_I2C_SMBUS_I2C_BLOCK_BROKEN:
                         case VKI_I2C_SMBUS_BLOCK_PROC_CALL:
                         case VKI_I2C_SMBUS_I2C_BLOCK_DATA:
-                            size = vkis->data->block[0];
+                            size = 1 + vkis->data->block[0];
                             break;
                         default:
                             size = 0;