From 40d2dcabd7e5b978c0e1e5c76000de01e2d0c270 Mon Sep 17 00:00:00 2001 From: Lioncash Date: Sun, 29 Apr 2018 18:18:39 -0400 Subject: [PATCH] file_util: Add static assertions to ReadBytes() and WriteBytes() Ensure that the actual types being passed in are trivially copyable. The internal call to ReadArray() and WriteArray() will always succeed, since they're passed a pointer to char* which is always trivially copyable. --- src/common/file_util.h | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/common/file_util.h b/src/common/file_util.h index 4c11849eea..32ff4d8ca2 100644 --- a/src/common/file_util.h +++ b/src/common/file_util.h @@ -202,11 +202,15 @@ public: return items_written; } - size_t ReadBytes(void* data, size_t length) { + template + size_t ReadBytes(T* data, size_t length) { + static_assert(std::is_trivially_copyable(), "T must be trivially copyable"); return ReadArray(reinterpret_cast(data), length); } - size_t WriteBytes(const void* data, size_t length) { + template + size_t WriteBytes(const T* data, size_t length) { + static_assert(std::is_trivially_copyable(), "T must be trivially copyable"); return WriteArray(reinterpret_cast(data), length); }