From 6f8f5c5f400ff0d974983133dbc0b74b9e58ec03 Mon Sep 17 00:00:00 2001 From: destradaa Date: Mon, 1 Jun 2015 13:47:52 -0700 Subject: [PATCH] Pack AGpsStatus data structures for 64-bit platforms. b/21471818 The packing of AGpsStatus_v1 ensures that its size does not collide with the size of AGpsStatus_v2. Change-Id: Ic73a73070c29c0e819cb62667bc14333f448e856 --- include/hardware/gps.h | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/include/hardware/gps.h b/include/hardware/gps.h index 38353f28..76b6cb7a 100644 --- a/include/hardware/gps.h +++ b/include/hardware/gps.h @@ -673,6 +673,12 @@ typedef struct { size_t (*get_internal_state)(char* buffer, size_t bufferSize); } GpsDebugInterface; +#pragma pack(push,4) +// We need to keep the alignment of this data structure to 4-bytes, to ensure that in 64-bit +// environments the size of this legacy definition does not collide with _v2. Implementations should +// be using _v2 and _v3, so it's OK to pay the 'unaligned' penalty in 64-bit if an old +// implementation is still in use. + /** Represents the status of AGPS. */ typedef struct { /** set to sizeof(AGpsStatus_v1) */ @@ -682,6 +688,8 @@ typedef struct { AGpsStatusValue status; } AGpsStatus_v1; +#pragma pack(pop) + /** Represents the status of AGPS augmented with a IPv4 address field. */ typedef struct { /** set to sizeof(AGpsStatus_v2) */