diff options
Diffstat (limited to 'third_party/ijar/platform_utils.cc')
-rw-r--r-- | third_party/ijar/platform_utils.cc | 133 |
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 |