Index: src/core/SkStream.cpp |
=================================================================== |
--- src/core/SkStream.cpp (revision 8838) |
+++ src/core/SkStream.cpp (working copy) |
@@ -13,14 +13,6 @@ |
#include "SkString.h" |
#include "SkOSFile.h" |
-#if SK_MMAP_SUPPORT |
- #include <unistd.h> |
- #include <sys/mman.h> |
- #include <fcntl.h> |
- #include <errno.h> |
- #include <unistd.h> |
-#endif |
- |
SK_DEFINE_INST_COUNT(SkStream) |
SK_DEFINE_INST_COUNT(SkWStream) |
SK_DEFINE_INST_COUNT(SkFILEStream) |
@@ -796,46 +788,22 @@ |
/////////////////////////////////////////////////////////////////////////////// |
/////////////////////////////////////////////////////////////////////////////// |
-static bool mmap_filename(const char path[], void** addrPtr, size_t* sizePtr) { |
-#if SK_MMAP_SUPPORT |
- int fd = open(path, O_RDONLY); |
- if (fd < 0) { |
- return false; |
- } |
- off_t offset = lseek(fd, 0, SEEK_END); // find the file size |
- if (offset == -1) { |
- close(fd); |
- return false; |
+static SkData* mmap_filename(const char path[]) { |
reed1
2013/04/24 19:07:49
A nice illustration of the utility of SkData::NewF
|
+ SkFILE* file = sk_fopen(path, kRead_SkFILE_Flag); |
+ if (NULL == file) { |
+ return NULL; |
} |
- (void)lseek(fd, 0, SEEK_SET); // restore file offset to beginning |
- // to avoid a 64bit->32bit warning, I explicitly create a size_t size |
- size_t size = static_cast<size_t>(offset); |
- |
- void* addr = mmap(NULL, size, PROT_READ, MAP_SHARED, fd, 0); |
- close(fd); |
- |
- if (MAP_FAILED == addr) { |
- return false; |
- } |
- |
- *addrPtr = addr; |
- *sizePtr = size; |
- return true; |
-#else |
- return false; |
-#endif |
+ SkData* data = SkData::NewFromFILE(file); |
+ sk_fclose(file); |
+ return data; |
} |
SkStream* SkStream::NewFromFile(const char path[]) { |
- void* addr; |
- size_t size; |
- if (mmap_filename(path, &addr, &size)) { |
- SkAutoTUnref<SkData> data(SkData::NewFromMMap(addr, size)); |
- if (data.get()) { |
- return SkNEW_ARGS(SkMemoryStream, (data.get())); |
- } |
+ SkAutoTUnref<SkData> data(mmap_filename(path)); |
+ if (data.get()) { |
+ return SkNEW_ARGS(SkMemoryStream, (data.get())); |
} |
// If we get here, then our attempt at using mmap failed, so try normal |