1*6777b538SAndroid Build Coastguard Worker // Copyright 2019 The Chromium Authors 2*6777b538SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be 3*6777b538SAndroid Build Coastguard Worker // found in the LICENSE file. 4*6777b538SAndroid Build Coastguard Worker 5*6777b538SAndroid Build Coastguard Worker #include "base/win/hstring_reference.h" 6*6777b538SAndroid Build Coastguard Worker 7*6777b538SAndroid Build Coastguard Worker #include <windows.h> 8*6777b538SAndroid Build Coastguard Worker 9*6777b538SAndroid Build Coastguard Worker #include <wchar.h> 10*6777b538SAndroid Build Coastguard Worker #include <winstring.h> 11*6777b538SAndroid Build Coastguard Worker 12*6777b538SAndroid Build Coastguard Worker #include "base/check_op.h" 13*6777b538SAndroid Build Coastguard Worker #include "base/numerics/safe_conversions.h" 14*6777b538SAndroid Build Coastguard Worker 15*6777b538SAndroid Build Coastguard Worker namespace base::win { 16*6777b538SAndroid Build Coastguard Worker HStringReference(const wchar_t * str)17*6777b538SAndroid Build Coastguard WorkerHStringReference::HStringReference(const wchar_t* str) { 18*6777b538SAndroid Build Coastguard Worker // String must be null terminated for WindowsCreateStringReference. 19*6777b538SAndroid Build Coastguard Worker // nullptr str is OK so long as the length is 0. 20*6777b538SAndroid Build Coastguard Worker size_t length = str ? wcslen(str) : 0; 21*6777b538SAndroid Build Coastguard Worker const HRESULT hr = ::WindowsCreateStringReference( 22*6777b538SAndroid Build Coastguard Worker str, checked_cast<UINT32>(length), &hstring_header_, &hstring_); 23*6777b538SAndroid Build Coastguard Worker DCHECK_EQ(hr, S_OK); 24*6777b538SAndroid Build Coastguard Worker } 25*6777b538SAndroid Build Coastguard Worker 26*6777b538SAndroid Build Coastguard Worker } // namespace base::win 27