aboutsummaryrefslogtreecommitdiffhomepage
path: root/third_party/ijar/platform_utils.cc
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/ijar/platform_utils.cc')
-rw-r--r--third_party/ijar/platform_utils.cc133
1 files changed, 20 insertions, 113 deletions
diff --git a/third_party/ijar/platform_utils.cc b/third_party/ijar/platform_utils.cc
index e1b46db5b5..29d468a4fc 100644
--- a/third_party/ijar/platform_utils.cc
+++ b/third_party/ijar/platform_utils.cc
@@ -14,26 +14,22 @@
#include "third_party/ijar/platform_utils.h"
-#include <errno.h>
#include <limits.h>
#include <stdio.h>
#if defined(COMPILER_MSVC) || defined(__CYGWIN__)
#include <windows.h>
-#endif // defined(COMPILER_MSVC) || defined(__CYGWIN__)
-
-#ifndef COMPILER_MSVC
-#include <fcntl.h>
+#else // !(defined(COMPILER_MSVC) || defined(__CYGWIN__))
#include <sys/stat.h>
+#include <sys/types.h>
#include <unistd.h>
-#endif // not COMPILER_MSVC
+#endif // defined(COMPILER_MSVC) || defined(__CYGWIN__)
#include <string>
-#if defined(COMPILER_MSVC) || defined(__CYGWIN__)
#include "src/main/cpp/util/errors.h"
+#include "src/main/cpp/util/file.h"
#include "src/main/cpp/util/file_platform.h"
-#endif // defined(COMPILER_MSVC) || defined(__CYGWIN__)
namespace devtools_ijar {
@@ -81,119 +77,30 @@ bool stat_file(const char* path, Stat* result) {
#endif // defined(COMPILER_MSVC) || defined(__CYGWIN__)
}
-bool write_file(const char* path, mode_t perm, const void* data, size_t size) {
-#ifdef COMPILER_MSVC
- // TODO(laszlocsomor) 2016-12-01: implement this and other methods, in order
- // to close https://github.com/bazelbuild/bazel/issues/2157.
- fprintf(stderr, "Not yet implemented on Windows\n");
- return false;
-#else // not COMPILER_MSVC
- int fd = open(path, O_CREAT | O_WRONLY, perm);
- if (fd < 0) {
- fprintf(stderr, "Cannot open file %s for writing: %s\n", path,
- strerror(errno));
- return false;
- }
- bool result = true;
- int error = write(fd, data, size);
- // Check for an error condition, or if we didn't write all of the data.
- if (error < 0 || static_cast<size_t>(error) != size) {
- fprintf(stderr, "Cannot write %zu bytes to file %s: %s\n", size, path,
- strerror(errno));
- result = false;
- }
- if (close(fd)) {
- fprintf(stderr, "Cannot close file %s: %s\n", path, strerror(errno));
- result = false;
- }
- return result;
-#endif // COMPILER_MSVC
+bool write_file(const char* path, unsigned int perm, const void* data,
+ size_t size) {
+ return blaze_util::WriteFile(data, size, path, perm);
}
bool read_file(const char* path, void* buffer, size_t size) {
-#ifdef COMPILER_MSVC
- // TODO(laszlocsomor) 2016-12-01: implement this and other methods, in order
- // to close https://github.com/bazelbuild/bazel/issues/2157.
- fprintf(stderr, "Not yet implemented on Windows\n");
- return false;
-#else // not COMPILER_MSVC
- // read the input file
- int fd = open(path, O_RDONLY);
- if (fd < 0) {
- fprintf(stderr, "Can't open file %s for reading: %s\n", path,
- strerror(errno));
- return false;
- }
- bool result = true;
- size_t nb_read = 0;
- while (nb_read < size) {
- size_t to_read = size - nb_read;
- if (to_read > 16384 /* 16K */) {
- to_read = 16384;
- }
- ssize_t r = read(fd, static_cast<uint8_t*>(buffer) + nb_read, to_read);
- if (r < 0) {
- fprintf(stderr, "Can't read %zu bytes from file %s: %s\n", to_read, path,
- strerror(errno));
- result = false;
- break;
- }
- nb_read += r;
- }
- if (close(fd)) {
- fprintf(stderr, "Cannot close file %s: %s\n", path, strerror(errno));
- result = false;
- }
- return result;
-#endif // COMPILER_MSVC
+ return blaze_util::ReadFile(path, buffer, size);
}
-string get_cwd() {
-#ifdef COMPILER_MSVC
- // TODO(laszlocsomor) 2016-12-01: implement this and other methods, in order
- // to close https://github.com/bazelbuild/bazel/issues/2157.
- fprintf(stderr, "Not yet implemented on Windows\n");
- return "";
-#else // not COMPILER_MSVC
- char cwd[PATH_MAX];
- if (getcwd(cwd, PATH_MAX) == NULL) {
- fprintf(stderr, "getcwd() failed: %s\n", strerror(errno));
- return "";
- } else {
- return string(cwd);
- }
-#endif // COMPILER_MSVC
-}
+string get_cwd() { return blaze_util::GetCwd(); }
-bool make_dirs(const char* path, mode_t mode) {
-#ifdef COMPILER_MSVC
- // TODO(laszlocsomor) 2016-12-01: implement this and other methods, in order
- // to close https://github.com/bazelbuild/bazel/issues/2157.
- fprintf(stderr, "Not yet implemented on Windows\n");
- return false;
-#else // not COMPILER_MSVC
- // Directories created must have executable bit set and be owner writeable.
- // Otherwise, we cannot write or create any file inside.
+bool make_dirs(const char* path, unsigned int mode) {
+#ifndef COMPILER_MSVC
+ // TODO(laszlocsomor): respect `mode` on Windows/MSVC.
mode |= S_IWUSR | S_IXUSR;
- char path_[PATH_MAX];
- Stat file_stat;
- strncpy(path_, path, PATH_MAX);
- path_[PATH_MAX - 1] = 0;
- char* pointer = path_;
- while ((pointer = strchr(pointer, '/')) != NULL) {
- if (path_ != pointer) { // skip leading slash
- *pointer = 0;
- if (!stat_file(path_, &file_stat) && mkdir(path_, mode) < 0) {
- fprintf(stderr, "Cannot create folder %s: %s\n", path_,
- strerror(errno));
- return false;
- }
- *pointer = '/';
- }
- pointer++;
+#endif // not COMPILER_MSVC
+ string spath(path);
+ if (spath.empty()) {
+ return true;
}
- return true;
-#endif // COMPILER_MSVC
+ if (spath.back() != '/' && spath.back() != '\\') {
+ spath = blaze_util::Dirname(spath);
+ }
+ return blaze_util::MakeDirectories(spath, mode);
}
} // namespace devtools_ijar