From 21031237b319e3cb85f0ef7eafa33edc1645fc73 Mon Sep 17 00:00:00 2001 From: William Date: Tue, 8 Aug 2023 14:00:31 +0100 Subject: [PATCH] Explicitly call the EndianPutSigned for signed integers. (#28374) * Explicitly call the EndianPutSigned for signed integers. * Added constexpr to compile for Android. --- src/app/SafeAttributePersistenceProvider.h | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/app/SafeAttributePersistenceProvider.h b/src/app/SafeAttributePersistenceProvider.h index c6cba4e9f7135d..ed02d6039043ad 100644 --- a/src/app/SafeAttributePersistenceProvider.h +++ b/src/app/SafeAttributePersistenceProvider.h @@ -54,7 +54,14 @@ class SafeAttributePersistenceProvider { uint8_t value[sizeof(T)]; auto w = Encoding::LittleEndian::BufferWriter(value, sizeof(T)); - w.EndianPut(uint64_t(aValue), sizeof(T)); + if constexpr (std::is_signed_v) + { + w.EndianPutSigned(aValue, sizeof(T)); + } + else + { + w.EndianPut(aValue, sizeof(T)); + } return SafeWriteValue(aPath, ByteSpan(value)); } @@ -76,7 +83,7 @@ class SafeAttributePersistenceProvider return err; } - chip::Encoding::LittleEndian::Reader r(tempVal.data(), tempVal.size()); + Encoding::LittleEndian::Reader r(tempVal.data(), tempVal.size()); r.RawReadLowLevelBeCareful(&aValue); return r.StatusCode(); }