Fix the v2 descriptor handling.

There was a misinterpretation of how the v2 header works. The flags
in the header indicate what is in the rest of the structure.

Bug: 19127803

Change-Id: I5fa0dae6da51522c9afc4c94838eb6f462208683
diff --git a/adb/usb_linux_client.c b/adb/usb_linux_client.c
index fd566f4..ee6b37c 100644
--- a/adb/usb_linux_client.c
+++ b/adb/usb_linux_client.c
@@ -73,14 +73,10 @@
 } __attribute__((packed));
 
 struct desc_v2 {
-    struct usb_functionfs_descs_head_v2 {
-        __le32 magic;
-        __le32 length;
-        __le32 flags;
-        __le32 fs_count;
-        __le32 hs_count;
-        __le32 ss_count;
-    } __attribute__((packed)) header;
+    struct usb_functionfs_descs_head_v2 header;
+    // The rest of the structure depends on the flags in the header.
+    __le32 fs_count;
+    __le32 hs_count;
     struct func_desc fs_descs, hs_descs;
 } __attribute__((packed));
 
@@ -284,9 +280,8 @@
     v2_descriptor.header.magic = cpu_to_le32(FUNCTIONFS_DESCRIPTORS_MAGIC_V2);
     v2_descriptor.header.length = cpu_to_le32(sizeof(v2_descriptor));
     v2_descriptor.header.flags = FUNCTIONFS_HAS_FS_DESC | FUNCTIONFS_HAS_HS_DESC;
-    v2_descriptor.header.fs_count = 3;
-    v2_descriptor.header.hs_count = 3;
-    v2_descriptor.header.ss_count = 0;
+    v2_descriptor.fs_count = 3;
+    v2_descriptor.hs_count = 3;
     v2_descriptor.fs_descs = fs_descriptors;
     v2_descriptor.hs_descs = hs_descriptors;