1 // Copyright 2018 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "mojo/public/cpp/base/logfont_win_mojom_traits.h" 6 7 #include <tchar.h> 8 9 #include "base/logging.h" 10 #include "base/numerics/safe_conversions.h" 11 12 namespace mojo { 13 14 // static 15 base::span<const uint8_t> bytes(const::LOGFONT & input)16StructTraits<mojo_base::mojom::LOGFONTDataView, ::LOGFONT>::bytes( 17 const ::LOGFONT& input) { 18 return base::make_span(reinterpret_cast<const uint8_t*>(&input), 19 sizeof(::LOGFONT)); 20 } 21 22 // static Read(mojo_base::mojom::LOGFONTDataView data,::LOGFONT * out)23bool StructTraits<mojo_base::mojom::LOGFONTDataView, ::LOGFONT>::Read( 24 mojo_base::mojom::LOGFONTDataView data, 25 ::LOGFONT* out) { 26 ArrayDataView<uint8_t> bytes_view; 27 data.GetBytesDataView(&bytes_view); 28 if (bytes_view.size() != sizeof(::LOGFONT)) 29 return false; 30 31 const ::LOGFONT* font = reinterpret_cast<const ::LOGFONT*>(bytes_view.data()); 32 if (_tcsnlen(font->lfFaceName, LF_FACESIZE) >= LF_FACESIZE) 33 return false; 34 35 memcpy(out, font, sizeof(::LOGFONT)); 36 return true; 37 } 38 39 } // namespace mojo 40