diff options
-rw-r--r-- | include/core/SkOSFile.h | 1 | ||||
-rw-r--r-- | include/core/SkStream.h | 1 | ||||
-rw-r--r-- | src/core/SkStream.cpp | 8 | ||||
-rw-r--r-- | src/ports/SkOSFile_stdio.cpp | 8 |
4 files changed, 18 insertions, 0 deletions
diff --git a/include/core/SkOSFile.h b/include/core/SkOSFile.h index 39a1646458..f977327e25 100644 --- a/include/core/SkOSFile.h +++ b/include/core/SkOSFile.h @@ -41,6 +41,7 @@ size_t sk_fwrite(const void* buffer, size_t byteCount, FILE*); char* sk_fgets(char* str, int size, FILE* f); void sk_fflush(FILE*); +void sk_fsync(FILE*); bool sk_fseek(FILE*, size_t); bool sk_fmove(FILE*, long); diff --git a/include/core/SkStream.h b/include/core/SkStream.h index 44de6e87e1..4502416fd9 100644 --- a/include/core/SkStream.h +++ b/include/core/SkStream.h @@ -360,6 +360,7 @@ public: bool write(const void* buffer, size_t size) override; void flush() override; + void fsync(); size_t bytesWritten() const override; private: diff --git a/src/core/SkStream.cpp b/src/core/SkStream.cpp index fff8f33822..ef4c6baae4 100644 --- a/src/core/SkStream.cpp +++ b/src/core/SkStream.cpp @@ -463,6 +463,14 @@ void SkFILEWStream::flush() } } +void SkFILEWStream::fsync() +{ + flush(); + if (fFILE) { + sk_fsync(fFILE); + } +} + //////////////////////////////////////////////////////////////////////// SkMemoryWStream::SkMemoryWStream(void* buffer, size_t size) diff --git a/src/ports/SkOSFile_stdio.cpp b/src/ports/SkOSFile_stdio.cpp index 3371bb7031..ecd5a027fc 100644 --- a/src/ports/SkOSFile_stdio.cpp +++ b/src/ports/SkOSFile_stdio.cpp @@ -143,6 +143,14 @@ void sk_fflush(FILE* f) { ::fflush(f); } +void sk_fsync(FILE* f) { +#if !defined(_WIN32) && !defined(SK_BUILD_FOR_ANDROID) && !defined(__UCLIBC__) \ + && !defined(_NEWLIB_VERSION) + int fd = ::fileno(f); + ::fsync(fd); +#endif +} + bool sk_fseek(FILE* f, size_t byteCount) { int err = ::fseek(f, (long)byteCount, SEEK_SET); return err == 0; |