Chromium Code Reviews| Index: chrome/installer/mini_installer/mini_installer_exe_main.cc |
| diff --git a/chrome/installer/mini_installer/mini_installer_exe_main.cc b/chrome/installer/mini_installer/mini_installer_exe_main.cc |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..280a60ff7c9bc30c094829254b47e86366350956 |
| --- /dev/null |
| +++ b/chrome/installer/mini_installer/mini_installer_exe_main.cc |
| @@ -0,0 +1,47 @@ |
| +// Copyright 2017 The Chromium Authors. All rights reserved. |
| +// Use of this source code is governed by a BSD-style license that can be |
| +// found in the LICENSE file. |
| + |
| +#include "chrome/installer/mini_installer/mini_installer.h" |
| + |
| +// http://blogs.msdn.com/oldnewthing/archive/2004/10/25/247180.aspx |
| +extern "C" IMAGE_DOS_HEADER __ImageBase; |
| + |
| +extern "C" int __stdcall MainEntryPoint() { |
| + mini_installer::ProcessExitResult result = |
| + mini_installer::WMain(reinterpret_cast<HMODULE>(&__ImageBase)); |
| + ::ExitProcess(result.exit_code); |
| +} |
| + |
| +#if defined(ADDRESS_SANITIZER) |
| +// Executables instrumented with ASAN need CRT functions. We do not use |
| +// the /ENTRY switch for ASAN instrumented executable and a "main" function |
| +// is required. |
| +extern "C" int WINAPI wWinMain(HINSTANCE /* instance */, |
| + HINSTANCE /* previous_instance */, |
| + LPWSTR /* command_line */, |
| + int /* command_show */) { |
| + return MainEntryPoint(); |
| +} |
| +#endif |
| + |
| +// VC Express editions don't come with the memset CRT obj file and linking to |
| +// the obj files between versions becomes a bit problematic. Therefore, |
| +// simply implement memset. |
| +// |
| +// This also avoids having to explicitly set the __sse2_available hack when |
| +// linking with both the x64 and x86 obj files which is required when not |
| +// linking with the std C lib in certain instances (including Chromium) with |
| +// MSVC. __sse2_available determines whether to use SSE2 intructions with |
| +// std C lib routines, and is set by MSVC's std C lib implementation normally. |
| +extern "C" { |
| +#pragma function(memset) |
| +void* memset(void* dest, int c, size_t count) { |
| + void* start = dest; |
|
bcwhite
2017/01/27 14:59:19
How about:
char* ptr = reinterpret_cast<char*>(d
grt (UTC plus 2)
2017/01/27 15:18:37
This code was simply moved from mini_installer.cc
|
| + while (count--) { |
| + *reinterpret_cast<char*>(dest) = static_cast<char>(c); |
| + dest = reinterpret_cast<char*>(dest) + 1; |
| + } |
| + return start; |
| +} |
| +} // extern "C" |