Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 472d7ada authored by Alex Buynytskyy's avatar Alex Buynytskyy Committed by android-build-merger
Browse files

Merge "Addressing comments in 1130236."

am: dd7288d8

Change-Id: I2a404f3680e061bebbd0f7e2c13d799ef56f0fff
parents bf982596 dd7288d8
Loading
Loading
Loading
Loading
+28 −15
Original line number Diff line number Diff line
@@ -53,34 +53,47 @@ namespace {

#ifdef _WIN32
static int mkstemp(char* name_template, size_t size_in_chars) {
  auto path = name_template;
  if (_mktemp_s(path, size_in_chars) != 0) {
  std::wstring path;
  CHECK(android::base::UTF8ToWide(name_template, &path))
      << "path can't be converted to wchar: " << name_template;
  if (_wmktemp_s(path.data(), path.size() + 1) != 0) {
    return -1;
  }

  std::wstring path_wide;
  CHECK(android::base::UTF8ToWide(path, &path_wide))
      << "path can't be converted to wchar: " << path;

  // Use open() to match the close() that TemporaryFile's destructor does.
  // Use O_BINARY to match base file APIs.
  return _wopen(path_wide.c_str(), O_CREAT | O_EXCL | O_RDWR | O_BINARY, S_IRUSR | S_IWUSR);
  int fd = _wopen(path.c_str(), O_CREAT | O_EXCL | O_RDWR | O_BINARY, S_IRUSR | S_IWUSR);
  if (fd < 0) {
    return -1;
  }

  std::string path_utf8;
  CHECK(android::base::WideToUTF8(path, &path_utf8)) << "path can't be converted to utf8";
  CHECK(strcpy_s(name_template, size_in_chars, path_utf8.c_str()) == 0)
      << "utf8 path can't be assigned back to name_template";

  return fd;
}

static char* mkdtemp(char* name_template, size_t size_in_chars) {
  auto path = name_template;
  if (_mktemp_s(path, size_in_chars) != 0) {
  std::wstring path;
  CHECK(android::base::UTF8ToWide(name_template, &path))
      << "path can't be converted to wchar: " << name_template;

  if (_wmktemp_s(path.data(), path.size() + 1) != 0) {
    return nullptr;
  }

  std::wstring path_wide;
  CHECK(android::base::UTF8ToWide(path, &path_wide))
      << "path can't be converted to wchar: " << path;

  if (_wmkdir(path_wide.c_str()) != 0) {
  if (_wmkdir(path.c_str()) != 0) {
    return nullptr;
  }
  return path;

  std::string path_utf8;
  CHECK(android::base::WideToUTF8(path, &path_utf8)) << "path can't be converted to utf8";
  CHECK(strcpy_s(name_template, size_in_chars, path_utf8.c_str()) == 0)
      << "utf8 path can't be assigned back to name_template";

  return name_template;
}
#endif

+11 −2
Original line number Diff line number Diff line
@@ -30,7 +30,7 @@
#if !defined(_WIN32)
#include <pwd.h>
#else
#include <processenv.h>
#include <windows.h>
#endif

#include "android-base/logging.h"  // and must be after windows.h for ERROR
@@ -99,6 +99,11 @@ TEST(file, NonUnicodeCharsWindows) {
  std::wstring old_tmp;
  old_tmp.resize(kMaxEnvVariableValueSize);
  old_tmp.resize(GetEnvironmentVariableW(L"TMP", old_tmp.data(), old_tmp.size()));
  if (old_tmp.empty()) {
    // Can't continue with empty TMP folder.
    return;
  }

  std::wstring new_tmp = old_tmp;
  if (new_tmp.back() != L'\\') {
    new_tmp.push_back(L'\\');
@@ -156,14 +161,18 @@ TEST(file, NonUnicodeCharsWindows) {
TEST(file, RootDirectoryWindows) {
  constexpr auto kMaxEnvVariableValueSize = 32767;
  std::wstring old_tmp;
  bool tmp_is_empty = false;
  old_tmp.resize(kMaxEnvVariableValueSize);
  old_tmp.resize(GetEnvironmentVariableW(L"TMP", old_tmp.data(), old_tmp.size()));
  if (old_tmp.empty()) {
    tmp_is_empty = (GetLastError() == ERROR_ENVVAR_NOT_FOUND);
  }
  SetEnvironmentVariableW(L"TMP", L"C:");

  TemporaryFile tf;
  ASSERT_NE(tf.fd, -1) << tf.path;

  SetEnvironmentVariableW(L"TMP", old_tmp.c_str());
  SetEnvironmentVariableW(L"TMP", tmp_is_empty ? nullptr : old_tmp.c_str());
}
#endif