Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0102f8a8 authored by Leon Scroggins III's avatar Leon Scroggins III
Browse files

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
parent f761fa77
Loading
Loading
Loading
Loading
+8 −4
Original line number Diff line number Diff line
@@ -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.