blob: daac47400a4373a36a87cbc1c5b6e7bfc7da05fb [file] [log] [blame]
// Copyright 2024 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "third_party/crashpad/crashpad/handler/handler_main.h"
#if BUILDFLAG(IS_WIN)
#include <windows.h>
#include <stdlib.h>
#include <vector>
#include "base/compiler_specific.h"
#include "base/containers/heap_array.h"
#include "base/containers/span.h"
#include "base/strings/utf_string_conversions.h"
#endif
#if BUILDFLAG(IS_LINUX)
int main(int argc, char* argv[]) {
return crashpad::HandlerMain(argc, argv,
/*user_stream_data_sources=*/nullptr);
}
#elif BUILDFLAG(IS_WIN)
namespace {
int HandlerMainAdaptor(int argc, char* argv[]) {
return crashpad::HandlerMain(argc, argv,
/*user_stream_data_sources=*/nullptr);
}
} // namespace
int wmain(int argc, wchar_t* argv[]) {
// Convert wide strings to skinny strings.
auto argv_as_utf8 = base::HeapArray<char*>::Uninit(argc + 1);
std::vector<std::string> storage;
storage.reserve(argc);
auto argv_span = UNSAFE_BUFFERS(base::span<wchar_t*>(
argv, static_cast<size_t>(argc))); // SAFETY: argv,argc come from os.
for (int i = 0; i < argc; ++i) {
storage.push_back(base::WideToUTF8(argv_span[i]));
argv_as_utf8[i] = &storage[i][0];
}
argv_as_utf8[argc] = nullptr;
return HandlerMainAdaptor(argc, argv_as_utf8.data());
}
#endif // BUILDFLAG(IS_LINUX)