Merge "Switch to memcpy for accessing misaligned data." am: 2bdb37190c
am: 87daae5505
am: 317f152365
Change-Id: I0ac217ad4aafc06ecaf44bc9b1568eb0b2b753e8
This commit is contained in:
commit
231c735043
2 changed files with 8 additions and 14 deletions
|
@ -20,25 +20,19 @@
|
|||
namespace android {
|
||||
namespace base {
|
||||
|
||||
// Use packed structures for access to unaligned data on targets with alignment
|
||||
// Use memcpy for access to unaligned data on targets with alignment
|
||||
// restrictions. The compiler will generate appropriate code to access these
|
||||
// structures without generating alignment exceptions.
|
||||
template <typename T>
|
||||
static inline T get_unaligned(const T* address) {
|
||||
struct unaligned {
|
||||
T v;
|
||||
} __attribute__((packed));
|
||||
const unaligned* p = reinterpret_cast<const unaligned*>(address);
|
||||
return p->v;
|
||||
static inline T get_unaligned(const void* address) {
|
||||
T result;
|
||||
memcpy(&result, address, sizeof(T));
|
||||
return result;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
static inline void put_unaligned(T* address, T v) {
|
||||
struct unaligned {
|
||||
T v;
|
||||
} __attribute__((packed));
|
||||
unaligned* p = reinterpret_cast<unaligned*>(address);
|
||||
p->v = v;
|
||||
static inline void put_unaligned(void* address, T v) {
|
||||
memcpy(address, &v, sizeof(T));
|
||||
}
|
||||
|
||||
} // namespace base
|
||||
|
|
|
@ -152,7 +152,7 @@ public:
|
|||
}
|
||||
|
||||
bool DoVerify(const password_handle_t *expected_handle, const SizedBuffer &password) {
|
||||
uint64_t user_id = android::base::get_unaligned(&expected_handle->user_id);
|
||||
uint64_t user_id = android::base::get_unaligned<secure_id_t>(&expected_handle->user_id);
|
||||
FastHashMap::const_iterator it = fast_hash_map_.find(user_id);
|
||||
if (it != fast_hash_map_.end() && VerifyFast(it->second, password)) {
|
||||
return true;
|
||||
|
|
Loading…
Reference in a new issue