From 47da9f6d940d0096d53e99aee47bb2ee701f8e88 Mon Sep 17 00:00:00 2001 From: Hao Zheng Date: Tue, 14 May 2024 12:26:19 -0700 Subject: [PATCH] Clean up SbFile usages in base b/302715109 --- base/files/file.h | 4 +- base/files/file_enumerator.h | 14 +- base/files/file_enumerator_starboard.cc | 18 +-- base/files/file_starboard.cc | 144 ++++++++++-------- base/files/file_util_starboard.cc | 30 ++-- base/files/file_util_unittest.cc | 20 +-- base/files/platform_file.h | 4 +- base/files/scoped_file.cc | 2 +- base/files/scoped_file.h | 11 +- base/logging.cc | 26 ++-- .../skia/skia/src/ports/SkOSFile_cobalt.cc | 4 +- cobalt/renderer/test/png_utils/png_decode.cc | 25 ++- cobalt/trace_event/json_file_outputter.cc | 12 +- 13 files changed, 167 insertions(+), 147 deletions(-) diff --git a/base/files/file.h b/base/files/file.h index 21528069f485..2a2a31f7b5b5 100644 --- a/base/files/file.h +++ b/base/files/file.h @@ -118,7 +118,7 @@ class BASE_EXPORT File { struct BASE_EXPORT Info { Info(); ~Info(); -#if BUILDFLAG(IS_POSIX) || BUILDFLAG(IS_FUCHSIA) +#if BUILDFLAG(IS_POSIX) || BUILDFLAG(IS_FUCHSIA) || defined(STARBOARD) // Fills this struct with values from |stat_info|. void FromStat(const stat_wrapper_t& stat_info); #endif @@ -370,7 +370,7 @@ class BASE_EXPORT File { // Converts an error value to a human-readable form. Used for logging. static std::string ErrorToString(Error error); -#if BUILDFLAG(IS_POSIX) || BUILDFLAG(IS_FUCHSIA) +#if BUILDFLAG(IS_POSIX) || BUILDFLAG(IS_FUCHSIA) || defined(STARBOARD) // Wrapper for stat() or stat64(). static int Stat(const char* path, stat_wrapper_t* sb); static int Fstat(int fd, stat_wrapper_t* sb); diff --git a/base/files/file_enumerator.h b/base/files/file_enumerator.h index 85bd451654a1..b970055bc8aa 100644 --- a/base/files/file_enumerator.h +++ b/base/files/file_enumerator.h @@ -18,6 +18,8 @@ #include "build/build_config.h" #if defined(STARBOARD) +#include +#include #include "starboard/file.h" #elif BUILDFLAG(IS_WIN) #include "base/win/windows_types.h" @@ -60,7 +62,8 @@ class BASE_EXPORT FileEnumerator { // On POSIX systems, this is rounded down to the second. Time GetLastModifiedTime() const; -#if defined(STARBOARD) +#if defined(STARBOARD) || BUILDFLAG(IS_POSIX) || BUILDFLAG(IS_FUCHSIA) + const stat_wrapper_t& stat() const { return stat_; } #elif BUILDFLAG(IS_WIN) // Note that the cAlternateFileName (used to hold the "short" 8.3 name) // of the WIN32_FIND_DATA will be empty. Since we don't use short file @@ -68,21 +71,16 @@ class BASE_EXPORT FileEnumerator { const WIN32_FIND_DATA& find_data() const { return *ChromeToWindowsType(&find_data_); } -#elif BUILDFLAG(IS_POSIX) || BUILDFLAG(IS_FUCHSIA) - const stat_wrapper_t& stat() const { return stat_; } #endif private: friend class FileEnumerator; -#if defined(STARBOARD) +#if defined(STARBOARD) || BUILDFLAG(IS_POSIX) || BUILDFLAG(IS_FUCHSIA) + stat_wrapper_t stat_; FilePath filename_; - SbFileInfo sb_info_; #elif BUILDFLAG(IS_WIN) CHROME_WIN32_FIND_DATA find_data_; -#elif BUILDFLAG(IS_POSIX) || BUILDFLAG(IS_FUCHSIA) - stat_wrapper_t stat_; - FilePath filename_; #endif }; diff --git a/base/files/file_enumerator_starboard.cc b/base/files/file_enumerator_starboard.cc index 9b0c3472943d..0bfb41d3d9bf 100644 --- a/base/files/file_enumerator_starboard.cc +++ b/base/files/file_enumerator_starboard.cc @@ -28,11 +28,11 @@ namespace base { // FileEnumerator::FileInfo ---------------------------------------------------- FileEnumerator::FileInfo::FileInfo() { - memset(&sb_info_, 0, sizeof(sb_info_)); + memset(&stat_, 0, sizeof(stat_)); } bool FileEnumerator::FileInfo::IsDirectory() const { - return sb_info_.is_directory; + return S_ISDIR(stat_.st_mode); } FilePath FileEnumerator::FileInfo::GetName() const { @@ -40,12 +40,12 @@ FilePath FileEnumerator::FileInfo::GetName() const { } int64_t FileEnumerator::FileInfo::GetSize() const { - return sb_info_.size; + return stat_.st_size; } base::Time FileEnumerator::FileInfo::GetLastModifiedTime() const { return base::Time::FromDeltaSinceWindowsEpoch( - base::TimeDelta::FromMicroseconds(sb_info_.last_modified)); + base::TimeDelta::FromMicroseconds(stat_.st_mtime)); } // FileEnumerator -------------------------------------------------------------- @@ -124,9 +124,9 @@ std::vector FileEnumerator::ReadDirectory( FilePath full_name = source.Append(filename); // TODO: Make sure this follows symlinks on relevant platforms. - if (!SbFileGetPathInfo(full_name.value().c_str(), &info.sb_info_)) { + if (stat(full_name.value().c_str(), &info.stat_) != 0) { DPLOG(ERROR) << "Couldn't SbFileGetInfo on " << full_name.value(); - memset(&info.sb_info_, 0, sizeof(info.sb_info_)); + memset(&info.stat_, 0, sizeof(info.stat_)); } return info; }; @@ -186,12 +186,12 @@ FilePath FileEnumerator::Next() { continue; } - if (recursive_ && file_info.sb_info_.is_directory) { + if (recursive_ && file_info.IsDirectory()) { pending_paths_.push(full_path); } - if ((file_info.sb_info_.is_directory && (file_type_ & DIRECTORIES)) || - (!file_info.sb_info_.is_directory && (file_type_ & FILES)) || + if ((file_info.IsDirectory() && (file_type_ & DIRECTORIES)) || + (!file_info.IsDirectory() && (file_type_ & FILES)) || (file_type_ & NAMES_ONLY)) { directory_entries_.push_back(file_info); } diff --git a/base/files/file_starboard.cc b/base/files/file_starboard.cc index 1e1439be9887..e915ee6da749 100644 --- a/base/files/file_starboard.cc +++ b/base/files/file_starboard.cc @@ -17,12 +17,16 @@ #include "base/files/file_starboard.h" #include +#include +#include +#include #include "base/files/file.h" #include "base/files/file_path.h" #include "base/notreached.h" #include "base/strings/stringprintf.h" #include "base/threading/thread_restrictions.h" +#include "starboard/common/file.h" #include "starboard/common/log.h" #include "starboard/common/metrics/stats_tracker.h" #include "starboard/file.h" @@ -80,7 +84,8 @@ int64_t File::Seek(Whence whence, int64_t offset) { DCHECK(IsValid()); SCOPED_FILE_TRACE_WITH_SIZE("Seek", offset); - return SbFileSeek(file_.get(), static_cast(whence), offset); + return lseek(file_.get(), static_cast(offset), + static_cast(whence)); } int File::Read(int64_t offset, char* data, int size) { @@ -92,19 +97,21 @@ int File::Read(int64_t offset, char* data, int size) { SCOPED_FILE_TRACE_WITH_SIZE("Read", size); - int original_position = SbFileSeek(file_.get(), kSbFileFromCurrent, 0); + int original_position = lseek(file_.get(), 0, static_cast(kSbFileFromCurrent)); if (original_position < 0) { return -1; } - int position = SbFileSeek(file_.get(), kSbFileFromBegin, offset); + int position = + lseek(file_.get(), static_cast(offset), static_cast(kSbFileFromBegin)); int result = 0; if (position == offset) { result = ReadAtCurrentPos(data, size); } // Restore position regardless of result of write. - position = SbFileSeek(file_.get(), kSbFileFromBegin, original_position); + position = + lseek(file_.get(), static_cast(original_position), static_cast(kSbFileFromBegin)); if (result < 0) { return result; } @@ -124,7 +131,7 @@ int File::ReadAtCurrentPos(char* data, int size) { SCOPED_FILE_TRACE_WITH_SIZE("ReadAtCurrentPos", size); - return SbFileReadAll(file_.get(), data, size); + return starboard::ReadAll(file_.get(), data, size); } int File::ReadNoBestEffort(int64_t offset, char* data, int size) { @@ -132,19 +139,22 @@ int File::ReadNoBestEffort(int64_t offset, char* data, int size) { DCHECK(IsValid()); SCOPED_FILE_TRACE_WITH_SIZE("ReadNoBestEffort", size); - int original_position = SbFileSeek(file_.get(), kSbFileFromCurrent, 0); + int original_position = lseek( + file_.get(), 0, static_cast(kSbFileFromCurrent)); if (original_position < 0) { return -1; } - int position = SbFileSeek(file_.get(), kSbFileFromBegin, offset); + int position = + lseek(file_.get(), static_cast(offset), static_cast(kSbFileFromBegin)); int result = 0; if (position == offset) { - result = SbFileRead(file_.get(), data, size); + result = read(file_.get(), data, size); } // Restore position regardless of result of read. - position = SbFileSeek(file_.get(), kSbFileFromBegin, original_position); + position = lseek(file_.get(), static_cast(original_position), + static_cast(kSbFileFromBegin)); if (result < 0) { return result; } @@ -163,7 +173,7 @@ int File::ReadAtCurrentPosNoBestEffort(char* data, int size) { return -1; SCOPED_FILE_TRACE_WITH_SIZE("ReadAtCurrentPosNoBestEffort", size); - return SbFileRead(file_.get(), data, size); + return read(file_.get(), data, size); } int File::Write(int64_t offset, const char* data, int size) { @@ -173,19 +183,21 @@ int File::Write(int64_t offset, const char* data, int size) { return WriteAtCurrentPos(data, size); } - int original_position = SbFileSeek(file_.get(), kSbFileFromCurrent, 0); + int original_position = lseek(file_.get(), 0, static_cast(kSbFileFromCurrent)); if (original_position < 0) { return -1; } - int64_t position = SbFileSeek(file_.get(), kSbFileFromBegin, offset); + int64_t position = + lseek(file_.get(), static_cast(offset), static_cast(kSbFileFromBegin)); int result = 0; if (position == offset) { result = WriteAtCurrentPos(data, size); } // Restore position regardless of result of write. - position = SbFileSeek(file_.get(), kSbFileFromBegin, original_position); + position = lseek(file_.get(), static_cast(original_position), + static_cast(kSbFileFromBegin)); if (result < 0) { return result; } @@ -204,7 +216,7 @@ int File::WriteAtCurrentPos(const char* data, int size) { return -1; SCOPED_FILE_TRACE_WITH_SIZE("WriteAtCurrentPos", size); - int write_result = SbFileWriteAll(file_.get(), data, size); + int write_result = starboard::WriteAll(file_.get(), data, size); RecordFileWriteStat(write_result); return write_result; } @@ -216,7 +228,7 @@ int File::WriteAtCurrentPosNoBestEffort(const char* data, int size) { return -1; SCOPED_FILE_TRACE_WITH_SIZE("WriteAtCurrentPosNoBestEffort", size); - int write_result = SbFileWrite(file_.get(), data, size); + int write_result = write(file_.get(), data, size); RecordFileWriteStat(write_result); return write_result; } @@ -226,12 +238,11 @@ int64_t File::GetLength() { SCOPED_FILE_TRACE("GetLength"); - File::Info file_info; - if (!GetInfo(&file_info)) { + stat_wrapper_t file_info; + if (Fstat(file_.get(), &file_info)) return -1; - } - return file_info.size; + return file_info.st_size; } bool File::SetLength(int64_t length) { @@ -239,7 +250,7 @@ bool File::SetLength(int64_t length) { DCHECK(IsValid()); SCOPED_FILE_TRACE_WITH_SIZE("SetLength", length); - return SbFileTruncate(file_.get(), length); + return ftruncate(file_.get(), length) == 0; } bool File::SetTimes(Time last_access_time, Time last_modified_time) { @@ -257,22 +268,11 @@ bool File::GetInfo(Info* info) { SCOPED_FILE_TRACE("GetInfo"); - if (!info || !SbFileIsValid(file_.get())) - return false; - - SbFileInfo file_info; - if (!SbFileGetInfo(file_.get(), &file_info)) + stat_wrapper_t file_info; + if (Fstat(file_.get(), &file_info)) return false; - info->is_directory = file_info.is_directory; - info->is_symbolic_link = file_info.is_symbolic_link; - info->size = file_info.size; - info->last_modified = base::Time::FromDeltaSinceWindowsEpoch( - base::TimeDelta::FromMicroseconds(file_info.last_modified)); - info->last_accessed = base::Time::FromDeltaSinceWindowsEpoch( - base::TimeDelta::FromMicroseconds(file_info.last_accessed)); - info->creation_time = base::Time::FromDeltaSinceWindowsEpoch( - base::TimeDelta::FromMicroseconds(file_info.creation_time)); + info->FromStat(file_info); return true; } @@ -281,6 +281,19 @@ File::Error File::GetLastFileError() { } // Static. +int File::Stat(const char* path, stat_wrapper_t* sb) { + internal::AssertBlockingAllowed(); + return stat(path, sb); +} +int File::Fstat(int fd, stat_wrapper_t* sb) { + internal::AssertBlockingAllowed(); + return fstat(fd, sb); +} +int File::Lstat(const char* path, stat_wrapper_t* sb) { + internal::AssertBlockingAllowed(); + return lstat(path, sb); +} + File::Error File::OSErrorToFileError(SbSystemError sb_system_error) { switch (static_cast(sb_system_error)) { case kSbFileOk: @@ -333,51 +346,50 @@ void File::DoInitialize(const FilePath& path, uint32_t flags) { file_name_ = path.AsUTF8Unsafe(); int open_flags = 0; - switch (flags & (FLAG_OPEN | FLAG_CREATE | FLAG_OPEN_ALWAYS | - FLAG_CREATE_ALWAYS | FLAG_OPEN_TRUNCATED)) { - case FLAG_OPEN: - open_flags = kSbFileOpenOnly; - break; - - case FLAG_CREATE: - open_flags = kSbFileCreateOnly; - break; - - case FLAG_OPEN_ALWAYS: - open_flags = kSbFileOpenAlways; - break; + if (flags & FLAG_CREATE) { + open_flags = O_CREAT | O_EXCL; + } - case FLAG_CREATE_ALWAYS: - open_flags = kSbFileCreateAlways; - break; + if (flags & FLAG_CREATE_ALWAYS) { + DCHECK(!open_flags); + open_flags = O_CREAT | O_TRUNC; + } - case FLAG_OPEN_TRUNCATED: - open_flags = kSbFileOpenTruncated; - DCHECK(flags & FLAG_WRITE); - break; + if (flags & FLAG_OPEN_TRUNCATED) { + DCHECK(!open_flags); + DCHECK(flags & FLAG_WRITE); + open_flags = O_TRUNC; + } - default: - NOTREACHED() << "Passed incompatible flags: " << flags; - error_details_ = FILE_ERROR_FAILED; + if (!open_flags && !(flags & FLAG_OPEN) && !(flags & FLAG_OPEN_ALWAYS)) { + NOTREACHED() << "Passed incompatible flags: " << flags; + error_details_ = FILE_ERROR_FAILED; } - if (flags & FLAG_READ) { - open_flags |= kSbFileRead; + if (flags & FLAG_WRITE || flags & FLAG_APPEND && flags & FLAG_READ) { + open_flags |= O_RDWR; + } else if (flags & FLAG_WRITE || flags & FLAG_APPEND) { + open_flags |= O_WRONLY; } - if (flags & FLAG_WRITE || flags & FLAG_APPEND) { - open_flags |= kSbFileWrite; + int mode = S_IRUSR | S_IWUSR; + int descriptor = open(path.value().c_str(), open_flags, mode); + + if (flags & FLAG_OPEN_ALWAYS) { + if (descriptor < 0) { + open_flags |= O_CREAT; + descriptor = open(path.value().c_str(), open_flags, mode); + } } - file_.reset(SbFileOpen(path.value().c_str(), open_flags, &created_, - &g_sb_file_error)); + file_.reset(descriptor); - if (!file_.is_valid()) { + if (file_.get() < 0) { error_details_ = OSErrorToFileError(g_sb_file_error); } else { error_details_ = FILE_OK; if (append_) { - SbFileSeek(file_.get(), kSbFileFromEnd, 0); + lseek(file_.get(), 0, kSbFileFromEnd); } } @@ -393,7 +405,7 @@ bool File::Flush() { DCHECK(IsValid()); SCOPED_FILE_TRACE("Flush"); - return SbFileFlush(file_.get()); + return fsync(file_.get()); } void File::SetPlatformFile(PlatformFile file) { diff --git a/base/files/file_util_starboard.cc b/base/files/file_util_starboard.cc index f10ac5a98310..160011029006 100644 --- a/base/files/file_util_starboard.cc +++ b/base/files/file_util_starboard.cc @@ -16,7 +16,9 @@ #include "base/files/file_util.h" +#include #include +#include #include #include @@ -78,24 +80,24 @@ void GenerateTempFileName(FilePath::StringType *in_out_template) { // Creates a random filename based on the TempFileName() pattern, creates the // file, leaving it open, placing the path in |out_path| and returning the open -// SbFile. -SbFile CreateAndOpenTemporaryFile(FilePath directory, FilePath *out_path) { +// file. +int CreateAndOpenTemporaryFile(FilePath directory, FilePath *out_path) { internal::AssertBlockingAllowed(); DCHECK(out_path); FilePath path = directory.Append(TempFileName()); FilePath::StringType tmpdir_string = path.value(); GenerateTempFileName(&tmpdir_string); *out_path = FilePath(tmpdir_string); - return SbFileOpen(tmpdir_string.c_str(), kSbFileCreateOnly | kSbFileWrite, - NULL, NULL); + return open(tmpdir_string.c_str(), (O_CREAT & O_EXCL) | (O_WRONLY | O_RDWR), + S_IRUSR | S_IWUSR); } // Retries creating a temporary file until it can win the race to create a // unique one. -SbFile CreateAndOpenTemporaryFileSafely(FilePath directory, +int CreateAndOpenTemporaryFileSafely(FilePath directory, FilePath *out_path) { - SbFile file = kSbFileInvalid; - while (!SbFileIsValid(file)) { + int file = -1; + while (file < 0) { file = CreateAndOpenTemporaryFile(directory, out_path); } return file; @@ -151,7 +153,7 @@ bool DeleteFile(const FilePath &path, bool recursive) { struct ::stat info; bool directory = ::stat(path_str, &info) == 0 && S_ISDIR(info.st_mode); if (!recursive || !directory) { - return SbFileDelete(path_str); + return !unlink(path_str); } bool success = true; @@ -175,14 +177,14 @@ bool DeleteFile(const FilePath &path, bool recursive) { if (info.IsDirectory()) { directories.push(current.value()); } else { - success = SbFileDelete(current.value().c_str()); + success = !unlink(current.value().c_str()); } } // Delete all directories in reverse-depth order, now that they have no more // regular files. while (success && !directories.empty()) { - success = SbFileDelete(directories.top().c_str()); + success = !unlink(directories.top().c_str()); directories.pop(); } @@ -333,15 +335,15 @@ ScopedFILE CreateAndOpenTemporaryStreamInDir(const FilePath& dir, File CreateAndOpenTemporaryFileInDir(const FilePath &dir, FilePath *temp_file) { internal::AssertBlockingAllowed(); DCHECK(temp_file); - SbFile file = CreateAndOpenTemporaryFileSafely(dir, temp_file); - return SbFileIsValid(file) ? File(std::move(file)) : File(File::GetLastFileError()); + int file = CreateAndOpenTemporaryFileSafely(dir, temp_file); + return file >= 0 ? File(std::move(file)) : File(File::GetLastFileError()); } bool CreateTemporaryFileInDir(const FilePath &dir, FilePath *temp_file) { internal::AssertBlockingAllowed(); DCHECK(temp_file); - SbFile file = CreateAndOpenTemporaryFileSafely(dir, temp_file); - return (SbFileIsValid(file) && SbFileClose(file)); + int file = CreateAndOpenTemporaryFileSafely(dir, temp_file); + return ((file >= 0) && close(file)); } bool CreateTemporaryDirInDir(const FilePath &base_dir, diff --git a/base/files/file_util_unittest.cc b/base/files/file_util_unittest.cc index f769fe99e31b..b00c9252b6ae 100644 --- a/base/files/file_util_unittest.cc +++ b/base/files/file_util_unittest.cc @@ -9,6 +9,7 @@ #include #include +#include #include #include #include @@ -46,6 +47,7 @@ #include "base/threading/thread.h" #include "base/time/time.h" #include "build/build_config.h" +#include "starboard/common/file.h" #include "testing/gtest/include/gtest/gtest.h" #include "testing/multiprocess_func_list.h" #include "testing/platform_test.h" @@ -336,14 +338,15 @@ void CreateTextFile(const FilePath& filename, const std::wstring& contents) { #if defined(STARBOARD) const std::string contents_ascii = UTF16ToASCII(WideToUTF16(contents)); + + // TODO: handle error with errno. SbFileError file_error = kSbFileOk; - SbFile file = - SbFileOpen(filename.value().c_str(), kSbFileCreateAlways | kSbFileWrite, - nullptr, &file_error); + int file = + open(filename.value().c_str(), O_CREAT | O_WRONLY, S_IRUSR | S_IWUSR); SB_CHECK((file_error == kSbFileOk)); - SB_CHECK(SbFileWriteAll(file, contents_ascii.data(), contents_ascii.size()) == + SB_CHECK(starboard::WriteAll(file, contents_ascii.data(),contents_ascii.size()) == contents_ascii.size()); - SB_CHECK(SbFileClose(file)); + SB_CHECK(close(file) == 0); #else // !defined(STARBOARD) std::wofstream file; #if BUILDFLAG(IS_WIN) @@ -363,11 +366,10 @@ std::wstring ReadTextFile(const FilePath& filename) { const int size_in_bytes = 64 * sizeof(wchar_t); char contents[size_in_bytes]{0}; SbFileError file_error = kSbFileOk; - SbFile file = SbFileOpen(filename.value().c_str(), - kSbFileOpenOnly | kSbFileRead, nullptr, &file_error); + int file = open(filename.value().c_str(), O_RDWR, S_IRUSR | S_IWUSR); SB_CHECK(file_error == kSbFileOk); - SB_CHECK(SbFileReadAll(file, contents, size_in_bytes) != -1); - SB_CHECK(SbFileClose(file)); + SB_CHECK(starboard::ReadAll(file, contents, size_in_bytes) != -1); + SB_CHECK(close(file) == 0); return UTF16ToWide(ASCIIToUTF16(contents)); #else // !defined(STARBOARD) wchar_t contents[64]; diff --git a/base/files/platform_file.h b/base/files/platform_file.h index b7dd1cc69980..d17958f3c320 100644 --- a/base/files/platform_file.h +++ b/base/files/platform_file.h @@ -24,9 +24,9 @@ namespace base { #if defined(STARBOARD) -using PlatformFile = SbFile; +using PlatformFile = int; using ScopedPlatformFile = ::base::ScopedFD; -constexpr PlatformFile kInvalidPlatformFile = kSbFileInvalid; +constexpr PlatformFile kInvalidPlatformFile = -1; #elif BUILDFLAG(IS_WIN) using PlatformFile = HANDLE; diff --git a/base/files/scoped_file.cc b/base/files/scoped_file.cc index d48e09ce275a..07c75ff2dab1 100644 --- a/base/files/scoped_file.cc +++ b/base/files/scoped_file.cc @@ -8,9 +8,9 @@ #include "build/build_config.h" #if defined(STARBOARD) +#include #elif BUILDFLAG(IS_POSIX) || BUILDFLAG(IS_FUCHSIA) #include -#include #include "base/posix/eintr_wrapper.h" #endif diff --git a/base/files/scoped_file.h b/base/files/scoped_file.h index 1fd962b8806b..092c69347218 100644 --- a/base/files/scoped_file.h +++ b/base/files/scoped_file.h @@ -8,6 +8,7 @@ #include #include +#include #include "base/base_export.h" #include "base/scoped_generic.h" @@ -25,8 +26,8 @@ namespace internal { #if defined(STARBOARD) struct BASE_EXPORT ScopedSbFileCloseTraits { - static SbFile InvalidValue() { return kSbFileInvalid; } - static void Free(SbFile file) { SbFileClose(file); } + static int InvalidValue() { return -1; } + static void Free(int file) { close(file); } }; #elif BUILDFLAG(IS_ANDROID) // Use fdsan on android. @@ -58,9 +59,9 @@ struct BASE_EXPORT ScopedFDCloseTraits { #if defined(STARBOARD) // Functor for |ScopedFILE| (below). struct ScopedFILECloser { - inline void operator()(SbFile* x) const { + inline void operator()(int* x) const { if (x) - SbFileClose(*x); + close(*x); } }; #else @@ -108,7 +109,7 @@ void BASE_EXPORT ResetFDOwnership(); // ----------------------------------------------------------------------------- #if defined(STARBOARD) -using ScopedFD = ScopedGeneric; +using ScopedFD = ScopedGeneric; #elif BUILDFLAG(IS_POSIX) || BUILDFLAG(IS_FUCHSIA) // A low-level Posix file descriptor closer class. Use this when writing // platform-specific code, especially that does non-file-like things with the diff --git a/base/logging.cc b/base/logging.cc index 7bf2c8cc1da6..0b325b0f8b1d 100644 --- a/base/logging.cc +++ b/base/logging.cc @@ -39,6 +39,8 @@ #endif // defined(LEAK_SANITIZER) && !BUILDFLAG(IS_NACL) #if defined(STARBOARD) +#include + #include "base/files/file_starboard.h" #include "starboard/client_porting/eztime/eztime.h" #include "starboard/common/log.h" @@ -48,7 +50,7 @@ #include "starboard/configuration_constants.h" #include "starboard/file.h" #include "starboard/system.h" -typedef SbFile FileHandle; +typedef int* FileHandle; typedef SbMutex MutexHandle; #else #if BUILDFLAG(IS_WIN) @@ -318,7 +320,7 @@ uint64_t TickCount() { void DeleteFilePath(const PathString& log_name) { #if defined(STARBOARD) - SbFileDelete(log_name.c_str()); + unlink(log_name.c_str()); #elif BUILDFLAG(IS_WIN) DeleteFile(log_name.c_str()); #elif BUILDFLAG(IS_NACL) @@ -403,12 +405,13 @@ bool InitializeLogFileHandle() { return true; #if defined(STARBOARD) - g_log_file = SbFileOpen(g_log_file_name->c_str(), - kSbFileOpenAlways | kSbFileWrite, NULL, NULL); - if (!SbFileIsValid(g_log_file)) - return false; + int g_log_file_descriptor = + open(g_log_file_name->c_str(), O_CREAT | O_WRONLY, S_IRUSR | S_IWUSR); + g_log_file = &g_log_file_descriptor; + if (g_log_file_descriptor < 0) + return false; - SbFileSeek(g_log_file, kSbFileFromEnd, 0); + lseek(g_log_file_descriptor, 0, kSbFileFromEnd); #elif BUILDFLAG(IS_WIN) // The FILE_APPEND_DATA access mask ensures that the file is atomically // appended to across accesses from multiple threads. @@ -457,7 +460,7 @@ bool InitializeLogFileHandle() { void CloseFile(FileHandle log) { #if defined(STARBOARD) - SbFileClose(log); + close(*log); #elif BUILDFLAG(IS_WIN) CloseHandle(log); #elif BUILDFLAG(IS_POSIX) || BUILDFLAG(IS_FUCHSIA) @@ -1007,11 +1010,12 @@ LogMessage::~LogMessage() { #endif if (InitializeLogFileHandle()) { #if defined(STARBOARD) - SbFileSeek(g_log_file, kSbFileFromEnd, 0); + lseek(*g_log_file, 0, kSbFileFromEnd); int written = 0; while (written < str_newline.length()) { - int result = SbFileWrite(g_log_file, &(str_newline.c_str()[written]), - str_newline.length() - written); + int result = + HANDLE_EINTR(write(*g_log_file, &(str_newline.c_str()[written]), + str_newline.length() - written)); base::RecordFileWriteStat(result); if (result < 0) { break; diff --git a/cobalt/renderer/rasterizer/skia/skia/src/ports/SkOSFile_cobalt.cc b/cobalt/renderer/rasterizer/skia/skia/src/ports/SkOSFile_cobalt.cc index 2e464f11932d..e108d495b346 100644 --- a/cobalt/renderer/rasterizer/skia/skia/src/ports/SkOSFile_cobalt.cc +++ b/cobalt/renderer/rasterizer/skia/skia/src/ports/SkOSFile_cobalt.cc @@ -50,7 +50,9 @@ int ToSbFileFlags(SkFILE_Flags sk_flags) { FILE* sk_fopen(const char path[], SkFILE_Flags sk_flags) { SbFile starboard_file = SbFileOpen(path, ToSbFileFlags(sk_flags), NULL, NULL); - if (starboard_file == base::kInvalidPlatformFile) { + // TODO: temporarily replace with kSbFileInvalid, will be deprecated with + // SBFile. + if (starboard_file == kSbFileInvalid) { return nullptr; } diff --git a/cobalt/renderer/test/png_utils/png_decode.cc b/cobalt/renderer/test/png_utils/png_decode.cc index 9ae38172e2e6..2203d00468b7 100644 --- a/cobalt/renderer/test/png_utils/png_decode.cc +++ b/cobalt/renderer/test/png_utils/png_decode.cc @@ -14,6 +14,9 @@ #include "cobalt/renderer/test/png_utils/png_decode.h" +#include +#include + #include #include #include @@ -82,16 +85,10 @@ void TransformPixelRow(png_structp ptr, png_row_infop row_info, void PNGReadPlatformFile(png_structp png, png_bytep buffer, png_size_t buffer_size) { -#if defined(STARBOARD) - // Casting between two pointer types. - base::PlatformFile file = - reinterpret_cast(png_get_io_ptr(png)); -#else - // Casting from a pointer to an int type. intptr_t temp = reinterpret_cast(png_get_io_ptr(png)); base::PlatformFile file = static_cast(temp); -#endif - int count = SbFileReadAll(file, reinterpret_cast(buffer), buffer_size); + int count = + starboard::ReadAll(file, reinterpret_cast(buffer), buffer_size); DCHECK_EQ(count, buffer_size); } @@ -104,14 +101,12 @@ PNGFileReadContext::PNGFileReadContext(const base::FilePath& file_path, // Much of this PNG loading code is based on a section from the libpng manual: // http://www.libpng.org/pub/png/libpng-1.2.5-manual.html#section-3 - file_ = SbFileOpen(file_path.value().c_str(), kSbFileOpenOnly | kSbFileRead, - NULL, NULL); - DCHECK_NE(base::kInvalidPlatformFile, file_) - << "Unable to open: " << file_path.value(); + file_ = open(file_path.value().c_str(), O_RDWR, S_IRUSR | S_IWUSR); + DCHECK_NE(-1, file_) << "Unable to open: " << file_path.value(); uint8_t header[8]; - int count = - SbFileReadAll(file_, reinterpret_cast(header), sizeof(header)); + int count = starboard::ReadAll(file_, reinterpret_cast(header), + sizeof(header)); DCHECK_EQ(sizeof(header), count) << "Invalid file size."; DCHECK(!png_sig_cmp(header, 0, 8)) << "Invalid PNG header."; @@ -236,7 +231,7 @@ PNGFileReadContext::~PNGFileReadContext() { // Release our png reading context and associated info structs. png_destroy_read_struct(&png_, &png_metadata_, &end); - SbFileClose(file_); + close(file_); } void PNGFileReadContext::DecodeImageTo(const std::vector& rows) { diff --git a/cobalt/trace_event/json_file_outputter.cc b/cobalt/trace_event/json_file_outputter.cc index a2ddd7660c51..4a0cc37a1bfa 100644 --- a/cobalt/trace_event/json_file_outputter.cc +++ b/cobalt/trace_event/json_file_outputter.cc @@ -14,6 +14,9 @@ #include "cobalt/trace_event/json_file_outputter.h" +#include +#include + #include #include @@ -57,8 +60,9 @@ JSONFileOutputter::JSONFileOutputter(const base::FilePath& output_path) : output_path_(output_path), output_trace_event_call_count_(0), file_(base::kInvalidPlatformFile) { - file_ = SbFileOpen(output_path.value().c_str(), - kSbFileCreateAlways | kSbFileWrite, NULL, NULL); + file_ = + open(output_path.value().c_str(), O_CREAT | O_WRONLY, S_IRUSR | S_IWUSR); + if (GetError()) { DLOG(ERROR) << "Unable to open file for writing: " << output_path.value(); } else { @@ -136,7 +140,7 @@ void JSONFileOutputter::Write(const char* buffer, int length) { return; } - int count = SbFileWrite(file_, buffer, length); + int count = write(file_, buffer, length); base::RecordFileWriteStat(count); if (count < 0) { Close(); @@ -148,7 +152,7 @@ void JSONFileOutputter::Close() { return; } - SbFileClose(file_); + close(file_); file_ = base::kInvalidPlatformFile; }