Bazel client: reduce dependency on POSIX API

We can now compile blaze_util_windows.cc with
MSVC, yay! (when building //src:bazel
--cpu=x64_windows_msvc -k).

There are a lot of #ifdef's and TODOs so this
is a modest victory for now.

In this change:

- change blaze::MakeDirectories to return bool
instead of int, since that's how it was used
anyway, and to expect the permission mask as
unsigned int instead of mode_t, since the
former is good enough and compatible with
mode_t on POSIX while mode_t is not defined on
Windows

- move blaze::MakeDirectories into
blaze_util_<platform>

- implement envvar-handling in
blaze_util_<platform> and use it everywhere

See https://github.com/bazelbuild/bazel/issues/2107

--
MOS_MIGRATED_REVID=139887503
diff --git a/src/test/cpp/blaze_util_test.cc b/src/test/cpp/blaze_util_test.cc
index e8b5b28..bb0faf0 100644
--- a/src/test/cpp/blaze_util_test.cc
+++ b/src/test/cpp/blaze_util_test.cc
@@ -21,6 +21,7 @@
 #include <vector>
 
 #include "src/main/cpp/blaze_util.h"
+#include "src/main/cpp/blaze_util_platform.h"
 #include "src/main/cpp/util/file.h"
 #include "gtest/gtest.h"
 
@@ -182,12 +183,12 @@
   ASSERT_STRNE(NULL, test_src_dir);
 
   string dir = blaze_util::JoinPath(tmp_dir, "x/y/z");
-  int ok = MakeDirectories(dir, 0755);
-  ASSERT_EQ(0, ok);
+  bool ok = MakeDirectories(dir, 0755);
+  ASSERT_TRUE(ok);
 
   // Changing permissions on an existing dir should work.
   ok = MakeDirectories(dir, 0750);
-  ASSERT_EQ(0, ok);
+  ASSERT_TRUE(ok);
   struct stat filestat = {};
   ASSERT_EQ(0, stat(dir.c_str(), &filestat));
   ASSERT_EQ(0750, filestat.st_mode & 0777);
@@ -196,27 +197,27 @@
   // TODO(ulfjack): Fix this!
 //  string srcdir = blaze_util::JoinPath(test_src_dir, "x/y/z");
 //  ok = MakeDirectories(srcdir, 0755);
-//  ASSERT_EQ(-1, ok);
+//  ASSERT_FALSE(ok);
 //  ASSERT_EQ(EACCES, errno);
 
   // Can't make a dir out of a file.
   string non_dir = blaze_util::JoinPath(dir, "w");
   ASSERT_TRUE(CreateEmptyFile(non_dir));
   ok = MakeDirectories(non_dir, 0755);
-  ASSERT_EQ(-1, ok);
+  ASSERT_FALSE(ok);
   ASSERT_EQ(ENOTDIR, errno);
 
   // Valid symlink should work.
   string symlink = blaze_util::JoinPath(tmp_dir, "z");
   ASSERT_TRUE(Symlink(dir, symlink));
   ok = MakeDirectories(symlink, 0755);
-  ASSERT_EQ(0, ok);
+  ASSERT_TRUE(ok);
 
   // Error: Symlink to a file.
   symlink = blaze_util::JoinPath(tmp_dir, "w");
   ASSERT_TRUE(Symlink(non_dir, symlink));
   ok = MakeDirectories(symlink, 0755);
-  ASSERT_EQ(-1, ok);
+  ASSERT_FALSE(ok);
   ASSERT_EQ(ENOTDIR, errno);
 
   // Error: Symlink to a dir with wrong perms.
@@ -226,13 +227,13 @@
   // These perms will force a chmod()
   // TODO(ulfjack): Fix this!
 //  ok = MakeDirectories(symlink, 0000);
-//  ASSERT_EQ(-1, ok);
+//  ASSERTFALSE(ok);
 //  ASSERT_EQ(EPERM, errno);
 
   // Edge cases.
-  ASSERT_EQ(-1, MakeDirectories("", 0755));
+  ASSERT_FALSE(MakeDirectories("", 0755));
   ASSERT_EQ(EACCES, errno);
-  ASSERT_EQ(-1, MakeDirectories("/", 0755));
+  ASSERT_FALSE(MakeDirectories("/", 0755));
   ASSERT_EQ(EACCES, errno);
 }
 
@@ -243,7 +244,7 @@
   string path = blaze_util::JoinPath(tmp_dir, "x/y/z");
   // TODO(ulfjack): Fix this!
 //  ASSERT_LE(0, fork());
-//  ASSERT_EQ(0, MakeDirectories(path, 0755));
+//  ASSERT_TRUE(MakeDirectories(path, 0755));
 }
 
 }  // namespace blaze