In nativeDecodeFileDescriptor, use fdopen.

Instead of attempting to mmap the entire file, create an
SkFILEStream from a FILE.

BUG:11669944
BUG:11028218
Change-Id: If67da91484acc79f9f3dde6d05201409c0c75e41
This commit is contained in:
Leon Scroggins III
2014-01-14 15:14:57 -05:00
parent f761fa7767
commit 0102f8a87a

View File

@@ -21,6 +21,7 @@
#include <androidfw/Asset.h>
#include <androidfw/ResourceTypes.h>
#include <netinet/in.h>
#include <stdio.h>
#include <sys/mman.h>
#include <sys/stat.h>
@@ -516,11 +517,14 @@ static jobject nativeDecodeFileDescriptor(JNIEnv* env, jobject clazz, jobject fi
}
}
SkAutoTUnref<SkData> data(SkData::NewFromFD(descriptor));
if (data.get() == NULL) {
return nullObjectReturn("NewFromFD failed in nativeDecodeFileDescriptor");
FILE* file = fdopen(descriptor, "r");
if (file == NULL) {
return nullObjectReturn("Could not open file");
}
SkAutoTUnref<SkMemoryStream> stream(new SkMemoryStream(data));
SkAutoTUnref<SkFILEStream> stream(new SkFILEStream(file,
weOwnTheFD ? SkFILEStream::kCallerPasses_Ownership :
SkFILEStream::kCallerRetains_Ownership));
/* Allow purgeable iff we own the FD, i.e., in the puregeable and
shareable case.