aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorandroid-build-team Robot <android-build-team-robot@google.com>2017-06-26 20:47:20 +0000
committerandroid-build-team Robot <android-build-team-robot@google.com>2017-06-26 20:47:20 +0000
commitfe686a0ef53ccf34d2ec4fc643c883e9fbe6141b (patch)
tree3edfe6af2197e01fdb80506d80e8e9150a743c75
parentcf228f9c23f69d71d7ab40e18026a1fc0186e6c3 (diff)
parente755ff3d80b9436d1c10ca1b88ed5a5eb3f9e03f (diff)
downloadskia-oreo-release.tar.gz
Change-Id: I742af6b7f49c6f1a7111a07c305da76336a21feb
-rw-r--r--src/ports/SkOSFile_posix.cpp19
-rw-r--r--src/ports/SkOSFile_stdio.cpp18
-rw-r--r--src/ports/SkOSFile_win.cpp21
3 files changed, 18 insertions, 40 deletions
diff --git a/src/ports/SkOSFile_posix.cpp b/src/ports/SkOSFile_posix.cpp
index 40028246ff..48b5b95ad3 100644
--- a/src/ports/SkOSFile_posix.cpp
+++ b/src/ports/SkOSFile_posix.cpp
@@ -19,25 +19,6 @@
#include <sys/types.h>
#include <unistd.h>
-size_t sk_fgetsize(FILE* f) {
- int fd = fileno(f);
- if (fd < 0) {
- return 0;
- }
-
- struct stat status;
- if (0 != fstat(fd, &status)) {
- return 0;
- }
- if (!S_ISREG(status.st_mode)) {
- return 0;
- }
- if (!SkTFitsIn<size_t>(status.st_size)) {
- return 0;
- }
- return static_cast<size_t>(status.st_size);
-}
-
bool sk_exists(const char *path, SkFILE_Flags flags) {
int mode = F_OK;
if (flags & kRead_SkFILE_Flag) {
diff --git a/src/ports/SkOSFile_stdio.cpp b/src/ports/SkOSFile_stdio.cpp
index e79d87fc89..68c2d3d4d7 100644
--- a/src/ports/SkOSFile_stdio.cpp
+++ b/src/ports/SkOSFile_stdio.cpp
@@ -87,6 +87,24 @@ FILE* sk_fopen(const char path[], SkFILE_Flags flags) {
return file;
}
+size_t sk_fgetsize(FILE* f) {
+ SkASSERT(f);
+
+ long curr = ftell(f); // remember where we are
+ if (curr < 0) {
+ return 0;
+ }
+
+ fseek(f, 0, SEEK_END); // go to the end
+ long size = ftell(f); // record the size
+ if (size < 0) {
+ size = 0;
+ }
+
+ fseek(f, curr, SEEK_SET); // go back to our prev location
+ return size;
+}
+
size_t sk_fwrite(const void* buffer, size_t byteCount, FILE* f) {
SkASSERT(f);
return fwrite(buffer, 1, byteCount, f);
diff --git a/src/ports/SkOSFile_win.cpp b/src/ports/SkOSFile_win.cpp
index e66bcb89c0..7e194cf287 100644
--- a/src/ports/SkOSFile_win.cpp
+++ b/src/ports/SkOSFile_win.cpp
@@ -17,27 +17,6 @@
#include <stdio.h>
#include <sys/stat.h>
-size_t sk_fgetsize(FILE* f) {
- int fileno = sk_fileno(f);
- if (fileno < 0) {
- return 0;
- }
-
- HANDLE file = (HANDLE)_get_osfhandle(fileno);
- if (INVALID_HANDLE_VALUE == file) {
- return 0;
- }
-
- LARGE_INTEGER fileSize;
- if (0 == GetFileSizeEx(file, &fileSize)) {
- return 0;
- }
- if (!SkTFitsIn<size_t>(fileSize.QuadPart)) {
- return 0;
- }
- return static_cast<size_t>(fileSize.QuadPart);
-}
-
bool sk_exists(const char *path, SkFILE_Flags flags) {
int mode = 0; // existence
if (flags & kRead_SkFILE_Flag) {