Merge changes from topic "webp_contentResolver" am: 1b6354f7ec am: 538289b2ca am: b19ae6922b
Original change: https://android-review.googlesource.com/c/platform/external/skia/+/1426989
Change-Id: I2be8a6963af344baffe0ee8c0c2c8f0e7253606a
diff --git a/include/core/SkStream.h b/include/core/SkStream.h
index 5be39e4..ef395f2 100644
--- a/include/core/SkStream.h
+++ b/include/core/SkStream.h
@@ -313,6 +313,13 @@
*/
explicit SkFILEStream(FILE* file);
+ /** Initialize the stream with an existing C FILE stream.
+ * The current position of the C FILE stream will be considered the
+ * beginning of the SkFILEStream and size bytes later will be the end.
+ * The C FILE stream will be closed in the destructor.
+ */
+ explicit SkFILEStream(FILE* file, size_t size);
+
~SkFILEStream() override;
static std::unique_ptr<SkFILEStream> Make(const char path[]) {
@@ -345,6 +352,7 @@
size_t getLength() const override;
private:
+ explicit SkFILEStream(FILE*, size_t size, size_t start);
explicit SkFILEStream(std::shared_ptr<FILE>, size_t end, size_t start);
explicit SkFILEStream(std::shared_ptr<FILE>, size_t end, size_t start, size_t current);
diff --git a/src/core/SkStream.cpp b/src/core/SkStream.cpp
index efd8a71..2705f6f 100644
--- a/src/core/SkStream.cpp
+++ b/src/core/SkStream.cpp
@@ -165,6 +165,14 @@
: SkFILEStream(std::move(file), end, start, start)
{ }
+SkFILEStream::SkFILEStream(FILE* file, size_t size, size_t start)
+ : SkFILEStream(std::shared_ptr<FILE>(file, sk_fclose), SkSafeMath::Add(start, size), start)
+{ }
+
+SkFILEStream::SkFILEStream(FILE* file, size_t size)
+ : SkFILEStream(file, size, file ? sk_ftell(file) : 0)
+{ }
+
SkFILEStream::SkFILEStream(FILE* file)
: SkFILEStream(std::shared_ptr<FILE>(file, sk_fclose),
file ? sk_fgetsize(file) : 0,