[gn] Fix broken Windows builds https://gn-review.googlesource.com/c/gn/+/14320 was submitted through CQ despite failing to build on Windows. This fixes the broken bits. Change-Id: Ibfd04f1480c9798c6ce8f68630fe4179f1b0eee2 Reviewed-on: https://gn-review.googlesource.com/c/gn/+/14340 Reviewed-by: Brett Wilson <brettw@chromium.org> Commit-Queue: Brett Wilson <brettw@chromium.org>
diff --git a/src/base/files/file_util_win.cc b/src/base/files/file_util_win.cc index 150ddf6..c808bde 100644 --- a/src/base/files/file_util_win.cc +++ b/src/base/files/file_util_win.cc
@@ -300,23 +300,25 @@ // Although it is nearly impossible to get a duplicate name with GUID, we // still use a loop here in case it happens. for (int i = 0; i < 100; ++i) { - temp_name = dir.Append(FormatTemporaryFileName(UTF8ToWide(GenerateGUID()))); + temp_name = dir.Append( + FilePath(UTF8ToUTF16(GenerateGUID()) + FILE_PATH_LITERAL(".tmp"))); file.Initialize(temp_name, kFlags); if (file.IsValid()) break; } if (!file.IsValid()) { - DPLOG(WARNING) << "Failed to get temporary file name in " << dir.value(); + DPLOG(WARNING) << "Failed to get temporary file name in " + << UTF16ToUTF8(dir.value()); return file; } - wchar_t long_temp_name[MAX_PATH + 1]; - const DWORD long_name_len = - GetLongPathName(temp_name.value().c_str(), long_temp_name, MAX_PATH); + char16_t long_temp_name[MAX_PATH + 1]; + const DWORD long_name_len = GetLongPathName( + ToWCharT(temp_name.value().c_str()), ToWCharT(long_temp_name), MAX_PATH); if (long_name_len != 0 && long_name_len <= MAX_PATH) { *temp_file = - FilePath(FilePath::StringPieceType(long_temp_name, long_name_len)); + FilePath(FilePath::StringViewType(long_temp_name, long_name_len)); } else { // GetLongPathName() failed, but we still have a temporary file. *temp_file = std::move(temp_name);
diff --git a/src/gn/command_clean.cc b/src/gn/command_clean.cc index 8261845..e6c52fc 100644 --- a/src/gn/command_clean.cc +++ b/src/gn/command_clean.cc
@@ -51,7 +51,8 @@ base::FileEnumerator::FILES | base::FileEnumerator::DIRECTORIES); for (base::FilePath current = traversal.Next(); !current.empty(); current = traversal.Next()) { - std::string basename = base::ToLowerASCII(current.BaseName().value()); + base::FilePath::StringType basename = + base::ToLowerASCII(current.BaseName().value()); if (std::none_of(std::begin(remaining), std::end(remaining), [&](auto rem) { return basename == rem; })) { base::DeleteFile(current, true);
diff --git a/src/gn/commands.cc b/src/gn/commands.cc index 3840761..030f2d5 100644 --- a/src/gn/commands.cc +++ b/src/gn/commands.cc
@@ -12,6 +12,7 @@ #include "base/files/file_util.h" #include "base/strings/string_split.h" #include "base/strings/string_util.h" +#include "base/strings/utf_string_conversions.h" #include "base/values.h" #include "gn/builder.h" #include "gn/config_values_extractors.h" @@ -329,6 +330,14 @@ return std::nullopt; } +std::string ToUTF8(base::FilePath::StringType in) { +#if defined(OS_WIN) + return base::UTF16ToUTF8(in); +#else + return in; +#endif +} + } // namespace CommandInfo::CommandInfo() @@ -495,7 +504,7 @@ // for ninja to call GN and regenerate ninja files. base::FilePath build_ninja_path(settings->GetFullPath( SourceFile(settings->build_dir().value() + "build.ninja"))); - std::ifstream build_ninja_file(build_ninja_path.value()); + std::ifstream build_ninja_file(ToUTF8(build_ninja_path.value())); if (!build_ninja_file) { // Couldn't open the build.ninja file. Err(Location(), "Couldn't open build.ninja in this directory.",