crux-commits
Threads by month
- ----- 2025 -----
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2007 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2006 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
September 2016
- 1 participants
- 202 discussions
commit 42b098a23ec9ec5a861dd5a0ea679683e0497d1c
Author: Juergen Daubert <jue(a)jue.li>
Date: Mon Sep 5 09:14:11 2016 +0200
scite: update to 3.6.7
diff --git a/scite/.md5sum b/scite/.md5sum
index 92b88e1..9c61efd 100644
--- a/scite/.md5sum
+++ b/scite/.md5sum
@@ -1 +1 @@
-7319d63df9f59e377aaae18d976daf42 scite366.tgz
+5c00467744a87532b36ba518c49d1940 scite367.tgz
diff --git a/scite/Pkgfile b/scite/Pkgfile
index 82e307a..f3b72ad 100644
--- a/scite/Pkgfile
+++ b/scite/Pkgfile
@@ -4,7 +4,7 @@
# Depends on: gtk
name=scite
-version=3.6.6
+version=3.6.7
release=1
source=(http://downloads.sourceforge.net/project/scintilla/SciTE/$version/$…
1
0
04 Sep '16
commit d4717ef7303a3e5aac9e74391b0ce303dfdb2f0e
Author: Danny Rawlins <monster.romster(a)gmail.com>
Date: Sun Sep 4 18:58:13 2016 +1000
wine: 1.9.17 -> 1.9.18 added a few new dependencies
diff --git a/wine/.md5sum b/wine/.md5sum
index f03884c..77e2df4 100644
--- a/wine/.md5sum
+++ b/wine/.md5sum
@@ -1,4 +1,4 @@
-79fe7f8f7dde35de10576c0809d39d4f wine-1.9.17.tar.bz2
+9da9321d9f8f5703b4ec83d673c8d7a4 wine-1.9.18.tar.bz2
f38640271249fca9da0e18f5dc9861e2 wine-mono-4.6.3.msi
5ebc4ec71c92b3db3d84b334a1db385d wine_gecko-2.47-x86.msi
d93ac0d2e6aceafe9113a9918916df45 wine_gecko-2.47-x86_64.msi
diff --git a/wine/Pkgfile b/wine/Pkgfile
index a78a63e..5ff5b8e 100644
--- a/wine/Pkgfile
+++ b/wine/Pkgfile
@@ -2,10 +2,10 @@
# URL: http://www.winehq.com/
# Maintainer: Danny Rawlins, crux at romster dot me
# Packager: Daniel Walpole, daniel at walpole dot id dot au
-# Depends on:fontconfig-32 freeglut-32 xorg-libxcomposite-32 xorg-libxcursor-32 xorg-libxinerama-32 xorg-libxrandr-32 xorg-libxxf86dga-32 alsa-lib-32 libpng-32 libjpeg-turbo-32 prelink gnutls-32
+# Depends on: fontconfig-32 freeglut-32 gnutls-32 lcms2-32 mpg123-32 openal-32 prelink xorg-libxcomposite-32 xorg-libxcursor-32 xorg-libxinerama-32 xorg-libxrandr-32 xorg-libxxf86dga-32 xorg-libxxf86vm-32
name=wine
-version=1.9.17
+version=1.9.18
release=1
source=(http://dl.winehq.org/wine/source/1.9/$name-$version.tar.bz2
http://dl.winehq.org/wine/wine-gecko/2.47/wine_gecko-2.47-x86.msi
1
0
commit 2d8100d95fd0acb58639b5783bb1cf9f87aaf666
Author: Danny Rawlins <monster.romster(a)gmail.com>
Date: Sun Sep 4 18:00:39 2016 +1000
talloc-32: 2.1.5 -> 2.1.8
diff --git a/talloc-32/.footprint b/talloc-32/.footprint
index b04d06a..189dfd8 100644
--- a/talloc-32/.footprint
+++ b/talloc-32/.footprint
@@ -1,13 +1,13 @@
drwxr-xr-x root/root usr/
drwxr-xr-x root/root usr/lib32/
-lrwxrwxrwx root/root usr/lib32/libpytalloc-util.so -> libpytalloc-util.so.2.1.5
-lrwxrwxrwx root/root usr/lib32/libpytalloc-util.so.2 -> libpytalloc-util.so.2.1.5
--rwxr-xr-x root/root usr/lib32/libpytalloc-util.so.2.1.5
--rwxr-xr-x root/root usr/lib32/libtalloc-compat1-2.1.5.so
-lrwxrwxrwx root/root usr/lib32/libtalloc.so -> libtalloc.so.2.1.5
-lrwxrwxrwx root/root usr/lib32/libtalloc.so.1 -> libtalloc-compat1-2.1.5.so
-lrwxrwxrwx root/root usr/lib32/libtalloc.so.2 -> libtalloc.so.2.1.5
--rwxr-xr-x root/root usr/lib32/libtalloc.so.2.1.5
+lrwxrwxrwx root/root usr/lib32/libpytalloc-util.so -> libpytalloc-util.so.2.1.8
+lrwxrwxrwx root/root usr/lib32/libpytalloc-util.so.2 -> libpytalloc-util.so.2.1.8
+-rwxr-xr-x root/root usr/lib32/libpytalloc-util.so.2.1.8
+-rwxr-xr-x root/root usr/lib32/libtalloc-compat1-2.1.8.so
+lrwxrwxrwx root/root usr/lib32/libtalloc.so -> libtalloc.so.2.1.8
+lrwxrwxrwx root/root usr/lib32/libtalloc.so.1 -> libtalloc-compat1-2.1.8.so
+lrwxrwxrwx root/root usr/lib32/libtalloc.so.2 -> libtalloc.so.2.1.8
+-rwxr-xr-x root/root usr/lib32/libtalloc.so.2.1.8
drwxr-xr-x root/root usr/lib32/pkgconfig/
-rw-r--r-- root/root usr/lib32/pkgconfig/pytalloc-util.pc
-rw-r--r-- root/root usr/lib32/pkgconfig/talloc.pc
diff --git a/talloc-32/.md5sum b/talloc-32/.md5sum
index ca0bc5d..e7ca970 100644
--- a/talloc-32/.md5sum
+++ b/talloc-32/.md5sum
@@ -1,2 +1 @@
-f497cb42b3d9622b721b72146f1fa3be talloc-2.1.5.tar.gz
-f13ecbd75403227ebd4959238401fba2 talloc.3
+6fb70af4174330e4cc139ea63b07c9e9 talloc-2.1.8.tar.gz
diff --git a/talloc-32/Pkgfile b/talloc-32/Pkgfile
index d299cf8..af5eae5 100644
--- a/talloc-32/Pkgfile
+++ b/talloc-32/Pkgfile
@@ -4,23 +4,19 @@
# Depends on: python-32 talloc
name=talloc-32
-version=2.1.5
+version=2.1.8
release=1
-source=(http://samba.org/ftp/talloc/talloc-$version.tar.gz
- talloc.3)
+source=(http://samba.org/ftp/talloc/talloc-$version.tar.gz)
build() {
cd talloc-$version
- ./configure --prefix=/usr \
- --mandir=/usr/man \
+ ./configure \
+ --prefix=/usr \
--libdir=/usr/lib32 \
+ --bundled-libraries=NONE \
--enable-talloc-compat1
- # Don't depend on xsltproc or docbook.sourceforge.net being available
- cp $SRC/talloc.3 .
- touch talloc.3 talloc.3.html
-
make
make install DESTDIR=$PKG
@@ -28,5 +24,4 @@ build() {
rmdir $PKG/usr/lib
rm -r $PKG/usr/include
- rm -rf $PKG/usr/man
}
diff --git a/talloc-32/talloc.3 b/talloc-32/talloc.3
deleted file mode 100644
index 26aaae9..0000000
--- a/talloc-32/talloc.3
+++ /dev/null
@@ -1,688 +0,0 @@
-'\" t
-.\" Title: talloc
-.\" Author: [FIXME: author] [see http://docbook.sf.net/el/author]
-.\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\" Date: 09/11/2010
-.\" Manual: [FIXME: manual]
-.\" Source: [FIXME: source]
-.\" Language: English
-.\"
-.TH "TALLOC" "3" "09/11/2010" "[FIXME: source]" "[FIXME: manual]"
-.\" -----------------------------------------------------------------
-.\" * set default formatting
-.\" -----------------------------------------------------------------
-.\" disable hyphenation
-.nh
-.\" disable justification (adjust text to left margin only)
-.ad l
-.\" -----------------------------------------------------------------
-.\" * MAIN CONTENT STARTS HERE *
-.\" -----------------------------------------------------------------
-.SH "NAME"
-talloc \- hierarchical reference counted memory pool system with destructors
-.SH "SYNOPSIS"
-.sp
-.nf
-#include <talloc/talloc\&.h>
-.fi
-.SH "DESCRIPTION"
-.PP
-If you are used to talloc from Samba3 then please read this carefully, as talloc has changed a lot\&.
-.PP
-The new talloc is a hierarchical, reference counted memory pool system with destructors\&. Quite a mouthful really, but not too bad once you get used to it\&.
-.PP
-Perhaps the biggest change from Samba3 is that there is no distinction between a "talloc context" and a "talloc pointer"\&. Any pointer returned from talloc() is itself a valid talloc context\&. This means you can do this:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
- struct foo *X = talloc(mem_ctx, struct foo);
- X\->name = talloc_strdup(X, "foo");
-
-.fi
-.if n \{\
-.RE
-.\}
-.PP
-and the pointer
-X\->name
-would be a "child" of the talloc context
-X
-which is itself a child of
-mem_ctx\&. So if you do
-talloc_free(mem_ctx)
-then it is all destroyed, whereas if you do
-talloc_free(X)
-then just
-X
-and
-X\->name
-are destroyed, and if you do
-talloc_free(X\->name)
-then just the name element of
-X
-is destroyed\&.
-.PP
-If you think about this, then what this effectively gives you is an n\-ary tree, where you can free any part of the tree with talloc_free()\&.
-.PP
-If you find this confusing, then I suggest you run the
-testsuite
-program to watch talloc in action\&. You may also like to add your own tests to
-testsuite\&.c
-to clarify how some particular situation is handled\&.
-.SH "TALLOC API"
-.PP
-The following is a complete guide to the talloc API\&. Read it all at least twice\&.
-.SS "(type *)talloc(const void *ctx, type);"
-.PP
-The talloc() macro is the core of the talloc library\&. It takes a memory
-\fIctx\fR
-and a
-\fItype\fR, and returns a pointer to a new area of memory of the given
-\fItype\fR\&.
-.PP
-The returned pointer is itself a talloc context, so you can use it as the
-\fIctx\fR
-argument to more calls to talloc() if you wish\&.
-.PP
-The returned pointer is a "child" of the supplied context\&. This means that if you talloc_free() the
-\fIctx\fR
-then the new child disappears as well\&. Alternatively you can free just the child\&.
-.PP
-The
-\fIctx\fR
-argument to talloc() can be NULL, in which case a new top level context is created\&.
-.SS "void *talloc_size(const void *ctx, size_t size);"
-.PP
-The function talloc_size() should be used when you don\'t have a convenient type to pass to talloc()\&. Unlike talloc(), it is not type safe (as it returns a void *), so you are on your own for type checking\&.
-.SS "(typeof(ptr)) talloc_ptrtype(const void *ctx, ptr);"
-.PP
-The talloc_ptrtype() macro should be used when you have a pointer and want to allocate memory to point at with this pointer\&. When compiling with gcc >= 3 it is typesafe\&. Note this is a wrapper of talloc_size() and talloc_get_name() will return the current location in the source file\&. and not the type\&.
-.SS "int talloc_free(void *ptr);"
-.PP
-The talloc_free() function frees a piece of talloc memory, and all its children\&. You can call talloc_free() on any pointer returned by talloc()\&.
-.PP
-The return value of talloc_free() indicates success or failure, with 0 returned for success and \-1 for failure\&. The only possible failure condition is if
-\fIptr\fR
-had a destructor attached to it and the destructor returned \-1\&. See
-\(lqtalloc_set_destructor()\(rq
-for details on destructors\&.
-.PP
-If this pointer has an additional parent when talloc_free() is called then the memory is not actually released, but instead the most recently established parent is destroyed\&. See
-\(lqtalloc_reference()\(rq
-for details on establishing additional parents\&.
-.PP
-For more control on which parent is removed, see
-\(lqtalloc_unlink()\(rq\&.
-.PP
-talloc_free() operates recursively on its children\&.
-.PP
-From the 2\&.0 version of talloc, as a special case, talloc_free() is refused on pointers that have more than one parent, as talloc would have no way of knowing which parent should be removed\&. To free a pointer that has more than one parent please use talloc_unlink()\&.
-.PP
-To help you find problems in your code caused by this behaviour, if you do try and free a pointer with more than one parent then the talloc logging function will be called to give output like this:
-.PP
-
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
- ERROR: talloc_free with references at some_dir/source/foo\&.c:123
- reference at some_dir/source/other\&.c:325
- reference at some_dir/source/third\&.c:121
-
-.fi
-.if n \{\
-.RE
-.\}
-.PP
-Please see the documentation for talloc_set_log_fn() and talloc_set_log_stderr() for more information on talloc logging functions\&.
-.SS "void *talloc_reference(const void *ctx, const void *ptr);"
-.PP
-The talloc_reference() function makes
-\fIctx\fR
-an additional parent of
-\fIptr\fR\&.
-.PP
-The return value of talloc_reference() is always the original pointer
-\fIptr\fR, unless talloc ran out of memory in creating the reference in which case it will return NULL (each additional reference consumes around 48 bytes of memory on intel x86 platforms)\&.
-.PP
-If
-\fIptr\fR
-is NULL, then the function is a no\-op, and simply returns NULL\&.
-.PP
-After creating a reference you can free it in one of the following ways:
-.PP
-
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-you can talloc_free() any parent of the original pointer\&. That will reduce the number of parents of this pointer by 1, and will cause this pointer to be freed if it runs out of parents\&.
-.RE
-.sp
-.RS 4
-.ie n \{\
-\h'-04'\(bu\h'+03'\c
-.\}
-.el \{\
-.sp -1
-.IP \(bu 2.3
-.\}
-you can talloc_free() the pointer itself\&. That will destroy the most recently established parent to the pointer and leave the pointer as a child of its current parent\&.
-.RE
-.sp
-.RE
-.PP
-For more control on which parent to remove, see
-\(lqtalloc_unlink()\(rq\&.
-.SS "int talloc_unlink(const void *ctx, const void *ptr);"
-.PP
-The talloc_unlink() function removes a specific parent from
-\fIptr\fR\&. The
-\fIctx\fR
-passed must either be a context used in talloc_reference() with this pointer, or must be a direct parent of ptr\&.
-.PP
-Note that if the parent has already been removed using talloc_free() then this function will fail and will return \-1\&. Likewise, if
-\fIptr\fR
-is NULL, then the function will make no modifications and return \-1\&.
-.PP
-Usually you can just use talloc_free() instead of talloc_unlink(), but sometimes it is useful to have the additional control on which parent is removed\&.
-.SS "void talloc_set_destructor(const void *ptr, int (*destructor)(void *));"
-.PP
-The function talloc_set_destructor() sets the
-\fIdestructor\fR
-for the pointer
-\fIptr\fR\&. A
-\fIdestructor\fR
-is a function that is called when the memory used by a pointer is about to be released\&. The destructor receives
-\fIptr\fR
-as an argument, and should return 0 for success and \-1 for failure\&.
-.PP
-The
-\fIdestructor\fR
-can do anything it wants to, including freeing other pieces of memory\&. A common use for destructors is to clean up operating system resources (such as open file descriptors) contained in the structure the destructor is placed on\&.
-.PP
-You can only place one destructor on a pointer\&. If you need more than one destructor then you can create a zero\-length child of the pointer and place an additional destructor on that\&.
-.PP
-To remove a destructor call talloc_set_destructor() with NULL for the destructor\&.
-.PP
-If your destructor attempts to talloc_free() the pointer that it is the destructor for then talloc_free() will return \-1 and the free will be ignored\&. This would be a pointless operation anyway, as the destructor is only called when the memory is just about to go away\&.
-.SS "int talloc_increase_ref_count(const void *\fIptr\fR);"
-.PP
-The talloc_increase_ref_count(\fIptr\fR) function is exactly equivalent to:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-talloc_reference(NULL, ptr);
-.fi
-.if n \{\
-.RE
-.\}
-.PP
-You can use either syntax, depending on which you think is clearer in your code\&.
-.PP
-It returns 0 on success and \-1 on failure\&.
-.SS "size_t talloc_reference_count(const void *\fIptr\fR);"
-.PP
-Return the number of references to the pointer\&.
-.SS "void talloc_set_name(const void *ptr, const char *fmt, \&.\&.\&.);"
-.PP
-Each talloc pointer has a "name"\&. The name is used principally for debugging purposes, although it is also possible to set and get the name on a pointer in as a way of "marking" pointers in your code\&.
-.PP
-The main use for names on pointer is for "talloc reports"\&. See
-\(lqtalloc_report_depth_cb()\(rq,
-\(lqtalloc_report_depth_file()\(rq,
-\(lqtalloc_report()\(rq
-\(lqtalloc_report()\(rq
-and
-\(lqtalloc_report_full()\(rq
-for details\&. Also see
-\(lqtalloc_enable_leak_report()\(rq
-and
-\(lqtalloc_enable_leak_report_full()\(rq\&.
-.PP
-The talloc_set_name() function allocates memory as a child of the pointer\&. It is logically equivalent to:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-talloc_set_name_const(ptr, talloc_asprintf(ptr, fmt, \&.\&.\&.));
-.fi
-.if n \{\
-.RE
-.\}
-.PP
-Note that multiple calls to talloc_set_name() will allocate more memory without releasing the name\&. All of the memory is released when the ptr is freed using talloc_free()\&.
-.SS "void talloc_set_name_const(const void *\fIptr\fR, const char *\fIname\fR);"
-.PP
-The function talloc_set_name_const() is just like talloc_set_name(), but it takes a string constant, and is much faster\&. It is extensively used by the "auto naming" macros, such as talloc_p()\&.
-.PP
-This function does not allocate any memory\&. It just copies the supplied pointer into the internal representation of the talloc ptr\&. This means you must not pass a
-\fIname\fR
-pointer to memory that will disappear before
-\fIptr\fR
-is freed with talloc_free()\&.
-.SS "void *talloc_named(const void *\fIctx\fR, size_t \fIsize\fR, const char *\fIfmt\fR, \&.\&.\&.);"
-.PP
-The talloc_named() function creates a named talloc pointer\&. It is equivalent to:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-ptr = talloc_size(ctx, size);
-talloc_set_name(ptr, fmt, \&.\&.\&.\&.);
-.fi
-.if n \{\
-.RE
-.\}
-.SS "void *talloc_named_const(const void *\fIctx\fR, size_t \fIsize\fR, const char *\fIname\fR);"
-.PP
-This is equivalent to:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-ptr = talloc_size(ctx, size);
-talloc_set_name_const(ptr, name);
-.fi
-.if n \{\
-.RE
-.\}
-.SS "const char *talloc_get_name(const void *\fIptr\fR);"
-.PP
-This returns the current name for the given talloc pointer,
-\fIptr\fR\&. See
-\(lqtalloc_set_name()\(rq
-for details\&.
-.SS "void *talloc_init(const char *\fIfmt\fR, \&.\&.\&.);"
-.PP
-This function creates a zero length named talloc context as a top level context\&. It is equivalent to:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-talloc_named(NULL, 0, fmt, \&.\&.\&.);
-.fi
-.if n \{\
-.RE
-.\}
-.SS "void *talloc_new(void *\fIctx\fR);"
-.PP
-This is a utility macro that creates a new memory context hanging off an exiting context, automatically naming it "talloc_new: __location__" where __location__ is the source line it is called from\&. It is particularly useful for creating a new temporary working context\&.
-.SS "(\fItype\fR *)talloc_realloc(const void *\fIctx\fR, void *\fIptr\fR, \fItype\fR, \fIcount\fR);"
-.PP
-The talloc_realloc() macro changes the size of a talloc pointer\&. It has the following equivalences:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-talloc_realloc(ctx, NULL, type, 1) ==> talloc(ctx, type);
-talloc_realloc(ctx, ptr, type, 0) ==> talloc_free(ptr);
-.fi
-.if n \{\
-.RE
-.\}
-.PP
-The
-\fIctx\fR
-argument is only used if
-\fIptr\fR
-is not NULL, otherwise it is ignored\&.
-.PP
-talloc_realloc() returns the new pointer, or NULL on failure\&. The call will fail either due to a lack of memory, or because the pointer has more than one parent (see
-\(lqtalloc_reference()\(rq)\&.
-.SS "void *talloc_realloc_size(const void *ctx, void *ptr, size_t size);"
-.PP
-the talloc_realloc_size() function is useful when the type is not known so the type\-safe talloc_realloc() cannot be used\&.
-.SS "TYPE *talloc_steal(const void *\fInew_ctx\fR, const TYPE *\fIptr\fR);"
-.PP
-The talloc_steal() function changes the parent context of a talloc pointer\&. It is typically used when the context that the pointer is currently a child of is going to be freed and you wish to keep the memory for a longer time\&.
-.PP
-The talloc_steal() function returns the pointer that you pass it\&. It does not have any failure modes\&.
-.PP
-It is possible to produce loops in the parent/child relationship if you are not careful with talloc_steal()\&. No guarantees are provided as to your sanity or the safety of your data if you do this\&.
-.PP
-Note that if you try and call talloc_steal() on a pointer that has more than one parent then the result is ambiguous\&. Talloc will choose to remove the parent that is currently indicated by talloc_parent() and replace it with the chosen parent\&. You will also get a message like this via the talloc logging functions:
-.PP
-
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
- WARNING: talloc_steal with references at some_dir/source/foo\&.c:123
- reference at some_dir/source/other\&.c:325
- reference at some_dir/source/third\&.c:121
-
-.fi
-.if n \{\
-.RE
-.\}
-.PP
-To unambiguously change the parent of a pointer please see the function
-\(lqtalloc_reparent()\(rq\&. See the talloc_set_log_fn() documentation for more information on talloc logging\&.
-.SS "TYPE *talloc_reparent(const void *\fIold_parent\fR, const void *\fInew_parent\fR, const TYPE *\fIptr\fR);"
-.PP
-The talloc_reparent() function changes the parent context of a talloc pointer\&. It is typically used when the context that the pointer is currently a child of is going to be freed and you wish to keep the memory for a longer time\&.
-.PP
-The talloc_reparent() function returns the pointer that you pass it\&. It does not have any failure modes\&.
-.PP
-The difference between talloc_reparent() and talloc_steal() is that talloc_reparent() can specify which parent you wish to change\&. This is useful when a pointer has multiple parents via references\&.
-.SS "TYPE *talloc_move(const void *\fInew_ctx\fR, TYPE **\fIptr\fR);"
-.PP
-The talloc_move() function is a wrapper around talloc_steal() which zeros the source pointer after the move\&. This avoids a potential source of bugs where a programmer leaves a pointer in two structures, and uses the pointer from the old structure after it has been moved to a new one\&.
-.SS "size_t talloc_total_size(const void *\fIptr\fR);"
-.PP
-The talloc_total_size() function returns the total size in bytes used by this pointer and all child pointers\&. Mostly useful for debugging\&.
-.PP
-Passing NULL is allowed, but it will only give a meaningful result if talloc_enable_leak_report() or talloc_enable_leak_report_full() has been called\&.
-.SS "size_t talloc_total_blocks(const void *\fIptr\fR);"
-.PP
-The talloc_total_blocks() function returns the total memory block count used by this pointer and all child pointers\&. Mostly useful for debugging\&.
-.PP
-Passing NULL is allowed, but it will only give a meaningful result if talloc_enable_leak_report() or talloc_enable_leak_report_full() has been called\&.
-.SS "void talloc_report(const void *ptr, FILE *f);"
-.PP
-The talloc_report() function prints a summary report of all memory used by
-\fIptr\fR\&. One line of report is printed for each immediate child of ptr, showing the total memory and number of blocks used by that child\&.
-.PP
-You can pass NULL for the pointer, in which case a report is printed for the top level memory context, but only if talloc_enable_leak_report() or talloc_enable_leak_report_full() has been called\&.
-.SS "void talloc_report_full(const void *\fIptr\fR, FILE *\fIf\fR);"
-.PP
-This provides a more detailed report than talloc_report()\&. It will recursively print the entire tree of memory referenced by the pointer\&. References in the tree are shown by giving the name of the pointer that is referenced\&.
-.PP
-You can pass NULL for the pointer, in which case a report is printed for the top level memory context, but only if talloc_enable_leak_report() or talloc_enable_leak_report_full() has been called\&.
-.SS ""
-.HP \w'void\ talloc_report_depth_cb('u
-.BI "void talloc_report_depth_cb(" "const\ void\ *ptr" ", " "int\ depth" ", " "int\ max_depth" ", " "void\ (*callback)(const\ void\ *ptr,\ int\ depth,\ int\ max_depth,\ int\ is_ref,\ void\ *priv)" ", " "void\ *priv" ");"
-.PP
-This provides a more flexible reports than talloc_report()\&. It will recursively call the callback for the entire tree of memory referenced by the pointer\&. References in the tree are passed with
-\fIis_ref = 1\fR
-and the pointer that is referenced\&.
-.PP
-You can pass NULL for the pointer, in which case a report is printed for the top level memory context, but only if talloc_enable_leak_report() or talloc_enable_leak_report_full() has been called\&.
-.PP
-The recursion is stopped when depth >= max_depth\&. max_depth = \-1 means only stop at leaf nodes\&.
-.SS ""
-.HP \w'void\ talloc_report_depth_file('u
-.BI "void talloc_report_depth_file(" "const\ void\ *ptr" ", " "int\ depth" ", " "int\ max_depth" ", " "FILE\ *f" ");"
-.PP
-This provides a more flexible reports than talloc_report()\&. It will let you specify the depth and max_depth\&.
-.SS "void talloc_enable_leak_report(void);"
-.PP
-This enables calling of talloc_report(NULL, stderr) when the program exits\&. In Samba4 this is enabled by using the \-\-leak\-report command line option\&.
-.PP
-For it to be useful, this function must be called before any other talloc function as it establishes a "null context" that acts as the top of the tree\&. If you don\'t call this function first then passing NULL to talloc_report() or talloc_report_full() won\'t give you the full tree printout\&.
-.PP
-Here is a typical talloc report:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-talloc report on \'null_context\' (total 267 bytes in 15 blocks)
-libcli/auth/spnego_parse\&.c:55 contains 31 bytes in 2 blocks
-libcli/auth/spnego_parse\&.c:55 contains 31 bytes in 2 blocks
-iconv(UTF8,CP850) contains 42 bytes in 2 blocks
-libcli/auth/spnego_parse\&.c:55 contains 31 bytes in 2 blocks
-iconv(CP850,UTF8) contains 42 bytes in 2 blocks
-iconv(UTF8,UTF\-16LE) contains 45 bytes in 2 blocks
-iconv(UTF\-16LE,UTF8) contains 45 bytes in 2 blocks
-
-.fi
-.if n \{\
-.RE
-.\}
-.SS "void talloc_enable_leak_report_full(void);"
-.PP
-This enables calling of talloc_report_full(NULL, stderr) when the program exits\&. In Samba4 this is enabled by using the \-\-leak\-report\-full command line option\&.
-.PP
-For it to be useful, this function must be called before any other talloc function as it establishes a "null context" that acts as the top of the tree\&. If you don\'t call this function first then passing NULL to talloc_report() or talloc_report_full() won\'t give you the full tree printout\&.
-.PP
-Here is a typical full report:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-full talloc report on \'root\' (total 18 bytes in 8 blocks)
-p1 contains 18 bytes in 7 blocks (ref 0)
- r1 contains 13 bytes in 2 blocks (ref 0)
- reference to: p2
- p2 contains 1 bytes in 1 blocks (ref 1)
- x3 contains 1 bytes in 1 blocks (ref 0)
- x2 contains 1 bytes in 1 blocks (ref 0)
- x1 contains 1 bytes in 1 blocks (ref 0)
-
-.fi
-.if n \{\
-.RE
-.\}
-.SS "(\fItype\fR *)talloc_zero(const void *\fIctx\fR, \fItype\fR);"
-.PP
-The talloc_zero() macro is equivalent to:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-ptr = talloc(ctx, type);
-if (ptr) memset(ptr, 0, sizeof(type));
-.fi
-.if n \{\
-.RE
-.\}
-.SS "void *talloc_zero_size(const void *\fIctx\fR, size_t \fIsize\fR)"
-.PP
-The talloc_zero_size() function is useful when you don\'t have a known type\&.
-.SS "void *talloc_memdup(const void *\fIctx\fR, const void *\fIp\fR, size_t size);"
-.PP
-The talloc_memdup() function is equivalent to:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-ptr = talloc_size(ctx, size);
-if (ptr) memcpy(ptr, p, size);
-.fi
-.if n \{\
-.RE
-.\}
-.SS "char *talloc_strdup(const void *\fIctx\fR, const char *\fIp\fR);"
-.PP
-The talloc_strdup() function is equivalent to:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-ptr = talloc_size(ctx, strlen(p)+1);
-if (ptr) memcpy(ptr, p, strlen(p)+1);
-.fi
-.if n \{\
-.RE
-.\}
-.PP
-This function sets the name of the new pointer to the passed string\&. This is equivalent to:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-talloc_set_name_const(ptr, ptr)
-.fi
-.if n \{\
-.RE
-.\}
-.SS "char *talloc_strndup(const void *\fIt\fR, const char *\fIp\fR, size_t \fIn\fR);"
-.PP
-The talloc_strndup() function is the talloc equivalent of the C library function strndup(3)\&.
-.PP
-This function sets the name of the new pointer to the passed string\&. This is equivalent to:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-talloc_set_name_const(ptr, ptr)
-.fi
-.if n \{\
-.RE
-.\}
-.SS "char *talloc_append_string(const void *\fIt\fR, char *\fIorig\fR, const char *\fIappend\fR);"
-.PP
-The talloc_append_string() function appends the given formatted string to the given string\&.
-.PP
-This function sets the name of the new pointer to the new string\&. This is equivalent to:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-talloc_set_name_const(ptr, ptr)
-.fi
-.if n \{\
-.RE
-.\}
-.SS "char *talloc_vasprintf(const void *\fIt\fR, const char *\fIfmt\fR, va_list \fIap\fR);"
-.PP
-The talloc_vasprintf() function is the talloc equivalent of the C library function vasprintf(3)\&.
-.PP
-This function sets the name of the new pointer to the new string\&. This is equivalent to:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-talloc_set_name_const(ptr, ptr)
-.fi
-.if n \{\
-.RE
-.\}
-.SS "char *talloc_asprintf(const void *\fIt\fR, const char *\fIfmt\fR, \&.\&.\&.);"
-.PP
-The talloc_asprintf() function is the talloc equivalent of the C library function asprintf(3)\&.
-.PP
-This function sets the name of the new pointer to the passed string\&. This is equivalent to:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-talloc_set_name_const(ptr, ptr)
-.fi
-.if n \{\
-.RE
-.\}
-.SS "char *talloc_asprintf_append(char *s, const char *fmt, \&.\&.\&.);"
-.PP
-The talloc_asprintf_append() function appends the given formatted string to the given string\&.
-.PP
-This function sets the name of the new pointer to the new string\&. This is equivalent to:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-talloc_set_name_const(ptr, ptr)
-.fi
-.if n \{\
-.RE
-.\}
-.SS "(type *)talloc_array(const void *ctx, type, uint_t count);"
-.PP
-The talloc_array() macro is equivalent to:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-(type *)talloc_size(ctx, sizeof(type) * count);
-.fi
-.if n \{\
-.RE
-.\}
-.PP
-except that it provides integer overflow protection for the multiply, returning NULL if the multiply overflows\&.
-.SS "void *talloc_array_size(const void *ctx, size_t size, uint_t count);"
-.PP
-The talloc_array_size() function is useful when the type is not known\&. It operates in the same way as talloc_array(), but takes a size instead of a type\&.
-.SS "(typeof(ptr)) talloc_array_ptrtype(const void *ctx, ptr, uint_t count);"
-.PP
-The talloc_ptrtype() macro should be used when you have a pointer to an array and want to allocate memory of an array to point at with this pointer\&. When compiling with gcc >= 3 it is typesafe\&. Note this is a wrapper of talloc_array_size() and talloc_get_name() will return the current location in the source file\&. and not the type\&.
-.SS "void *talloc_realloc_fn(const void *ctx, void *ptr, size_t size)"
-.PP
-This is a non\-macro version of talloc_realloc(), which is useful as libraries sometimes want a realloc function pointer\&. A realloc(3) implementation encapsulates the functionality of malloc(3), free(3) and realloc(3) in one call, which is why it is useful to be able to pass around a single function pointer\&.
-.SS "void *talloc_autofree_context(void);"
-.PP
-This is a handy utility function that returns a talloc context which will be automatically freed on program exit\&. This can be used to reduce the noise in memory leak reports\&.
-.SS "void *talloc_check_name(const void *ptr, const char *name);"
-.PP
-This function checks if a pointer has the specified
-\fIname\fR\&. If it does then the pointer is returned\&. It it doesn\'t then NULL is returned\&.
-.SS "(type *)talloc_get_type(const void *ptr, type);"
-.PP
-This macro allows you to do type checking on talloc pointers\&. It is particularly useful for void* private pointers\&. It is equivalent to this:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-(type *)talloc_check_name(ptr, #type)
-.fi
-.if n \{\
-.RE
-.\}
-.SS "talloc_set_type(const void *ptr, type);"
-.PP
-This macro allows you to force the name of a pointer to be a particular
-\fItype\fR\&. This can be used in conjunction with talloc_get_type() to do type checking on void* pointers\&.
-.PP
-It is equivalent to this:
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-talloc_set_name_const(ptr, #type)
-.fi
-.if n \{\
-.RE
-.\}
-.SS "talloc_set_log_fn(void (*log_fn)(const char *message));"
-.PP
-This function sets a logging function that talloc will use for warnings and errors\&. By default talloc will not print any warnings or errors\&.
-.SS "talloc_set_log_stderr(void);"
-.PP
-This sets the talloc log function to write log messages to stderr
-.SH "PERFORMANCE"
-.PP
-All the additional features of talloc(3) over malloc(3) do come at a price\&. We have a simple performance test in Samba4 that measures talloc() versus malloc() performance, and it seems that talloc() is about 10% slower than malloc() on my x86 Debian Linux box\&. For Samba, the great reduction in code complexity that we get by using talloc makes this worthwhile, especially as the total overhead of talloc/malloc in Samba is already quite small\&.
-.SH "SEE ALSO"
-.PP
-malloc(3), strndup(3), vasprintf(3), asprintf(3),
-\m[blue]\fB\%http://talloc.samba.org/\fR\m[]
-.SH "COPYRIGHT/LICENSE"
-.PP
-Copyright (C) Andrew Tridgell 2004
-.PP
-This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version\&.
-.PP
-This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE\&. See the GNU General Public License for more details\&.
-.PP
-You should have received a copy of the GNU General Public License along with this program; if not, see http://www\&.gnu\&.org/licenses/\&.
1
0
commit 6bbd92ec3dadeab464144d28d7d277ec73188005
Author: Danny Rawlins <monster.romster(a)gmail.com>
Date: Sun Sep 4 18:01:54 2016 +1000
util-linux-32: 2.28 -> 2.28.1
diff --git a/util-linux-32/.md5sum b/util-linux-32/.md5sum
index 12f80fa..76252b8 100644
--- a/util-linux-32/.md5sum
+++ b/util-linux-32/.md5sum
@@ -1 +1 @@
-e534e6ccc49107e5d31c329af798ef7d util-linux-2.28.tar.xz
+e2d863efaf4fd330a42c5efe9f1b02b4 util-linux-2.28.1.tar.xz
diff --git a/util-linux-32/Pkgfile b/util-linux-32/Pkgfile
index 3206507..dbc2d3a 100644
--- a/util-linux-32/Pkgfile
+++ b/util-linux-32/Pkgfile
@@ -4,7 +4,7 @@
# Depends on: ncurses-32
name=util-linux-32
-version=2.28
+version=2.28.1
release=1
source=(http://www.kernel.org/pub/linux/utils/util-linux/v${version:0:4}/ut…
@@ -14,7 +14,6 @@ build() {
./configure \
--prefix=/usr \
--libdir=/usr/lib32 \
- --mandir=/usr/man \
--disable-nls \
--disable-{login,su,sulogin,nologin,runuser} \
--disable-chfn-chsh \
@@ -26,7 +25,7 @@ build() {
rm -r \
$PKG/{bin,sbin} \
- $PKG/usr/{bin,sbin,man,include} \
+ $PKG/usr/{bin,sbin,share/man,include} \
$PKG//usr/share/{bash-completion,doc}
rmdir $PKG/usr/share
1
0
commit b9b89170444ff3f9f028f4ee3c4d78e3db624bd8
Author: Danny Rawlins <monster.romster(a)gmail.com>
Date: Sun Sep 4 17:59:16 2016 +1000
sqlite3-32: 3.13.0 -> 3.14.1
diff --git a/sqlite3-32/.md5sum b/sqlite3-32/.md5sum
index f6d679a..dab06eb 100644
--- a/sqlite3-32/.md5sum
+++ b/sqlite3-32/.md5sum
@@ -1 +1 @@
-4e83f39fa2ffb610ac5ecd36865da6a2 sqlite-autoconf-3130000.tar.gz
+3634a90a3f49541462bcaed3474b2684 sqlite-autoconf-3140100.tar.gz
diff --git a/sqlite3-32/Pkgfile b/sqlite3-32/Pkgfile
index 85b9952..171d02f 100644
--- a/sqlite3-32/Pkgfile
+++ b/sqlite3-32/Pkgfile
@@ -4,7 +4,7 @@
# Depends on: ncurses-32 readline-32 sqlite3
name=sqlite3-32
-version=3.13.0
+version=3.14.1
release=1
_version=$(printf "%i%.2i%.2i%.2i" ${version//./ })
1
0
commit 433a1fff9e9b895a85d1888ad964c63521d0a388
Author: Danny Rawlins <monster.romster(a)gmail.com>
Date: Sun Sep 4 17:58:34 2016 +1000
pango-32: 1.40.1 -> 1.40.2
diff --git a/pango-32/.footprint b/pango-32/.footprint
index ea00132..7ff2f7a 100644
--- a/pango-32/.footprint
+++ b/pango-32/.footprint
@@ -3,21 +3,21 @@ drwxr-xr-x root/root usr/bin/
-rwxr-xr-x root/root usr/bin/pango-view-32
drwxr-xr-x root/root usr/lib32/
-rwxr-xr-x root/root usr/lib32/libpango-1.0.la
-lrwxrwxrwx root/root usr/lib32/libpango-1.0.so -> libpango-1.0.so.0.4000.1
-lrwxrwxrwx root/root usr/lib32/libpango-1.0.so.0 -> libpango-1.0.so.0.4000.1
--rwxr-xr-x root/root usr/lib32/libpango-1.0.so.0.4000.1
+lrwxrwxrwx root/root usr/lib32/libpango-1.0.so -> libpango-1.0.so.0.4000.2
+lrwxrwxrwx root/root usr/lib32/libpango-1.0.so.0 -> libpango-1.0.so.0.4000.2
+-rwxr-xr-x root/root usr/lib32/libpango-1.0.so.0.4000.2
-rwxr-xr-x root/root usr/lib32/libpangocairo-1.0.la
-lrwxrwxrwx root/root usr/lib32/libpangocairo-1.0.so -> libpangocairo-1.0.so.0.4000.1
-lrwxrwxrwx root/root usr/lib32/libpangocairo-1.0.so.0 -> libpangocairo-1.0.so.0.4000.1
--rwxr-xr-x root/root usr/lib32/libpangocairo-1.0.so.0.4000.1
+lrwxrwxrwx root/root usr/lib32/libpangocairo-1.0.so -> libpangocairo-1.0.so.0.4000.2
+lrwxrwxrwx root/root usr/lib32/libpangocairo-1.0.so.0 -> libpangocairo-1.0.so.0.4000.2
+-rwxr-xr-x root/root usr/lib32/libpangocairo-1.0.so.0.4000.2
-rwxr-xr-x root/root usr/lib32/libpangoft2-1.0.la
-lrwxrwxrwx root/root usr/lib32/libpangoft2-1.0.so -> libpangoft2-1.0.so.0.4000.1
-lrwxrwxrwx root/root usr/lib32/libpangoft2-1.0.so.0 -> libpangoft2-1.0.so.0.4000.1
--rwxr-xr-x root/root usr/lib32/libpangoft2-1.0.so.0.4000.1
+lrwxrwxrwx root/root usr/lib32/libpangoft2-1.0.so -> libpangoft2-1.0.so.0.4000.2
+lrwxrwxrwx root/root usr/lib32/libpangoft2-1.0.so.0 -> libpangoft2-1.0.so.0.4000.2
+-rwxr-xr-x root/root usr/lib32/libpangoft2-1.0.so.0.4000.2
-rwxr-xr-x root/root usr/lib32/libpangoxft-1.0.la
-lrwxrwxrwx root/root usr/lib32/libpangoxft-1.0.so -> libpangoxft-1.0.so.0.4000.1
-lrwxrwxrwx root/root usr/lib32/libpangoxft-1.0.so.0 -> libpangoxft-1.0.so.0.4000.1
--rwxr-xr-x root/root usr/lib32/libpangoxft-1.0.so.0.4000.1
+lrwxrwxrwx root/root usr/lib32/libpangoxft-1.0.so -> libpangoxft-1.0.so.0.4000.2
+lrwxrwxrwx root/root usr/lib32/libpangoxft-1.0.so.0 -> libpangoxft-1.0.so.0.4000.2
+-rwxr-xr-x root/root usr/lib32/libpangoxft-1.0.so.0.4000.2
drwxr-xr-x root/root usr/lib32/pkgconfig/
-rw-r--r-- root/root usr/lib32/pkgconfig/pango.pc
-rw-r--r-- root/root usr/lib32/pkgconfig/pangocairo.pc
diff --git a/pango-32/.md5sum b/pango-32/.md5sum
index cabb593..be1d1f9 100644
--- a/pango-32/.md5sum
+++ b/pango-32/.md5sum
@@ -1 +1 @@
-6fc88c6529890d6c8e03074d57a3eceb pango-1.40.1.tar.xz
+c4fa70815b0105f876aa9e89b5ae33a5 pango-1.40.2.tar.xz
diff --git a/pango-32/Pkgfile b/pango-32/Pkgfile
index f5c03eb..94dd379 100644
--- a/pango-32/Pkgfile
+++ b/pango-32/Pkgfile
@@ -4,7 +4,7 @@
# Depends on: cairo-32 glib-32 xorg-libsm-32 xorg-libxext-32 xorg-libxft-32 pango harfbuzz-32
name=pango-32
-version=1.40.1
+version=1.40.2
release=1
source=(http://download.gnome.org/sources/pango/${version:0:4}/pango-$versi…
1
0
commit 21058567bc764c414b566cabbe40f79af40380a5
Author: Danny Rawlins <monster.romster(a)gmail.com>
Date: Sun Sep 4 17:57:49 2016 +1000
nss-32: 3.25 -> 3.26
diff --git a/nss-32/.md5sum b/nss-32/.md5sum
index 35d4b80..17f33ee 100644
--- a/nss-32/.md5sum
+++ b/nss-32/.md5sum
@@ -1,3 +1,3 @@
-23169c406adc8ac3672d34bf9ea2433d nss-3.25.tar.gz
+b71ab412cf07af436726679b204b0777 nss-3.26.tar.gz
17226659298a9d9bb3f323186d220f6f nss-config.in
a796e6ab6c87573ffb649ce8769bc07a nss.pc.in
diff --git a/nss-32/Pkgfile b/nss-32/Pkgfile
index 2797d04..81c6a2b 100644
--- a/nss-32/Pkgfile
+++ b/nss-32/Pkgfile
@@ -4,9 +4,9 @@
# Depends on: nss nspr-32 sqlite3-32 zlib-32
name=nss-32
-version=3.25
+version=3.26
release=1
-source=(http://ftp.mozilla.org/pub/security/nss/releases/NSS_3_25_RTM/src/nss-$version.tar.gz
+source=(http://ftp.mozilla.org/pub/security/nss/releases/NSS_3_26_RTM/src/nss-$version.tar.gz
nss-config.in nss.pc.in)
build() {
1
0
commit 591ca57533134eff3a69239c9c741ae10805bc8f
Author: Danny Rawlins <monster.romster(a)gmail.com>
Date: Sun Sep 4 17:54:45 2016 +1000
libpng-32: 1.6.24 -> 1.6.25
diff --git a/libpng-32/.footprint b/libpng-32/.footprint
index c562627..6495375 100644
--- a/libpng-32/.footprint
+++ b/libpng-32/.footprint
@@ -5,9 +5,9 @@ lrwxrwxrwx root/root usr/lib32/libpng.la -> libpng16.la
lrwxrwxrwx root/root usr/lib32/libpng.so -> libpng16.so
-rw-r--r-- root/root usr/lib32/libpng16.a
-rwxr-xr-x root/root usr/lib32/libpng16.la
-lrwxrwxrwx root/root usr/lib32/libpng16.so -> libpng16.so.16.24.0
-lrwxrwxrwx root/root usr/lib32/libpng16.so.16 -> libpng16.so.16.24.0
--rwxr-xr-x root/root usr/lib32/libpng16.so.16.24.0
+lrwxrwxrwx root/root usr/lib32/libpng16.so -> libpng16.so.16.25.0
+lrwxrwxrwx root/root usr/lib32/libpng16.so.16 -> libpng16.so.16.25.0
+-rwxr-xr-x root/root usr/lib32/libpng16.so.16.25.0
drwxr-xr-x root/root usr/lib32/pkgconfig/
lrwxrwxrwx root/root usr/lib32/pkgconfig/libpng.pc -> libpng16.pc
-rw-r--r-- root/root usr/lib32/pkgconfig/libpng16.pc
diff --git a/libpng-32/.md5sum b/libpng-32/.md5sum
index a0b9e32..d8d0210 100644
--- a/libpng-32/.md5sum
+++ b/libpng-32/.md5sum
@@ -1,2 +1,2 @@
-ffcdbd549814787fa8010c372e35ff25 libpng-1.6.24.tar.xz
-c49ff77efebb8ab3dd8c10469e162d94 libpng-apng.patch
+0cb72ef57a576bfed1b6cb4b5a09b554 libpng-1.6.25.tar.xz
+312fa4f13c14fded81ab6e9c5cb0055b libpng-apng.patch
diff --git a/libpng-32/Pkgfile b/libpng-32/Pkgfile
index befd75c..0f11aab 100644
--- a/libpng-32/Pkgfile
+++ b/libpng-32/Pkgfile
@@ -4,7 +4,7 @@
# Depends on: zlib-32 libpng
name=libpng-32
-version=1.6.24
+version=1.6.25
release=1
source=(http://download.sourceforge.net/libpng/libpng-$version.tar.xz
libpng-apng.patch)
@@ -12,7 +12,7 @@ source=(http://download.sourceforge.net/libpng/libpng-$version.tar.xz
build() {
cd libpng-$version
- patch -p1 -i $SRC/libpng-apng.patch
+ patch -p0 -i $SRC/libpng-apng.patch
./configure \
--prefix=/usr \
diff --git a/libpng-32/libpng-apng.patch b/libpng-32/libpng-apng.patch
index 74d0cad..1794853 100644
--- a/libpng-32/libpng-apng.patch
+++ b/libpng-32/libpng-apng.patch
@@ -1,147 +1,129 @@
-diff -Naru libpng-1.6.23.org/png.h libpng-1.6.23/png.h
---- libpng-1.6.23.org/png.h 2016-06-09 22:23:09.753041866 +0900
-+++ libpng-1.6.23/png.h 2016-06-09 22:23:39.282106366 +0900
-@@ -366,6 +366,10 @@
- # include "pnglibconf.h"
- #endif
+Index: LICENSE
+===================================================================
+--- LICENSE
++++ LICENSE
+@@ -8,6 +8,12 @@
+ If you modify libpng you may insert additional notices immediately following
+ this sentence.
-+#define PNG_APNG_SUPPORTED
-+#define PNG_READ_APNG_SUPPORTED
-+#define PNG_WRITE_APNG_SUPPORTED
++This modified version of libpng code adds animated PNG support and is
++released under the libpng license described below. The modifications are
++Copyright (c) 2006-2007 Andrew Smith, Copyright (c) 2008-2016 Max Stepin,
++and are delimited by "#ifdef PNG_APNG_SUPPORTED / #endif" directives
++surrounding them in the modified libpng source files.
+
- #ifndef PNG_VERSION_INFO_ONLY
- /* Machine specific configuration. */
- # include "pngconf.h"
-@@ -461,6 +465,17 @@
- * See pngconf.h for base types that vary by machine/system
- */
+ This code is released under the libpng license.
-+#ifdef PNG_APNG_SUPPORTED
-+/* dispose_op flags from inside fcTL */
-+#define PNG_DISPOSE_OP_NONE 0x00
-+#define PNG_DISPOSE_OP_BACKGROUND 0x01
-+#define PNG_DISPOSE_OP_PREVIOUS 0x02
-+
-+/* blend_op flags from inside fcTL */
-+#define PNG_BLEND_OP_SOURCE 0x00
-+#define PNG_BLEND_OP_OVER 0x01
-+#endif /* PNG_APNG_SUPPORTED */
-+
- /* This triggers a compiler error in png.c, if png.c and png.h
- * do not agree upon the version number.
- */
-@@ -781,6 +796,10 @@
- #define PNG_INFO_sPLT 0x2000U /* ESR, 1.0.6 */
- #define PNG_INFO_sCAL 0x4000U /* ESR, 1.0.6 */
- #define PNG_INFO_IDAT 0x8000U /* ESR, 1.0.6 */
-+#ifdef PNG_APNG_SUPPORTED
-+#define PNG_INFO_acTL 0x10000
-+#define PNG_INFO_fcTL 0x20000
+ libpng versions 1.0.7, July 1, 2000 through 1.6.25, September 1, 2016 are
+Index: pngread.c
+===================================================================
+--- pngread.c
++++ pngread.c
+@@ -161,6 +161,9 @@
+
+ else if (chunk_name == png_IDAT)
+ {
++#ifdef PNG_READ_APNG_SUPPORTED
++ png_have_info(png_ptr, info_ptr);
+#endif
+ png_ptr->idat_size = length;
+ break;
+ }
+@@ -250,6 +253,17 @@
+ png_handle_iTXt(png_ptr, info_ptr, length);
+ #endif
- /* This is used for the transformation routines, as some of them
- * change these values for the row. It also should enable using
-@@ -818,6 +837,10 @@
- #ifdef PNG_PROGRESSIVE_READ_SUPPORTED
- typedef PNG_CALLBACK(void, *png_progressive_info_ptr, (png_structp, png_infop));
- typedef PNG_CALLBACK(void, *png_progressive_end_ptr, (png_structp, png_infop));
-+#ifdef PNG_APNG_SUPPORTED
-+typedef PNG_CALLBACK(void, *png_progressive_frame_ptr, (png_structp,
-+ png_uint_32));
++#ifdef PNG_READ_APNG_SUPPORTED
++ else if (chunk_name == png_acTL)
++ png_handle_acTL(png_ptr, info_ptr, length);
++
++ else if (chunk_name == png_fcTL)
++ png_handle_fcTL(png_ptr, info_ptr, length);
++
++ else if (chunk_name == png_fdAT)
++ png_handle_fdAT(png_ptr, info_ptr, length);
+#endif
++
+ else
+ png_handle_unknown(png_ptr, info_ptr, length,
+ PNG_HANDLE_CHUNK_AS_DEFAULT);
+@@ -257,6 +271,72 @@
+ }
+ #endif /* SEQUENTIAL_READ */
- /* The following callback receives png_uint_32 row_number, int pass for the
- * png_bytep data of the row. When transforming an interlaced image the
-@@ -3236,6 +3259,74 @@
- /*******************************************************************************
- * END OF HARDWARE AND SOFTWARE OPTIONS
- ******************************************************************************/
-+#ifdef PNG_APNG_SUPPORTED
-+PNG_EXPORT(246, png_uint_32, png_get_acTL, (png_structp png_ptr,
-+ png_infop info_ptr, png_uint_32 *num_frames, png_uint_32 *num_plays));
++#ifdef PNG_READ_APNG_SUPPORTED
++void PNGAPI
++png_read_frame_head(png_structp png_ptr, png_infop info_ptr)
++{
++ png_byte have_chunk_after_DAT; /* after IDAT or after fdAT */
+
-+PNG_EXPORT(247, png_uint_32, png_set_acTL, (png_structp png_ptr,
-+ png_infop info_ptr, png_uint_32 num_frames, png_uint_32 num_plays));
++ png_debug(0, "Reading frame head");
+
-+PNG_EXPORT(248, png_uint_32, png_get_num_frames, (png_structp png_ptr,
-+ png_infop info_ptr));
++ if ((png_ptr->mode & PNG_HAVE_acTL) == 0)
++ png_error(png_ptr, "attempt to png_read_frame_head() but "
++ "no acTL present");
+
-+PNG_EXPORT(249, png_uint_32, png_get_num_plays, (png_structp png_ptr,
-+ png_infop info_ptr));
++ /* do nothing for the main IDAT */
++ if (png_ptr->num_frames_read == 0)
++ return;
+
-+PNG_EXPORT(250, png_uint_32, png_get_next_frame_fcTL,
-+ (png_structp png_ptr, png_infop info_ptr, png_uint_32 *width,
-+ png_uint_32 *height, png_uint_32 *x_offset, png_uint_32 *y_offset,
-+ png_uint_16 *delay_num, png_uint_16 *delay_den, png_byte *dispose_op,
-+ png_byte *blend_op));
++ png_read_reset(png_ptr);
++ png_ptr->flags &= ~PNG_FLAG_ROW_INIT;
++ png_ptr->mode &= ~PNG_HAVE_fcTL;
+
-+PNG_EXPORT(251, png_uint_32, png_set_next_frame_fcTL,
-+ (png_structp png_ptr, png_infop info_ptr, png_uint_32 width,
-+ png_uint_32 height, png_uint_32 x_offset, png_uint_32 y_offset,
-+ png_uint_16 delay_num, png_uint_16 delay_den, png_byte dispose_op,
-+ png_byte blend_op));
++ have_chunk_after_DAT = 0;
++ for (;;)
++ {
++ png_uint_32 length = png_read_chunk_header(png_ptr);
+
-+PNG_EXPORT(252, png_uint_32, png_get_next_frame_width,
-+ (png_structp png_ptr, png_infop info_ptr));
-+PNG_EXPORT(253, png_uint_32, png_get_next_frame_height,
-+ (png_structp png_ptr, png_infop info_ptr));
-+PNG_EXPORT(254, png_uint_32, png_get_next_frame_x_offset,
-+ (png_structp png_ptr, png_infop info_ptr));
-+PNG_EXPORT(255, png_uint_32, png_get_next_frame_y_offset,
-+ (png_structp png_ptr, png_infop info_ptr));
-+PNG_EXPORT(256, png_uint_16, png_get_next_frame_delay_num,
-+ (png_structp png_ptr, png_infop info_ptr));
-+PNG_EXPORT(257, png_uint_16, png_get_next_frame_delay_den,
-+ (png_structp png_ptr, png_infop info_ptr));
-+PNG_EXPORT(258, png_byte, png_get_next_frame_dispose_op,
-+ (png_structp png_ptr, png_infop info_ptr));
-+PNG_EXPORT(259, png_byte, png_get_next_frame_blend_op,
-+ (png_structp png_ptr, png_infop info_ptr));
-+PNG_EXPORT(260, png_byte, png_get_first_frame_is_hidden,
-+ (png_structp png_ptr, png_infop info_ptr));
-+PNG_EXPORT(261, png_uint_32, png_set_first_frame_is_hidden,
-+ (png_structp png_ptr, png_infop info_ptr, png_byte is_hidden));
++ if (png_ptr->chunk_name == png_IDAT)
++ {
++ /* discard trailing IDATs for the first frame */
++ if (have_chunk_after_DAT != 0 || png_ptr->num_frames_read > 1)
++ png_error(png_ptr, "png_read_frame_head(): out of place IDAT");
++ png_crc_finish(png_ptr, length);
++ }
+
-+#ifdef PNG_READ_APNG_SUPPORTED
-+PNG_EXPORT(262, void, png_read_frame_head, (png_structp png_ptr,
-+ png_infop info_ptr));
-+#ifdef PNG_PROGRESSIVE_READ_SUPPORTED
-+PNG_EXPORT(263, void, png_set_progressive_frame_fn, (png_structp png_ptr,
-+ png_progressive_frame_ptr frame_info_fn,
-+ png_progressive_frame_ptr frame_end_fn));
-+#endif /* PNG_PROGRESSIVE_READ_SUPPORTED */
-+#endif /* PNG_READ_APNG_SUPPORTED */
++ else if (png_ptr->chunk_name == png_fcTL)
++ {
++ png_handle_fcTL(png_ptr, info_ptr, length);
++ have_chunk_after_DAT = 1;
++ }
+
-+#ifdef PNG_WRITE_APNG_SUPPORTED
-+PNG_EXPORT(264, void, png_write_frame_head, (png_structp png_ptr,
-+ png_infop info_ptr, png_bytepp row_pointers,
-+ png_uint_32 width, png_uint_32 height,
-+ png_uint_32 x_offset, png_uint_32 y_offset,
-+ png_uint_16 delay_num, png_uint_16 delay_den, png_byte dispose_op,
-+ png_byte blend_op));
++ else if (png_ptr->chunk_name == png_fdAT)
++ {
++ png_ensure_sequence_number(png_ptr, length);
+
-+PNG_EXPORT(265, void, png_write_frame_tail, (png_structp png_ptr,
-+ png_infop info_ptr));
-+#endif /* PNG_WRITE_APNG_SUPPORTED */
-+#endif /* PNG_APNG_SUPPORTED */
-
- /* Maintainer: Put new public prototypes here ^, in libpng.3, in project
- * defs, and in scripts/symbols.def.
-@@ -3245,7 +3336,11 @@
- * one to use is one more than this.)
- */
- #ifdef PNG_EXPORT_LAST_ORDINAL
-+#ifdef PNG_APNG_SUPPORTED
-+ PNG_EXPORT_LAST_ORDINAL(265);
-+#else
- PNG_EXPORT_LAST_ORDINAL(245);
-+#endif /* PNG_APNG_SUPPORTED */
- #endif
-
- #ifdef __cplusplus
-diff -Naru libpng-1.6.23.org/pngget.c libpng-1.6.23/pngget.c
---- libpng-1.6.23.org/pngget.c 2016-06-09 22:21:54.199319849 +0900
-+++ libpng-1.6.23/pngget.c 2016-06-09 22:23:39.230104491 +0900
++ /* discard trailing fdATs for frames other than the first */
++ if (have_chunk_after_DAT == 0 && png_ptr->num_frames_read > 1)
++ png_crc_finish(png_ptr, length - 4);
++ else if(png_ptr->mode & PNG_HAVE_fcTL)
++ {
++ png_ptr->idat_size = length - 4;
++ png_ptr->mode |= PNG_HAVE_IDAT;
++
++ break;
++ }
++ else
++ png_error(png_ptr, "png_read_frame_head(): out of place fdAT");
++ }
++ else
++ {
++ png_warning(png_ptr, "Skipped (ignored) a chunk "
++ "between APNG chunks");
++ png_crc_finish(png_ptr, length);
++ }
++ }
++}
++#endif /* READ_APNG */
++
+ /* Optional call to update the users info_ptr structure */
+ void PNGAPI
+ png_read_update_info(png_structrp png_ptr, png_inforp info_ptr)
+Index: pngget.c
+===================================================================
+--- pngget.c
++++ pngget.c
@@ -1216,4 +1216,166 @@
# endif
#endif
@@ -154,7 +136,7 @@ diff -Naru libpng-1.6.23.org/pngget.c libpng-1.6.23/pngget.c
+ png_debug1(1, "in %s retrieval function", "acTL");
+
+ if (png_ptr != NULL && info_ptr != NULL &&
-+ (info_ptr->valid & PNG_INFO_acTL) &&
++ (info_ptr->valid & PNG_INFO_acTL) != 0 &&
+ num_frames != NULL && num_plays != NULL)
+ {
+ *num_frames = info_ptr->num_frames;
@@ -195,7 +177,7 @@ diff -Naru libpng-1.6.23.org/pngget.c libpng-1.6.23/pngget.c
+ png_debug1(1, "in %s retrieval function", "fcTL");
+
+ if (png_ptr != NULL && info_ptr != NULL &&
-+ (info_ptr->valid & PNG_INFO_fcTL) &&
++ (info_ptr->valid & PNG_INFO_fcTL) != 0 &&
+ width != NULL && height != NULL &&
+ x_offset != NULL && y_offset != NULL &&
+ delay_num != NULL && delay_den != NULL &&
@@ -307,352 +289,268 @@ diff -Naru libpng-1.6.23.org/pngget.c libpng-1.6.23/pngget.c
+
+ return 0;
+}
-+#endif /* PNG_APNG_SUPPORTED */
++#endif /* APNG */
#endif /* READ || WRITE */
-diff -Naru libpng-1.6.23.org/pnginfo.h libpng-1.6.23/pnginfo.h
---- libpng-1.6.23.org/pnginfo.h 2016-06-09 22:21:54.200319885 +0900
-+++ libpng-1.6.23/pnginfo.h 2016-06-09 22:23:39.230104491 +0900
-@@ -255,5 +255,18 @@
- png_bytepp row_pointers; /* the image bits */
+Index: png.c
+===================================================================
+--- png.c
++++ png.c
+@@ -775,17 +775,21 @@
+ #else
+ # ifdef __STDC__
+ return PNG_STRING_NEWLINE \
+- "libpng version 1.6.25 - September 1, 2016" PNG_STRING_NEWLINE \
++ "libpng version 1.6.25+apng - September 1, 2016" PNG_STRING_NEWLINE \
+ "Copyright (c) 1998-2002,2004,2006-2016 Glenn Randers-Pehrson" \
+ PNG_STRING_NEWLINE \
+ "Copyright (c) 1996-1997 Andreas Dilger" PNG_STRING_NEWLINE \
+ "Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc." \
+- PNG_STRING_NEWLINE;
++ PNG_STRING_NEWLINE \
++ "Portions Copyright (c) 2006-2007 Andrew Smith" PNG_STRING_NEWLINE \
++ "Portions Copyright (c) 2008-2016 Max Stepin" PNG_STRING_NEWLINE ;
+ # else
+- return "libpng version 1.6.25 - September 1, 2016\
++ return "libpng version 1.6.25+apng - September 1, 2016\
+ Copyright (c) 1998-2002,2004,2006-2016 Glenn Randers-Pehrson\
+ Copyright (c) 1996-1997 Andreas Dilger\
+- Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc.";
++ Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc.\
++ Portions Copyright (c) 2006-2007 Andrew Smith\
++ Portions Copyright (c) 2008-2016 Max Stepin";
+ # endif
#endif
+ }
+Index: png.h
+===================================================================
+--- png.h
++++ png.h
+@@ -23,6 +23,12 @@
+ * If you modify libpng you may insert additional notices immediately following
+ * this sentence.
+ *
++ * This modified version of libpng code adds animated PNG support and is
++ * released under the libpng license described below. The modifications are
++ * Copyright (c) 2006-2007 Andrew Smith, Copyright (c) 2008-2016 Max Stepin,
++ * and are delimited by "#ifdef PNG_APNG_SUPPORTED / #endif" directives
++ * surrounding them in the modified libpng source files.
++ *
+ * This code is released under the libpng license.
+ *
+ * Some files in the "contrib" directory and some configure-generated
+@@ -314,8 +320,9 @@
+ */
-+#ifdef PNG_APNG_SUPPORTED
-+ png_uint_32 num_frames; /* including default image */
-+ png_uint_32 num_plays;
-+ png_uint_32 next_frame_width;
-+ png_uint_32 next_frame_height;
-+ png_uint_32 next_frame_x_offset;
-+ png_uint_32 next_frame_y_offset;
-+ png_uint_16 next_frame_delay_num;
-+ png_uint_16 next_frame_delay_den;
-+ png_byte next_frame_dispose_op;
-+ png_byte next_frame_blend_op;
-+#endif
-+
- };
- #endif /* PNGINFO_H */
-diff -Naru libpng-1.6.23.org/pngpread.c libpng-1.6.23/pngpread.c
---- libpng-1.6.23.org/pngpread.c 2016-06-09 22:23:09.754041902 +0900
-+++ libpng-1.6.23/pngpread.c 2016-06-09 22:23:39.230104491 +0900
-@@ -194,6 +194,106 @@
+ /* Version information for png.h - this should match the version in png.c */
+-#define PNG_LIBPNG_VER_STRING "1.6.25"
+-#define PNG_HEADER_VERSION_STRING " libpng version 1.6.25 - September 1, 2016\n"
++#define PNG_LIBPNG_VER_STRING "1.6.25+apng"
++#define PNG_HEADER_VERSION_STRING \
++ " libpng version 1.6.25+apng - September 1, 2016\n"
- chunk_name = png_ptr->chunk_name;
+ #define PNG_LIBPNG_VER_SONUM 16
+ #define PNG_LIBPNG_VER_DLLNUM 16
+@@ -366,6 +373,10 @@
+ # include "pnglibconf.h"
+ #endif
-+#ifdef PNG_READ_APNG_SUPPORTED
-+ if (png_ptr->num_frames_read > 0 &&
-+ png_ptr->num_frames_read < info_ptr->num_frames)
-+ {
-+ if (chunk_name == png_IDAT)
-+ {
-+ /* Discard trailing IDATs for the first frame */
-+ if (png_ptr->mode & PNG_HAVE_fcTL || png_ptr->num_frames_read > 1)
-+ png_error(png_ptr, "out of place IDAT");
-+
-+ if (png_ptr->push_length + 4 > png_ptr->buffer_size)
-+ {
-+ png_push_save_buffer(png_ptr);
-+ return;
-+ }
-+
-+ png_ptr->mode &= ~PNG_HAVE_CHUNK_HEADER;
-+ return;
-+ }
-+ else if (chunk_name == png_fdAT)
-+ {
-+ if (png_ptr->buffer_size < 4)
-+ {
-+ png_push_save_buffer(png_ptr);
-+ return;
-+ }
-+
-+ png_ensure_sequence_number(png_ptr, 4);
++#define PNG_APNG_SUPPORTED
++#define PNG_READ_APNG_SUPPORTED
++#define PNG_WRITE_APNG_SUPPORTED
+
-+ if (!(png_ptr->mode & PNG_HAVE_fcTL))
-+ {
-+ /* Discard trailing fdATs for frames other than the first */
-+ if (png_ptr->num_frames_read < 2)
-+ png_error(png_ptr, "out of place fdAT");
+ #ifndef PNG_VERSION_INFO_ONLY
+ /* Machine specific configuration. */
+ # include "pngconf.h"
+@@ -461,6 +472,17 @@
+ * See pngconf.h for base types that vary by machine/system
+ */
+
++#ifdef PNG_APNG_SUPPORTED
++/* dispose_op flags from inside fcTL */
++#define PNG_DISPOSE_OP_NONE 0x00
++#define PNG_DISPOSE_OP_BACKGROUND 0x01
++#define PNG_DISPOSE_OP_PREVIOUS 0x02
+
-+ if (png_ptr->push_length + 4 > png_ptr->buffer_size)
-+ {
-+ png_push_save_buffer(png_ptr);
-+ return;
-+ }
++/* blend_op flags from inside fcTL */
++#define PNG_BLEND_OP_SOURCE 0x00
++#define PNG_BLEND_OP_OVER 0x01
++#endif /* APNG */
+
-+ png_ptr->mode &= ~PNG_HAVE_CHUNK_HEADER;
-+ return;
-+ }
-+
-+ else
-+ {
-+ /* frame data follows */
-+ png_ptr->idat_size = png_ptr->push_length - 4;
-+ png_ptr->mode |= PNG_HAVE_IDAT;
-+ png_ptr->process_mode = PNG_READ_IDAT_MODE;
-+
-+ return;
-+ }
-+ }
-+
-+ else if (chunk_name == png_fcTL)
-+ {
-+ if (png_ptr->push_length + 4 > png_ptr->buffer_size)
-+ {
-+ png_push_save_buffer(png_ptr);
-+ return;
-+ }
-+
-+ png_read_reset(png_ptr);
-+ png_ptr->mode &= ~PNG_HAVE_fcTL;
-+
-+ png_handle_fcTL(png_ptr, info_ptr, png_ptr->push_length);
-+
-+ if (!(png_ptr->mode & PNG_HAVE_fcTL))
-+ png_error(png_ptr, "missing required fcTL chunk");
+ /* This triggers a compiler error in png.c, if png.c and png.h
+ * do not agree upon the version number.
+ */
+@@ -781,6 +803,10 @@
+ #define PNG_INFO_sPLT 0x2000U /* ESR, 1.0.6 */
+ #define PNG_INFO_sCAL 0x4000U /* ESR, 1.0.6 */
+ #define PNG_INFO_IDAT 0x8000U /* ESR, 1.0.6 */
++#ifdef PNG_APNG_SUPPORTED
++#define PNG_INFO_acTL 0x10000U
++#define PNG_INFO_fcTL 0x20000U
++#endif
+
+ /* This is used for the transformation routines, as some of them
+ * change these values for the row. It also should enable using
+@@ -818,6 +844,10 @@
+ #ifdef PNG_PROGRESSIVE_READ_SUPPORTED
+ typedef PNG_CALLBACK(void, *png_progressive_info_ptr, (png_structp, png_infop));
+ typedef PNG_CALLBACK(void, *png_progressive_end_ptr, (png_structp, png_infop));
++#ifdef PNG_APNG_SUPPORTED
++typedef PNG_CALLBACK(void, *png_progressive_frame_ptr, (png_structp,
++ png_uint_32));
++#endif
+
+ /* The following callback receives png_uint_32 row_number, int pass for the
+ * png_bytep data of the row. When transforming an interlaced image the
+@@ -3246,6 +3276,75 @@
+ * END OF HARDWARE AND SOFTWARE OPTIONS
+ ******************************************************************************/
+
++#ifdef PNG_APNG_SUPPORTED
++PNG_EXPORT(246, png_uint_32, png_get_acTL, (png_structp png_ptr,
++ png_infop info_ptr, png_uint_32 *num_frames, png_uint_32 *num_plays));
+
-+ png_read_reinit(png_ptr, info_ptr);
-+ png_progressive_read_reset(png_ptr);
++PNG_EXPORT(247, png_uint_32, png_set_acTL, (png_structp png_ptr,
++ png_infop info_ptr, png_uint_32 num_frames, png_uint_32 num_plays));
+
-+ if (png_ptr->frame_info_fn != NULL)
-+ (*(png_ptr->frame_info_fn))(png_ptr, png_ptr->num_frames_read);
++PNG_EXPORT(248, png_uint_32, png_get_num_frames, (png_structp png_ptr,
++ png_infop info_ptr));
+
-+ png_ptr->mode &= ~PNG_HAVE_CHUNK_HEADER;
++PNG_EXPORT(249, png_uint_32, png_get_num_plays, (png_structp png_ptr,
++ png_infop info_ptr));
+
-+ return;
-+ }
++PNG_EXPORT(250, png_uint_32, png_get_next_frame_fcTL,
++ (png_structp png_ptr, png_infop info_ptr, png_uint_32 *width,
++ png_uint_32 *height, png_uint_32 *x_offset, png_uint_32 *y_offset,
++ png_uint_16 *delay_num, png_uint_16 *delay_den, png_byte *dispose_op,
++ png_byte *blend_op));
+
-+ else
-+ {
-+ if (png_ptr->push_length + 4 > png_ptr->buffer_size)
-+ {
-+ png_push_save_buffer(png_ptr);
-+ return;
-+ }
-+ png_warning(png_ptr, "Skipped (ignored) a chunk "
-+ "between APNG chunks");
-+ png_ptr->mode &= ~PNG_HAVE_CHUNK_HEADER;
-+ return;
-+ }
++PNG_EXPORT(251, png_uint_32, png_set_next_frame_fcTL,
++ (png_structp png_ptr, png_infop info_ptr, png_uint_32 width,
++ png_uint_32 height, png_uint_32 x_offset, png_uint_32 y_offset,
++ png_uint_16 delay_num, png_uint_16 delay_den, png_byte dispose_op,
++ png_byte blend_op));
+
-+ return;
-+ }
-+#endif /* PNG_READ_APNG_SUPPORTED */
++PNG_EXPORT(252, png_uint_32, png_get_next_frame_width,
++ (png_structp png_ptr, png_infop info_ptr));
++PNG_EXPORT(253, png_uint_32, png_get_next_frame_height,
++ (png_structp png_ptr, png_infop info_ptr));
++PNG_EXPORT(254, png_uint_32, png_get_next_frame_x_offset,
++ (png_structp png_ptr, png_infop info_ptr));
++PNG_EXPORT(255, png_uint_32, png_get_next_frame_y_offset,
++ (png_structp png_ptr, png_infop info_ptr));
++PNG_EXPORT(256, png_uint_16, png_get_next_frame_delay_num,
++ (png_structp png_ptr, png_infop info_ptr));
++PNG_EXPORT(257, png_uint_16, png_get_next_frame_delay_den,
++ (png_structp png_ptr, png_infop info_ptr));
++PNG_EXPORT(258, png_byte, png_get_next_frame_dispose_op,
++ (png_structp png_ptr, png_infop info_ptr));
++PNG_EXPORT(259, png_byte, png_get_next_frame_blend_op,
++ (png_structp png_ptr, png_infop info_ptr));
++PNG_EXPORT(260, png_byte, png_get_first_frame_is_hidden,
++ (png_structp png_ptr, png_infop info_ptr));
++PNG_EXPORT(261, png_uint_32, png_set_first_frame_is_hidden,
++ (png_structp png_ptr, png_infop info_ptr, png_byte is_hidden));
+
- if (chunk_name == png_IDAT)
- {
- if ((png_ptr->mode & PNG_AFTER_IDAT) != 0)
-@@ -260,6 +360,9 @@
-
- else if (chunk_name == png_IDAT)
- {
-+#ifdef PNG_READ_APNG_SUPPORTED
-+ png_have_info(png_ptr, info_ptr);
-+#endif
- png_ptr->idat_size = png_ptr->push_length;
- png_ptr->process_mode = PNG_READ_IDAT_MODE;
- png_push_have_info(png_ptr, info_ptr);
-@@ -405,6 +508,30 @@
- png_handle_iTXt(png_ptr, info_ptr, png_ptr->push_length);
- }
- #endif
+#ifdef PNG_READ_APNG_SUPPORTED
-+ else if (chunk_name == png_acTL)
-+ {
-+ if (png_ptr->push_length + 4 > png_ptr->buffer_size)
-+ {
-+ png_push_save_buffer(png_ptr);
-+ return;
-+ }
-+
-+ png_handle_acTL(png_ptr, info_ptr, png_ptr->push_length);
-+ }
++PNG_EXPORT(262, void, png_read_frame_head, (png_structp png_ptr,
++ png_infop info_ptr));
++#ifdef PNG_PROGRESSIVE_READ_SUPPORTED
++PNG_EXPORT(263, void, png_set_progressive_frame_fn, (png_structp png_ptr,
++ png_progressive_frame_ptr frame_info_fn,
++ png_progressive_frame_ptr frame_end_fn));
++#endif /* PROGRESSIVE_READ */
++#endif /* READ_APNG */
+
-+ else if (chunk_name == png_fcTL)
-+ {
-+ if (png_ptr->push_length + 4 > png_ptr->buffer_size)
-+ {
-+ png_push_save_buffer(png_ptr);
-+ return;
-+ }
++#ifdef PNG_WRITE_APNG_SUPPORTED
++PNG_EXPORT(264, void, png_write_frame_head, (png_structp png_ptr,
++ png_infop info_ptr, png_bytepp row_pointers,
++ png_uint_32 width, png_uint_32 height,
++ png_uint_32 x_offset, png_uint_32 y_offset,
++ png_uint_16 delay_num, png_uint_16 delay_den, png_byte dispose_op,
++ png_byte blend_op));
+
-+ png_handle_fcTL(png_ptr, info_ptr, png_ptr->push_length);
-+ }
++PNG_EXPORT(265, void, png_write_frame_tail, (png_structp png_ptr,
++ png_infop info_ptr));
++#endif /* WRITE_APNG */
++#endif /* APNG */
+
-+#endif /* PNG_READ_APNG_SUPPORTED */
-
- else
- {
-@@ -538,7 +665,11 @@
- png_byte chunk_tag[4];
-
- /* TODO: this code can be commoned up with the same code in push_read */
-+#ifdef PNG_READ_APNG_SUPPORTED
-+ PNG_PUSH_SAVE_BUFFER_IF_LT(12)
+ /* Maintainer: Put new public prototypes here ^, in libpng.3, in project
+ * defs, and in scripts/symbols.def.
+ */
+@@ -3254,7 +3353,11 @@
+ * one to use is one more than this.)
+ */
+ #ifdef PNG_EXPORT_LAST_ORDINAL
++#ifdef PNG_APNG_SUPPORTED
++ PNG_EXPORT_LAST_ORDINAL(265);
+#else
- PNG_PUSH_SAVE_BUFFER_IF_LT(8)
-+#endif
- png_push_fill_buffer(png_ptr, chunk_length, 4);
- png_ptr->push_length = png_get_uint_31(png_ptr, chunk_length);
- png_reset_crc(png_ptr);
-@@ -546,17 +677,64 @@
- png_ptr->chunk_name = PNG_CHUNK_FROM_STRING(chunk_tag);
- png_ptr->mode |= PNG_HAVE_CHUNK_HEADER;
+ PNG_EXPORT_LAST_ORDINAL(245);
++#endif /* APNG */
+ #endif
-+#ifdef PNG_READ_APNG_SUPPORTED
-+ if (png_ptr->chunk_name != png_fdAT && png_ptr->num_frames_read > 0)
-+ {
-+ if (png_ptr->flags & PNG_FLAG_ZSTREAM_ENDED)
-+ {
-+ png_ptr->process_mode = PNG_READ_CHUNK_MODE;
-+ if (png_ptr->frame_end_fn != NULL)
-+ (*(png_ptr->frame_end_fn))(png_ptr, png_ptr->num_frames_read);
-+ png_ptr->num_frames_read++;
-+ return;
-+ }
-+ else
-+ {
-+ if (png_ptr->chunk_name == png_IEND)
-+ png_error(png_ptr, "Not enough image data");
-+ if (png_ptr->push_length + 4 > png_ptr->buffer_size)
-+ {
-+ png_push_save_buffer(png_ptr);
-+ return;
-+ }
-+ png_warning(png_ptr, "Skipping (ignoring) a chunk between "
-+ "APNG chunks");
-+ png_crc_finish(png_ptr, png_ptr->push_length);
-+ png_ptr->mode &= ~PNG_HAVE_CHUNK_HEADER;
-+ return;
-+ }
-+ }
-+ else
-+#endif
-+#ifdef PNG_READ_APNG_SUPPORTED
-+ if (png_ptr->chunk_name != png_IDAT && png_ptr->num_frames_read == 0)
-+#else
- if (png_ptr->chunk_name != png_IDAT)
+ #ifdef __cplusplus
+Index: pngpriv.h
+===================================================================
+--- pngpriv.h
++++ pngpriv.h
+@@ -566,6 +566,10 @@
+ #define PNG_HAVE_CHUNK_AFTER_IDAT 0x2000 /* Have another chunk after IDAT */
+ /* 0x4000 (unused) */
+ #define PNG_IS_READ_STRUCT 0x8000 /* Else is a write struct */
++#ifdef PNG_APNG_SUPPORTED
++#define PNG_HAVE_acTL 0x10000
++#define PNG_HAVE_fcTL 0x20000
+#endif
- {
- png_ptr->process_mode = PNG_READ_CHUNK_MODE;
-
- if ((png_ptr->flags & PNG_FLAG_ZSTREAM_ENDED) == 0)
- png_error(png_ptr, "Not enough compressed data");
-+#ifdef PNG_READ_APNG_SUPPORTED
-+ if (png_ptr->frame_end_fn != NULL)
-+ (*(png_ptr->frame_end_fn))(png_ptr, png_ptr->num_frames_read);
-+ png_ptr->num_frames_read++;
-+#endif
-+
- return;
- }
+ /* Flags for the transformations the PNG library does on the image data */
+ #define PNG_BGR 0x0001
+@@ -783,6 +787,16 @@
+ #define png_tRNS PNG_U32(116, 82, 78, 83)
+ #define png_zTXt PNG_U32(122, 84, 88, 116)
- png_ptr->idat_size = png_ptr->push_length;
++#ifdef PNG_APNG_SUPPORTED
++#define png_acTL PNG_U32( 97, 99, 84, 76)
++#define png_fcTL PNG_U32(102, 99, 84, 76)
++#define png_fdAT PNG_U32(102, 100, 65, 84)
+
-+#ifdef PNG_READ_APNG_SUPPORTED
-+ if (png_ptr->num_frames_read > 0)
-+ {
-+ png_ensure_sequence_number(png_ptr, 4);
-+ png_ptr->idat_size -= 4;
-+ }
++/* For png_struct.apng_flags: */
++#define PNG_FIRST_FRAME_HIDDEN 0x0001
++#define PNG_APNG_APP 0x0002
+#endif
- }
++
+ /* The following will work on (signed char*) strings, whereas the get_uint_32
+ * macro will fail on top-bit-set values because of the sign extension.
+ */
+@@ -1489,6 +1503,49 @@
- if (png_ptr->idat_size != 0 && png_ptr->save_buffer_size != 0)
-@@ -630,6 +808,15 @@
- if (!(buffer_length > 0) || buffer == NULL)
- png_error(png_ptr, "No IDAT data (internal error)");
+ #endif /* PROGRESSIVE_READ */
++#ifdef PNG_APNG_SUPPORTED
++PNG_INTERNAL_FUNCTION(void,png_ensure_fcTL_is_valid,(png_structp png_ptr,
++ png_uint_32 width, png_uint_32 height,
++ png_uint_32 x_offset, png_uint_32 y_offset,
++ png_uint_16 delay_num, png_uint_16 delay_den,
++ png_byte dispose_op, png_byte blend_op),PNG_EMPTY);
++
+#ifdef PNG_READ_APNG_SUPPORTED
-+ /* If the app is not APNG-aware, decode only the first frame */
-+ if (!(png_ptr->apng_flags & PNG_APNG_APP) && png_ptr->num_frames_read > 0)
-+ {
-+ png_ptr->flags |= PNG_FLAG_ZSTREAM_ENDED;
-+ return;
-+ }
-+#endif
-+
- /* This routine must process all the data it has been given
- * before returning, calling the row callback as required to
- * handle the uncompressed results.
-@@ -1079,6 +1266,18 @@
- png_set_read_fn(png_ptr, progressive_ptr, png_push_fill_buffer);
- }
-
-+#ifdef PNG_READ_APNG_SUPPORTED
-+void PNGAPI
-+png_set_progressive_frame_fn(png_structp png_ptr,
-+ png_progressive_frame_ptr frame_info_fn,
-+ png_progressive_frame_ptr frame_end_fn)
-+{
-+ png_ptr->frame_info_fn = frame_info_fn;
-+ png_ptr->frame_end_fn = frame_end_fn;
-+ png_ptr->apng_flags |= PNG_APNG_APP;
-+}
-+#endif
-+
- png_voidp PNGAPI
- png_get_progressive_ptr(png_const_structrp png_ptr)
- {
-diff -Naru libpng-1.6.23.org/pngpriv.h libpng-1.6.23/pngpriv.h
---- libpng-1.6.23.org/pngpriv.h 2016-06-09 22:23:09.754041902 +0900
-+++ libpng-1.6.23/pngpriv.h 2016-06-09 22:23:39.245105032 +0900
-@@ -537,6 +537,10 @@
- #define PNG_HAVE_CHUNK_AFTER_IDAT 0x2000 /* Have another chunk after IDAT */
- /* 0x4000 (unused) */
- #define PNG_IS_READ_STRUCT 0x8000 /* Else is a write struct */
-+#ifdef PNG_APNG_SUPPORTED
-+#define PNG_HAVE_acTL 0x10000
-+#define PNG_HAVE_fcTL 0x20000
-+#endif
-
- /* Flags for the transformations the PNG library does on the image data */
- #define PNG_BGR 0x0001
-@@ -754,6 +758,16 @@
- #define png_tRNS PNG_U32(116, 82, 78, 83)
- #define png_zTXt PNG_U32(122, 84, 88, 116)
-
-+#ifdef PNG_APNG_SUPPORTED
-+#define png_acTL PNG_U32( 97, 99, 84, 76)
-+#define png_fcTL PNG_U32(102, 99, 84, 76)
-+#define png_fdAT PNG_U32(102, 100, 65, 84)
-+
-+/* For png_struct.apng_flags: */
-+#define PNG_FIRST_FRAME_HIDDEN 0x0001
-+#define PNG_APNG_APP 0x0002
-+#endif
-+
- /* The following will work on (signed char*) strings, whereas the get_uint_32
- * macro will fail on top-bit-set values because of the sign extension.
- */
-@@ -1461,6 +1475,47 @@
- */
- #endif
-
-+#ifdef PNG_APNG_SUPPORTED
-+PNG_INTERNAL_FUNCTION(void,png_ensure_fcTL_is_valid,(png_structp png_ptr,
-+ png_uint_32 width, png_uint_32 height,
-+ png_uint_32 x_offset, png_uint_32 y_offset,
-+ png_uint_16 delay_num, png_uint_16 delay_den,
-+ png_byte dispose_op, png_byte blend_op), PNG_EMPTY);
-+
-+#ifdef PNG_READ_APNG_SUPPORTED
-+PNG_INTERNAL_FUNCTION(void,png_handle_acTL,(png_structp png_ptr, png_infop info_ptr,
-+ png_uint_32 length),PNG_EMPTY);
-+PNG_INTERNAL_FUNCTION(void,png_handle_fcTL,(png_structp png_ptr, png_infop info_ptr,
-+ png_uint_32 length),PNG_EMPTY);
-+PNG_INTERNAL_FUNCTION(void,png_handle_fdAT,(png_structp png_ptr, png_infop info_ptr,
-+ png_uint_32 length),PNG_EMPTY);
-+PNG_INTERNAL_FUNCTION(void,png_have_info,(png_structp png_ptr, png_infop info_ptr),PNG_EMPTY);
++PNG_INTERNAL_FUNCTION(void,png_handle_acTL,(png_structp png_ptr,
++ png_infop info_ptr, png_uint_32 length),PNG_EMPTY);
++PNG_INTERNAL_FUNCTION(void,png_handle_fcTL,(png_structp png_ptr,
++ png_infop info_ptr, png_uint_32 length),PNG_EMPTY);
++PNG_INTERNAL_FUNCTION(void,png_handle_fdAT,(png_structp png_ptr,
++ png_infop info_ptr, png_uint_32 length),PNG_EMPTY);
++PNG_INTERNAL_FUNCTION(void,png_have_info,(png_structp png_ptr,
++ png_infop info_ptr),PNG_EMPTY);
+PNG_INTERNAL_FUNCTION(void,png_ensure_sequence_number,(png_structp png_ptr,
+ png_uint_32 length),PNG_EMPTY);
+PNG_INTERNAL_FUNCTION(void,png_read_reset,(png_structp png_ptr),PNG_EMPTY);
+PNG_INTERNAL_FUNCTION(void,png_read_reinit,(png_structp png_ptr,
+ png_infop info_ptr),PNG_EMPTY);
+#ifdef PNG_PROGRESSIVE_READ_SUPPORTED
-+PNG_INTERNAL_FUNCTION(void,png_progressive_read_reset,(png_structp png_ptr),PNG_EMPTY);
-+#endif /* PNG_PROGRESSIVE_READ_SUPPORTED */
-+#endif /* PNG_READ_APNG_SUPPORTED */
++PNG_INTERNAL_FUNCTION(void,png_progressive_read_reset,(png_structp png_ptr),
++ PNG_EMPTY);
++#endif /* PROGRESSIVE_READ */
++#endif /* READ_APNG */
+
+#ifdef PNG_WRITE_APNG_SUPPORTED
+PNG_INTERNAL_FUNCTION(void,png_write_acTL,(png_structp png_ptr,
@@ -667,453 +565,375 @@ diff -Naru libpng-1.6.23.org/pngpriv.h libpng-1.6.23/pngpriv.h
+PNG_INTERNAL_FUNCTION(void,png_write_reset,(png_structp png_ptr),PNG_EMPTY);
+PNG_INTERNAL_FUNCTION(void,png_write_reinit,(png_structp png_ptr,
+ png_infop info_ptr, png_uint_32 width, png_uint_32 height),PNG_EMPTY);
-+#endif /* PNG_WRITE_APNG_SUPPORTED */
-+#endif /* PNG_APNG_SUPPORTED */
-+
- /* Added at libpng version 1.4.0 */
- #ifdef PNG_COLORSPACE_SUPPORTED
- /* These internal functions are for maintaining the colorspace structure within
-diff -Naru libpng-1.6.23.org/pngread.c libpng-1.6.23/pngread.c
---- libpng-1.6.23.org/pngread.c 2016-06-09 22:23:09.755041938 +0900
-+++ libpng-1.6.23/pngread.c 2016-06-09 22:23:39.247105104 +0900
-@@ -161,6 +161,9 @@
++#endif /* WRITE_APNG */
++#endif /* APNG */
++
+ /* Added at libpng version 1.6.0 */
+ #ifdef PNG_GAMMA_SUPPORTED
+ PNG_INTERNAL_FUNCTION(void,png_colorspace_set_gamma,(png_const_structrp png_ptr,
+Index: pnginfo.h
+===================================================================
+--- pnginfo.h
++++ pnginfo.h
+@@ -255,5 +255,18 @@
+ png_bytepp row_pointers; /* the image bits */
+ #endif
- else if (chunk_name == png_IDAT)
- {
-+#ifdef PNG_READ_APNG_SUPPORTED
-+ png_have_info(png_ptr, info_ptr);
++#ifdef PNG_APNG_SUPPORTED
++ png_uint_32 num_frames; /* including default image */
++ png_uint_32 num_plays;
++ png_uint_32 next_frame_width;
++ png_uint_32 next_frame_height;
++ png_uint_32 next_frame_x_offset;
++ png_uint_32 next_frame_y_offset;
++ png_uint_16 next_frame_delay_num;
++ png_uint_16 next_frame_delay_den;
++ png_byte next_frame_dispose_op;
++ png_byte next_frame_blend_op;
+#endif
- png_ptr->idat_size = length;
- break;
- }
-@@ -250,6 +253,17 @@
- png_handle_iTXt(png_ptr, info_ptr, length);
++
+ };
+ #endif /* PNGINFO_H */
+Index: pngstruct.h
+===================================================================
+--- pngstruct.h
++++ pngstruct.h
+@@ -403,6 +403,27 @@
+ png_byte filter_type;
#endif
-+#ifdef PNG_READ_APNG_SUPPORTED
-+ else if (chunk_name == png_acTL)
-+ png_handle_acTL(png_ptr, info_ptr, length);
++#ifdef PNG_APNG_SUPPORTED
++ png_uint_32 apng_flags;
++ png_uint_32 next_seq_num; /* next fcTL/fdAT chunk sequence number */
++ png_uint_32 first_frame_width;
++ png_uint_32 first_frame_height;
+
-+ else if (chunk_name == png_fcTL)
-+ png_handle_fcTL(png_ptr, info_ptr, length);
++#ifdef PNG_READ_APNG_SUPPORTED
++ png_uint_32 num_frames_read; /* incremented after all image data of */
++ /* a frame is read */
++#ifdef PNG_PROGRESSIVE_READ_SUPPORTED
++ png_progressive_frame_ptr frame_info_fn; /* frame info read callback */
++ png_progressive_frame_ptr frame_end_fn; /* frame data read callback */
++#endif
++#endif
+
-+ else if (chunk_name == png_fdAT)
-+ png_handle_fdAT(png_ptr, info_ptr, length);
++#ifdef PNG_WRITE_APNG_SUPPORTED
++ png_uint_32 num_frames_to_write;
++ png_uint_32 num_frames_written;
+#endif
++#endif /* APNG */
+
- else
- png_handle_unknown(png_ptr, info_ptr, length,
- PNG_HANDLE_CHUNK_AS_DEFAULT);
-@@ -257,6 +271,72 @@
- }
- #endif /* SEQUENTIAL_READ */
+ /* New members added in libpng-1.2.0 */
-+#ifdef PNG_READ_APNG_SUPPORTED
-+void PNGAPI
-+png_read_frame_head(png_structp png_ptr, png_infop info_ptr)
-+{
-+ png_byte have_chunk_after_DAT; /* after IDAT or after fdAT */
-+
-+ png_debug(0, "Reading frame head");
-+
-+ if (!(png_ptr->mode & PNG_HAVE_acTL))
-+ png_error(png_ptr, "attempt to png_read_frame_head() but "
-+ "no acTL present");
-+
-+ /* do nothing for the main IDAT */
-+ if (png_ptr->num_frames_read == 0)
-+ return;
-+
-+ png_read_reset(png_ptr);
-+ png_ptr->flags &= ~PNG_FLAG_ROW_INIT;
-+ png_ptr->mode &= ~PNG_HAVE_fcTL;
-+
-+ have_chunk_after_DAT = 0;
-+ for (;;)
-+ {
-+ png_uint_32 length = png_read_chunk_header(png_ptr);
-+
-+ if (png_ptr->chunk_name == png_IDAT)
-+ {
-+ /* discard trailing IDATs for the first frame */
-+ if (have_chunk_after_DAT || png_ptr->num_frames_read > 1)
-+ png_error(png_ptr, "png_read_frame_head(): out of place IDAT");
-+ png_crc_finish(png_ptr, length);
-+ }
-+
-+ else if (png_ptr->chunk_name == png_fcTL)
-+ {
-+ png_handle_fcTL(png_ptr, info_ptr, length);
-+ have_chunk_after_DAT = 1;
-+ }
-+
-+ else if (png_ptr->chunk_name == png_fdAT)
-+ {
-+ png_ensure_sequence_number(png_ptr, length);
-+
-+ /* discard trailing fdATs for frames other than the first */
-+ if (!have_chunk_after_DAT && png_ptr->num_frames_read > 1)
-+ png_crc_finish(png_ptr, length - 4);
-+ else if(png_ptr->mode & PNG_HAVE_fcTL)
-+ {
-+ png_ptr->idat_size = length - 4;
-+ png_ptr->mode |= PNG_HAVE_IDAT;
-+
-+ break;
-+ }
-+ else
-+ png_error(png_ptr, "png_read_frame_head(): out of place fdAT");
-+ }
-+ else
-+ {
-+ png_warning(png_ptr, "Skipped (ignored) a chunk "
-+ "between APNG chunks");
-+ png_crc_finish(png_ptr, length);
-+ }
-+ }
-+}
-+#endif /* PNG_READ_APNG_SUPPORTED */
-+
- /* Optional call to update the users info_ptr structure */
- void PNGAPI
- png_read_update_info(png_structrp png_ptr, png_inforp info_ptr)
-diff -Naru libpng-1.6.23.org/pngrutil.c libpng-1.6.23/pngrutil.c
---- libpng-1.6.23.org/pngrutil.c 2016-06-09 22:21:54.210320245 +0900
-+++ libpng-1.6.23/pngrutil.c 2016-06-09 22:23:39.249105176 +0900
-@@ -855,6 +855,11 @@
- filter_type = buf[11];
- interlace_type = buf[12];
+ /* New members added in libpng-1.0.2 but first enabled by default in 1.2.0 */
+Index: pngwrite.c
+===================================================================
+--- pngwrite.c
++++ pngwrite.c
+@@ -128,6 +128,10 @@
+ * the application continues writing the PNG. So check the 'invalid'
+ * flag here too.
+ */
++#ifdef PNG_WRITE_APNG_SUPPORTED
++ if ((info_ptr->valid & PNG_INFO_acTL) != 0)
++ png_write_acTL(png_ptr, info_ptr->num_frames, info_ptr->num_plays);
++#endif
+ #ifdef PNG_GAMMA_SUPPORTED
+ # ifdef PNG_WRITE_gAMA_SUPPORTED
+ if ((info_ptr->colorspace.flags & PNG_COLORSPACE_INVALID) == 0 &&
+@@ -360,6 +364,11 @@
+ if ((png_ptr->mode & PNG_HAVE_IDAT) == 0)
+ png_error(png_ptr, "No IDATs written into file");
-+#ifdef PNG_READ_APNG_SUPPORTED
-+ png_ptr->first_frame_width = width;
-+ png_ptr->first_frame_height = height;
++#ifdef PNG_WRITE_APNG_SUPPORTED
++ if (png_ptr->num_frames_written != png_ptr->num_frames_to_write)
++ png_error(png_ptr, "Not enough frames written");
+#endif
+
- /* Set internal variables */
- png_ptr->width = width;
- png_ptr->height = height;
-@@ -2755,6 +2760,179 @@
+ #ifdef PNG_WRITE_CHECK_FOR_INVALID_INDEX_SUPPORTED
+ if (png_ptr->num_palette_max > png_ptr->num_palette)
+ png_benign_error(png_ptr, "Wrote palette index exceeding num_palette");
+@@ -2380,4 +2389,42 @@
}
- #endif
-
-+#ifdef PNG_READ_APNG_SUPPORTED
-+void /* PRIVATE */
-+png_handle_acTL(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
-+{
-+ png_byte data[8];
-+ png_uint_32 num_frames;
-+ png_uint_32 num_plays;
-+ png_uint_32 didSet;
-+
-+ png_debug(1, "in png_handle_acTL");
-+
-+ if (!(png_ptr->mode & PNG_HAVE_IHDR))
-+ {
-+ png_error(png_ptr, "Missing IHDR before acTL");
-+ }
-+ else if (png_ptr->mode & PNG_HAVE_IDAT)
-+ {
-+ png_warning(png_ptr, "Invalid acTL after IDAT skipped");
-+ png_crc_finish(png_ptr, length);
-+ return;
-+ }
-+ else if (png_ptr->mode & PNG_HAVE_acTL)
-+ {
-+ png_warning(png_ptr, "Duplicate acTL skipped");
-+ png_crc_finish(png_ptr, length);
-+ return;
-+ }
-+ else if (length != 8)
-+ {
-+ png_warning(png_ptr, "acTL with invalid length skipped");
-+ png_crc_finish(png_ptr, length);
-+ return;
-+ }
-+
-+ png_crc_read(png_ptr, data, 8);
-+ png_crc_finish(png_ptr, 0);
+ #endif /* SIMPLIFIED_WRITE_STDIO */
+ #endif /* SIMPLIFIED_WRITE */
+
-+ num_frames = png_get_uint_31(png_ptr, data);
-+ num_plays = png_get_uint_31(png_ptr, data + 4);
-+
-+ /* the set function will do error checking on num_frames */
-+ didSet = png_set_acTL(png_ptr, info_ptr, num_frames, num_plays);
-+ if(didSet)
-+ png_ptr->mode |= PNG_HAVE_acTL;
-+}
-+
-+void /* PRIVATE */
-+png_handle_fcTL(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
-+{
-+ png_byte data[22];
-+ png_uint_32 width;
-+ png_uint_32 height;
-+ png_uint_32 x_offset;
-+ png_uint_32 y_offset;
-+ png_uint_16 delay_num;
-+ png_uint_16 delay_den;
-+ png_byte dispose_op;
-+ png_byte blend_op;
-+
-+ png_debug(1, "in png_handle_fcTL");
-+
-+ png_ensure_sequence_number(png_ptr, length);
-+
-+ if (!(png_ptr->mode & PNG_HAVE_IHDR))
-+ {
-+ png_error(png_ptr, "Missing IHDR before fcTL");
-+ }
-+ else if (png_ptr->mode & PNG_HAVE_IDAT)
-+ {
-+ /* for any frames other then the first this message may be misleading,
-+ * but correct. PNG_HAVE_IDAT is unset before the frame head is read
-+ * i can't think of a better message */
-+ png_warning(png_ptr, "Invalid fcTL after IDAT skipped");
-+ png_crc_finish(png_ptr, length-4);
-+ return;
-+ }
-+ else if (png_ptr->mode & PNG_HAVE_fcTL)
-+ {
-+ png_warning(png_ptr, "Duplicate fcTL within one frame skipped");
-+ png_crc_finish(png_ptr, length-4);
-+ return;
-+ }
-+ else if (length != 26)
-+ {
-+ png_warning(png_ptr, "fcTL with invalid length skipped");
-+ png_crc_finish(png_ptr, length-4);
-+ return;
-+ }
-+
-+ png_crc_read(png_ptr, data, 22);
-+ png_crc_finish(png_ptr, 0);
-+
-+ width = png_get_uint_31(png_ptr, data);
-+ height = png_get_uint_31(png_ptr, data + 4);
-+ x_offset = png_get_uint_31(png_ptr, data + 8);
-+ y_offset = png_get_uint_31(png_ptr, data + 12);
-+ delay_num = png_get_uint_16(data + 16);
-+ delay_den = png_get_uint_16(data + 18);
-+ dispose_op = data[20];
-+ blend_op = data[21];
-+
-+ if (png_ptr->num_frames_read == 0 && (x_offset != 0 || y_offset != 0))
-+ {
-+ png_warning(png_ptr, "fcTL for the first frame must have zero offset");
-+ return;
-+ }
-+
-+ if (info_ptr != NULL)
-+ {
-+ if (png_ptr->num_frames_read == 0 &&
-+ (width != info_ptr->width || height != info_ptr->height))
-+ {
-+ png_warning(png_ptr, "size in first frame's fcTL must match "
-+ "the size in IHDR");
-+ return;
-+ }
++#ifdef PNG_WRITE_APNG_SUPPORTED
++void PNGAPI
++png_write_frame_head(png_structp png_ptr, png_infop info_ptr,
++ png_bytepp row_pointers, png_uint_32 width, png_uint_32 height,
++ png_uint_32 x_offset, png_uint_32 y_offset,
++ png_uint_16 delay_num, png_uint_16 delay_den, png_byte dispose_op,
++ png_byte blend_op)
++{
++ png_debug(1, "in png_write_frame_head");
+
-+ /* The set function will do more error checking */
-+ png_set_next_frame_fcTL(png_ptr, info_ptr, width, height,
-+ x_offset, y_offset, delay_num, delay_den,
-+ dispose_op, blend_op);
++ /* there is a chance this has been set after png_write_info was called,
++ * so it would be set but not written. is there a way to be sure? */
++ if ((info_ptr->valid & PNG_INFO_acTL) == 0)
++ png_error(png_ptr, "png_write_frame_head(): acTL not set");
+
-+ png_read_reinit(png_ptr, info_ptr);
++ png_write_reset(png_ptr);
+
-+ png_ptr->mode |= PNG_HAVE_fcTL;
-+ }
-+}
++ png_write_reinit(png_ptr, info_ptr, width, height);
+
-+void /* PRIVATE */
-+png_have_info(png_structp png_ptr, png_infop info_ptr)
-+{
-+ if((info_ptr->valid & PNG_INFO_acTL) && !(info_ptr->valid & PNG_INFO_fcTL))
-+ {
-+ png_ptr->apng_flags |= PNG_FIRST_FRAME_HIDDEN;
-+ info_ptr->num_frames++;
-+ }
++ if ((png_ptr->apng_flags & PNG_FIRST_FRAME_HIDDEN) == 0 ||
++ png_ptr->num_frames_written != 0)
++ png_write_fcTL(png_ptr, width, height, x_offset, y_offset,
++ delay_num, delay_den, dispose_op, blend_op);
++
++ PNG_UNUSED(row_pointers)
+}
+
-+void /* PRIVATE */
-+png_handle_fdAT(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
++void PNGAPI
++png_write_frame_tail(png_structp png_ptr, png_infop info_ptr)
+{
-+ png_ensure_sequence_number(png_ptr, length);
++ png_debug(1, "in png_write_frame_tail");
++
++ png_ptr->num_frames_written++;
+
-+ /* This function is only called from png_read_end(), png_read_info(),
-+ * and png_push_read_chunk() which means that:
-+ * - the user doesn't want to read this frame
-+ * - or this is an out-of-place fdAT
-+ * in either case it is safe to ignore the chunk with a warning */
-+ png_warning(png_ptr, "ignoring fdAT chunk");
-+ png_crc_finish(png_ptr, length - 4);
+ PNG_UNUSED(info_ptr)
+}
++#endif /* WRITE_APNG */
+ #endif /* WRITE */
+Index: pngpread.c
+===================================================================
+--- pngpread.c
++++ pngpread.c
+@@ -194,6 +194,89 @@
+
+ chunk_name = png_ptr->chunk_name;
+
++#ifdef PNG_READ_APNG_SUPPORTED
++ if (png_ptr->num_frames_read > 0 &&
++ png_ptr->num_frames_read < info_ptr->num_frames)
++ {
++ if (chunk_name == png_IDAT)
++ {
++ /* Discard trailing IDATs for the first frame */
++ if ((png_ptr->mode & PNG_HAVE_fcTL) != 0 ||
++ png_ptr->num_frames_read > 1)
++ png_error(png_ptr, "out of place IDAT");
+
-+void /* PRIVATE */
-+png_ensure_sequence_number(png_structp png_ptr, png_uint_32 length)
-+{
-+ png_byte data[4];
-+ png_uint_32 sequence_number;
++ PNG_PUSH_SAVE_BUFFER_IF_FULL
++ png_crc_finish(png_ptr, png_ptr->push_length);
++ png_ptr->mode &= ~PNG_HAVE_CHUNK_HEADER;
++ }
+
-+ if (length < 4)
-+ png_error(png_ptr, "invalid fcTL or fdAT chunk found");
++ else if (chunk_name == png_fdAT)
++ {
++ PNG_PUSH_SAVE_BUFFER_IF_LT(4)
++ png_ensure_sequence_number(png_ptr, 4);
+
-+ png_crc_read(png_ptr, data, 4);
-+ sequence_number = png_get_uint_31(png_ptr, data);
++ if ((png_ptr->mode & PNG_HAVE_fcTL) == 0)
++ {
++ /* Discard trailing fdATs for frames other than the first */
++ if (png_ptr->num_frames_read < 2)
++ png_error(png_ptr, "out of place fdAT");
+
-+ if (sequence_number != png_ptr->next_seq_num)
-+ png_error(png_ptr, "fcTL or fdAT chunk with out-of-order sequence "
-+ "number found");
++ PNG_PUSH_SAVE_BUFFER_IF_FULL
++ png_crc_finish(png_ptr, png_ptr->push_length);
++ png_ptr->mode &= ~PNG_HAVE_CHUNK_HEADER;
++ }
+
-+ png_ptr->next_seq_num++;
-+}
-+#endif /* PNG_READ_APNG_SUPPORTED */
++ else
++ {
++ /* frame data follows */
++ png_ptr->idat_size = png_ptr->push_length - 4;
++ png_ptr->mode |= PNG_HAVE_IDAT;
++ png_ptr->process_mode = PNG_READ_IDAT_MODE;
++ }
++ }
+
- #ifdef PNG_READ_UNKNOWN_CHUNKS_SUPPORTED
- /* Utility function for png_handle_unknown; set up png_ptr::unknown_chunk */
- static int
-@@ -4013,7 +4191,38 @@
- {
- uInt avail_in;
- png_bytep buffer;
-+#ifdef PNG_READ_APNG_SUPPORTED
-+ png_uint_32 bytes_to_skip = 0;
++ else if (chunk_name == png_fcTL)
++ {
++ PNG_PUSH_SAVE_BUFFER_IF_FULL
++ png_read_reset(png_ptr);
++ png_ptr->mode &= ~PNG_HAVE_fcTL;
+
-+ while (png_ptr->idat_size == 0 || bytes_to_skip != 0)
-+ {
-+ png_crc_finish(png_ptr, bytes_to_skip);
-+ bytes_to_skip = 0;
++ png_handle_fcTL(png_ptr, info_ptr, png_ptr->push_length);
+
-+ png_ptr->idat_size = png_read_chunk_header(png_ptr);
-+ if (png_ptr->num_frames_read == 0)
-+ {
-+ if (png_ptr->chunk_name != png_IDAT)
-+ png_error(png_ptr, "Not enough image data");
-+ }
-+ else
-+ {
-+ if (png_ptr->chunk_name == png_IEND)
-+ png_error(png_ptr, "Not enough image data");
-+ if (png_ptr->chunk_name != png_fdAT)
-+ {
-+ png_warning(png_ptr, "Skipped (ignored) a chunk "
-+ "between APNG chunks");
-+ bytes_to_skip = png_ptr->idat_size;
-+ continue;
-+ }
++ if ((png_ptr->mode & PNG_HAVE_fcTL) == 0)
++ png_error(png_ptr, "missing required fcTL chunk");
++
++ png_read_reinit(png_ptr, info_ptr);
++ png_progressive_read_reset(png_ptr);
++
++ if (png_ptr->frame_info_fn != NULL)
++ (*(png_ptr->frame_info_fn))(png_ptr, png_ptr->num_frames_read);
++
++ png_ptr->mode &= ~PNG_HAVE_CHUNK_HEADER;
++ }
++
++ else if (chunk_name == png_IEND)
++ {
++ PNG_PUSH_SAVE_BUFFER_IF_FULL
++ png_warning(png_ptr, "Number of actual frames fewer than expected");
++ png_crc_finish(png_ptr, png_ptr->push_length);
++ png_ptr->process_mode = PNG_READ_DONE_MODE;
++ png_push_have_end(png_ptr, info_ptr);
++ }
++
++ else
++ {
++ PNG_PUSH_SAVE_BUFFER_IF_FULL
++ png_warning(png_ptr, "Skipped (ignored) a chunk "
++ "between APNG chunks");
++ png_crc_finish(png_ptr, png_ptr->push_length);
++ png_ptr->mode &= ~PNG_HAVE_CHUNK_HEADER;
++ }
++
++ return;
++ }
++#endif /* READ_APNG */
++
+ if (chunk_name == png_IDAT)
+ {
+ if ((png_ptr->mode & PNG_AFTER_IDAT) != 0)
+@@ -260,6 +343,9 @@
-+ png_ensure_sequence_number(png_ptr, png_ptr->idat_size);
+ else if (chunk_name == png_IDAT)
+ {
++#ifdef PNG_READ_APNG_SUPPORTED
++ png_have_info(png_ptr, info_ptr);
++#endif
+ png_ptr->idat_size = png_ptr->push_length;
+ png_ptr->process_mode = PNG_READ_IDAT_MODE;
+ png_push_have_info(png_ptr, info_ptr);
+@@ -406,6 +492,20 @@
+ }
+ #endif
+
++#ifdef PNG_READ_APNG_SUPPORTED
++ else if (chunk_name == png_acTL)
++ {
++ PNG_PUSH_SAVE_BUFFER_IF_FULL
++ png_handle_acTL(png_ptr, info_ptr, png_ptr->push_length);
++ }
+
-+ png_ptr->idat_size -= 4;
-+ }
-+ }
++ else if (chunk_name == png_fcTL)
++ {
++ PNG_PUSH_SAVE_BUFFER_IF_FULL
++ png_handle_fcTL(png_ptr, info_ptr, png_ptr->push_length);
++ }
++
++#endif /* READ_APNG */
+ else
+ {
+ PNG_PUSH_SAVE_BUFFER_IF_FULL
+@@ -538,7 +638,11 @@
+ png_byte chunk_tag[4];
+
+ /* TODO: this code can be commoned up with the same code in push_read */
++#ifdef PNG_READ_APNG_SUPPORTED
++ PNG_PUSH_SAVE_BUFFER_IF_LT(12)
+#else
- while (png_ptr->idat_size == 0)
- {
- png_crc_finish(png_ptr, 0);
-@@ -4025,7 +4234,7 @@
- if (png_ptr->chunk_name != png_IDAT)
- png_error(png_ptr, "Not enough image data");
- }
--
-+#endif /* PNG_READ_APNG_SUPPORTED */
- avail_in = png_ptr->IDAT_read_size;
+ PNG_PUSH_SAVE_BUFFER_IF_LT(8)
++#endif
+ png_push_fill_buffer(png_ptr, chunk_length, 4);
+ png_ptr->push_length = png_get_uint_31(png_ptr, chunk_length);
+ png_reset_crc(png_ptr);
+@@ -546,17 +650,60 @@
+ png_ptr->chunk_name = PNG_CHUNK_FROM_STRING(chunk_tag);
+ png_ptr->mode |= PNG_HAVE_CHUNK_HEADER;
+
++#ifdef PNG_READ_APNG_SUPPORTED
++ if (png_ptr->chunk_name != png_fdAT && png_ptr->num_frames_read > 0)
++ {
++ if ((png_ptr->flags & PNG_FLAG_ZSTREAM_ENDED) != 0)
++ {
++ png_ptr->process_mode = PNG_READ_CHUNK_MODE;
++ if (png_ptr->frame_end_fn != NULL)
++ (*(png_ptr->frame_end_fn))(png_ptr, png_ptr->num_frames_read);
++ png_ptr->num_frames_read++;
++ return;
++ }
++ else
++ {
++ if (png_ptr->chunk_name == png_IEND)
++ png_error(png_ptr, "Not enough image data");
++ PNG_PUSH_SAVE_BUFFER_IF_FULL
++ png_warning(png_ptr, "Skipping (ignoring) a chunk between "
++ "APNG chunks");
++ png_crc_finish(png_ptr, png_ptr->push_length);
++ png_ptr->mode &= ~PNG_HAVE_CHUNK_HEADER;
++ return;
++ }
++ }
++ else
++#endif
++#ifdef PNG_READ_APNG_SUPPORTED
++ if (png_ptr->chunk_name != png_IDAT && png_ptr->num_frames_read == 0)
++#else
+ if (png_ptr->chunk_name != png_IDAT)
++#endif
+ {
+ png_ptr->process_mode = PNG_READ_CHUNK_MODE;
- if (avail_in > png_ptr->idat_size)
-@@ -4088,6 +4297,9 @@
+ if ((png_ptr->flags & PNG_FLAG_ZSTREAM_ENDED) == 0)
+ png_error(png_ptr, "Not enough compressed data");
- png_ptr->mode |= PNG_AFTER_IDAT;
- png_ptr->flags |= PNG_FLAG_ZSTREAM_ENDED;
+#ifdef PNG_READ_APNG_SUPPORTED
++ if (png_ptr->frame_end_fn != NULL)
++ (*(png_ptr->frame_end_fn))(png_ptr, png_ptr->num_frames_read);
+ png_ptr->num_frames_read++;
+#endif
-
- if (png_ptr->zstream.avail_in > 0 || png_ptr->idat_size > 0)
- png_chunk_benign_error(png_ptr, "Extra compressed data");
-@@ -4526,4 +4738,80 @@
-
- png_ptr->flags |= PNG_FLAG_ROW_INIT;
- }
+
+ return;
+ }
+
+ png_ptr->idat_size = png_ptr->push_length;
++
++#ifdef PNG_READ_APNG_SUPPORTED
++ if (png_ptr->num_frames_read > 0)
++ {
++ png_ensure_sequence_number(png_ptr, 4);
++ png_ptr->idat_size -= 4;
++ }
++#endif
+ }
+
+ if (png_ptr->idat_size != 0 && png_ptr->save_buffer_size != 0)
+@@ -630,6 +777,16 @@
+ if (!(buffer_length > 0) || buffer == NULL)
+ png_error(png_ptr, "No IDAT data (internal error)");
+
++#ifdef PNG_READ_APNG_SUPPORTED
++ /* If the app is not APNG-aware, decode only the first frame */
++ if ((png_ptr->apng_flags & PNG_APNG_APP) == 0 &&
++ png_ptr->num_frames_read > 0)
++ {
++ png_ptr->flags |= PNG_FLAG_ZSTREAM_ENDED;
++ return;
++ }
++#endif
++
+ /* This routine must process all the data it has been given
+ * before returning, calling the row callback as required to
+ * handle the uncompressed results.
+@@ -1079,6 +1236,18 @@
+ png_set_read_fn(png_ptr, progressive_ptr, png_push_fill_buffer);
+ }
+
+#ifdef PNG_READ_APNG_SUPPORTED
-+/* This function is to be called after the main IDAT set has been read and
-+ * before a new IDAT is read. It resets some parts of png_ptr
-+ * to make them usable by the read functions again */
-+void /* PRIVATE */
-+png_read_reset(png_structp png_ptr)
-+{
-+ png_ptr->mode &= ~PNG_HAVE_IDAT;
-+ png_ptr->mode &= ~PNG_AFTER_IDAT;
-+ png_ptr->row_number = 0;
-+ png_ptr->pass = 0;
-+}
-+
-+void /* PRIVATE */
-+png_read_reinit(png_structp png_ptr, png_infop info_ptr)
++void PNGAPI
++png_set_progressive_frame_fn(png_structp png_ptr,
++ png_progressive_frame_ptr frame_info_fn,
++ png_progressive_frame_ptr frame_end_fn)
+{
-+ png_ptr->width = info_ptr->next_frame_width;
-+ png_ptr->height = info_ptr->next_frame_height;
-+ png_ptr->rowbytes = PNG_ROWBYTES(png_ptr->pixel_depth,png_ptr->width);
-+ png_ptr->info_rowbytes = PNG_ROWBYTES(info_ptr->pixel_depth,
-+ png_ptr->width);
-+ if (png_ptr->prev_row)
-+ memset(png_ptr->prev_row, 0, png_ptr->rowbytes + 1);
++ png_ptr->frame_info_fn = frame_info_fn;
++ png_ptr->frame_end_fn = frame_end_fn;
++ png_ptr->apng_flags |= PNG_APNG_APP;
+}
++#endif
+
-+#ifdef PNG_PROGRESSIVE_READ_SUPPORTED
-+/* same as png_read_reset() but for the progressive reader */
-+void /* PRIVATE */
-+png_progressive_read_reset(png_structp png_ptr)
-+{
-+#ifdef PNG_READ_INTERLACING_SUPPORTED
-+ /* Arrays to facilitate easy interlacing - use pass (0 - 6) as index */
-+
-+ /* Start of interlace block */
-+ const int png_pass_start[] = {0, 4, 0, 2, 0, 1, 0};
-+
-+ /* Offset to next interlace block */
-+ const int png_pass_inc[] = {8, 8, 4, 4, 2, 2, 1};
-+
-+ /* Start of interlace block in the y direction */
-+ const int png_pass_ystart[] = {0, 0, 4, 0, 2, 0, 1};
-+
-+ /* Offset to next interlace block in the y direction */
-+ const int png_pass_yinc[] = {8, 8, 8, 4, 4, 2, 2};
-+
-+ if (png_ptr->interlaced)
-+ {
-+ if (!(png_ptr->transformations & PNG_INTERLACE))
-+ png_ptr->num_rows = (png_ptr->height + png_pass_yinc[0] - 1 -
-+ png_pass_ystart[0]) / png_pass_yinc[0];
-+ else
-+ png_ptr->num_rows = png_ptr->height;
-+
-+ png_ptr->iwidth = (png_ptr->width +
-+ png_pass_inc[png_ptr->pass] - 1 -
-+ png_pass_start[png_ptr->pass]) /
-+ png_pass_inc[png_ptr->pass];
-+ }
-+ else
-+#endif /* PNG_READ_INTERLACING_SUPPORTED */
-+ {
-+ png_ptr->num_rows = png_ptr->height;
-+ png_ptr->iwidth = png_ptr->width;
-+ }
-+ png_ptr->flags &= ~PNG_FLAG_ZSTREAM_ENDED;
-+ if (inflateReset(&(png_ptr->zstream)) != Z_OK)
-+ png_error(png_ptr, "inflateReset failed");
-+ png_ptr->zstream.avail_in = 0;
-+ png_ptr->zstream.next_in = 0;
-+ png_ptr->zstream.next_out = png_ptr->row_buf;
-+ png_ptr->zstream.avail_out = (uInt)PNG_ROWBYTES(png_ptr->pixel_depth,
-+ png_ptr->iwidth) + 1;
-+}
-+#endif /* PNG_PROGRESSIVE_READ_SUPPORTED */
-+#endif /* PNG_READ_APNG_SUPPORTED */
- #endif /* READ */
-diff -Naru libpng-1.6.23.org/pngset.c libpng-1.6.23/pngset.c
---- libpng-1.6.23.org/pngset.c 2016-06-09 22:23:09.756041974 +0900
-+++ libpng-1.6.23/pngset.c 2016-06-09 22:23:39.249105176 +0900
+ png_voidp PNGAPI
+ png_get_progressive_ptr(png_const_structrp png_ptr)
+ {
+Index: pngset.c
+===================================================================
+--- pngset.c
++++ pngset.c
@@ -241,6 +241,11 @@
info_ptr->pixel_depth = (png_byte)(info_ptr->channels * info_ptr->bit_depth);
@@ -1126,7 +946,7 @@ diff -Naru libpng-1.6.23.org/pngset.c libpng-1.6.23/pngset.c
}
#ifdef PNG_oFFs_SUPPORTED
-@@ -1096,6 +1101,147 @@
+@@ -1096,6 +1101,146 @@
}
#endif /* sPLT */
@@ -1159,8 +979,7 @@ diff -Naru libpng-1.6.23.org/pngset.c libpng-1.6.23/pngset.c
+ if (num_plays > PNG_UINT_31_MAX)
+ {
+ png_warning(png_ptr,
-+ "Ignoring attempt to set acTL with num_plays "
-+ "> 2^31-1");
++ "Ignoring attempt to set acTL with num_plays > 2^31-1");
+ return (0);
+ }
+
@@ -1195,8 +1014,8 @@ diff -Naru libpng-1.6.23.org/pngset.c libpng-1.6.23/pngset.c
+
+ if (blend_op == PNG_BLEND_OP_OVER)
+ {
-+ if (!(png_ptr->color_type & PNG_COLOR_MASK_ALPHA) &&
-+ !(png_get_valid(png_ptr, info_ptr, PNG_INFO_tRNS)))
++ if ((png_ptr->color_type & PNG_COLOR_MASK_ALPHA) == 0 &&
++ png_get_valid(png_ptr, info_ptr, PNG_INFO_tRNS) == 0)
+ {
+ png_warning(png_ptr, "PNG_BLEND_OP_OVER is meaningless "
+ "and wasteful for opaque images, ignored");
@@ -1225,17 +1044,17 @@ diff -Naru libpng-1.6.23.org/pngset.c libpng-1.6.23/pngset.c
+ png_uint_16 delay_num, png_uint_16 delay_den,
+ png_byte dispose_op, png_byte blend_op)
+{
-+ if (width > PNG_UINT_31_MAX)
-+ png_error(png_ptr, "invalid width in fcTL (> 2^31-1)");
-+ if (height > PNG_UINT_31_MAX)
-+ png_error(png_ptr, "invalid height in fcTL (> 2^31-1)");
++ if (width == 0 || width > PNG_UINT_31_MAX)
++ png_error(png_ptr, "invalid width in fcTL (0 or > 2^31-1)");
++ if (height == 0 || height > PNG_UINT_31_MAX)
++ png_error(png_ptr, "invalid height in fcTL (0 or > 2^31-1)");
+ if (x_offset > PNG_UINT_31_MAX)
+ png_error(png_ptr, "invalid x_offset in fcTL (> 2^31-1)");
+ if (y_offset > PNG_UINT_31_MAX)
+ png_error(png_ptr, "invalid y_offset in fcTL (> 2^31-1)");
+ if (width + x_offset > png_ptr->first_frame_width ||
+ height + y_offset > png_ptr->first_frame_height)
-+ png_error(png_ptr, "dimensions of a frame are greater than"
++ png_error(png_ptr, "dimensions of a frame are greater than "
+ "the ones in IHDR");
+
+ if (dispose_op != PNG_DISPOSE_OP_NONE &&
@@ -1247,285 +1066,372 @@ diff -Naru libpng-1.6.23.org/pngset.c libpng-1.6.23/pngset.c
+ blend_op != PNG_BLEND_OP_OVER)
+ png_error(png_ptr, "invalid blend_op in fcTL");
+
-+ PNG_UNUSED(delay_num)
-+ PNG_UNUSED(delay_den)
++ PNG_UNUSED(delay_num)
++ PNG_UNUSED(delay_den)
++}
++
++png_uint_32 PNGAPI
++png_set_first_frame_is_hidden(png_structp png_ptr, png_infop info_ptr,
++ png_byte is_hidden)
++{
++ png_debug(1, "in png_first_frame_is_hidden()");
++
++ if (png_ptr == NULL)
++ return 0;
++
++ if (is_hidden != 0)
++ png_ptr->apng_flags |= PNG_FIRST_FRAME_HIDDEN;
++ else
++ png_ptr->apng_flags &= ~PNG_FIRST_FRAME_HIDDEN;
++
++ PNG_UNUSED(info_ptr)
++
++ return 1;
++}
++#endif /* APNG */
++
+ #ifdef PNG_STORE_UNKNOWN_CHUNKS_SUPPORTED
+ static png_byte
+ check_location(png_const_structrp png_ptr, int location)
+Index: pngrutil.c
+===================================================================
+--- pngrutil.c
++++ pngrutil.c
+@@ -857,6 +857,11 @@
+ filter_type = buf[11];
+ interlace_type = buf[12];
+
++#ifdef PNG_READ_APNG_SUPPORTED
++ png_ptr->first_frame_width = width;
++ png_ptr->first_frame_height = height;
++#endif
++
+ /* Set internal variables */
+ png_ptr->width = width;
+ png_ptr->height = height;
+@@ -2757,6 +2762,180 @@
+ }
+ #endif
+
++#ifdef PNG_READ_APNG_SUPPORTED
++void /* PRIVATE */
++png_handle_acTL(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
++{
++ png_byte data[8];
++ png_uint_32 num_frames;
++ png_uint_32 num_plays;
++ png_uint_32 didSet;
++
++ png_debug(1, "in png_handle_acTL");
++
++ if ((png_ptr->mode & PNG_HAVE_IHDR) == 0)
++ {
++ png_error(png_ptr, "Missing IHDR before acTL");
++ }
++ else if ((png_ptr->mode & PNG_HAVE_IDAT) != 0)
++ {
++ png_warning(png_ptr, "Invalid acTL after IDAT skipped");
++ png_crc_finish(png_ptr, length);
++ return;
++ }
++ else if ((png_ptr->mode & PNG_HAVE_acTL) != 0)
++ {
++ png_warning(png_ptr, "Duplicate acTL skipped");
++ png_crc_finish(png_ptr, length);
++ return;
++ }
++ else if (length != 8)
++ {
++ png_warning(png_ptr, "acTL with invalid length skipped");
++ png_crc_finish(png_ptr, length);
++ return;
++ }
++
++ png_crc_read(png_ptr, data, 8);
++ png_crc_finish(png_ptr, 0);
++
++ num_frames = png_get_uint_31(png_ptr, data);
++ num_plays = png_get_uint_31(png_ptr, data + 4);
++
++ /* the set function will do error checking on num_frames */
++ didSet = png_set_acTL(png_ptr, info_ptr, num_frames, num_plays);
++ if (didSet != 0)
++ png_ptr->mode |= PNG_HAVE_acTL;
++}
++
++void /* PRIVATE */
++png_handle_fcTL(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
++{
++ png_byte data[22];
++ png_uint_32 width;
++ png_uint_32 height;
++ png_uint_32 x_offset;
++ png_uint_32 y_offset;
++ png_uint_16 delay_num;
++ png_uint_16 delay_den;
++ png_byte dispose_op;
++ png_byte blend_op;
++
++ png_debug(1, "in png_handle_fcTL");
++
++ png_ensure_sequence_number(png_ptr, length);
++
++ if ((png_ptr->mode & PNG_HAVE_IHDR) == 0)
++ {
++ png_error(png_ptr, "Missing IHDR before fcTL");
++ }
++ else if ((png_ptr->mode & PNG_HAVE_IDAT) != 0)
++ {
++ /* for any frames other then the first this message may be misleading,
++ * but correct. PNG_HAVE_IDAT is unset before the frame head is read
++ * i can't think of a better message */
++ png_warning(png_ptr, "Invalid fcTL after IDAT skipped");
++ png_crc_finish(png_ptr, length-4);
++ return;
++ }
++ else if ((png_ptr->mode & PNG_HAVE_fcTL) != 0)
++ {
++ png_warning(png_ptr, "Duplicate fcTL within one frame skipped");
++ png_crc_finish(png_ptr, length-4);
++ return;
++ }
++ else if (length != 26)
++ {
++ png_warning(png_ptr, "fcTL with invalid length skipped");
++ png_crc_finish(png_ptr, length-4);
++ return;
++ }
++
++ png_crc_read(png_ptr, data, 22);
++ png_crc_finish(png_ptr, 0);
++
++ width = png_get_uint_31(png_ptr, data);
++ height = png_get_uint_31(png_ptr, data + 4);
++ x_offset = png_get_uint_31(png_ptr, data + 8);
++ y_offset = png_get_uint_31(png_ptr, data + 12);
++ delay_num = png_get_uint_16(data + 16);
++ delay_den = png_get_uint_16(data + 18);
++ dispose_op = data[20];
++ blend_op = data[21];
++
++ if (png_ptr->num_frames_read == 0 && (x_offset != 0 || y_offset != 0))
++ {
++ png_warning(png_ptr, "fcTL for the first frame must have zero offset");
++ return;
++ }
++
++ if (info_ptr != NULL)
++ {
++ if (png_ptr->num_frames_read == 0 &&
++ (width != info_ptr->width || height != info_ptr->height))
++ {
++ png_warning(png_ptr, "size in first frame's fcTL must match "
++ "the size in IHDR");
++ return;
++ }
++
++ /* The set function will do more error checking */
++ png_set_next_frame_fcTL(png_ptr, info_ptr, width, height,
++ x_offset, y_offset, delay_num, delay_den,
++ dispose_op, blend_op);
++
++ png_read_reinit(png_ptr, info_ptr);
++
++ png_ptr->mode |= PNG_HAVE_fcTL;
++ }
++}
++
++void /* PRIVATE */
++png_have_info(png_structp png_ptr, png_infop info_ptr)
++{
++ if ((info_ptr->valid & PNG_INFO_acTL) != 0 &&
++ (info_ptr->valid & PNG_INFO_fcTL) == 0)
++ {
++ png_ptr->apng_flags |= PNG_FIRST_FRAME_HIDDEN;
++ info_ptr->num_frames++;
++ }
++}
++
++void /* PRIVATE */
++png_handle_fdAT(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
++{
++ png_ensure_sequence_number(png_ptr, length);
++
++ /* This function is only called from png_read_end(), png_read_info(),
++ * and png_push_read_chunk() which means that:
++ * - the user doesn't want to read this frame
++ * - or this is an out-of-place fdAT
++ * in either case it is safe to ignore the chunk with a warning */
++ png_warning(png_ptr, "ignoring fdAT chunk");
++ png_crc_finish(png_ptr, length - 4);
++ PNG_UNUSED(info_ptr)
+}
+
-+png_uint_32 PNGAPI
-+png_set_first_frame_is_hidden(png_structp png_ptr, png_infop info_ptr,
-+ png_byte is_hidden)
++void /* PRIVATE */
++png_ensure_sequence_number(png_structp png_ptr, png_uint_32 length)
+{
-+ png_debug(1, "in png_first_frame_is_hidden()");
++ png_byte data[4];
++ png_uint_32 sequence_number;
+
-+ if (png_ptr == NULL)
-+ return 0;
++ if (length < 4)
++ png_error(png_ptr, "invalid fcTL or fdAT chunk found");
+
-+ if (is_hidden)
-+ png_ptr->apng_flags |= PNG_FIRST_FRAME_HIDDEN;
-+ else
-+ png_ptr->apng_flags &= ~PNG_FIRST_FRAME_HIDDEN;
++ png_crc_read(png_ptr, data, 4);
++ sequence_number = png_get_uint_31(png_ptr, data);
+
-+ PNG_UNUSED(info_ptr)
++ if (sequence_number != png_ptr->next_seq_num)
++ png_error(png_ptr, "fcTL or fdAT chunk with out-of-order sequence "
++ "number found");
+
-+ return 1;
++ png_ptr->next_seq_num++;
+}
-+#endif /* PNG_APNG_SUPPORTED */
++#endif /* READ_APNG */
+
- #ifdef PNG_STORE_UNKNOWN_CHUNKS_SUPPORTED
- static png_byte
- check_location(png_const_structrp png_ptr, int location)
-diff -Naru libpng-1.6.23.org/pngstruct.h libpng-1.6.23/pngstruct.h
---- libpng-1.6.23.org/pngstruct.h 2016-06-09 22:21:54.210320245 +0900
-+++ libpng-1.6.23/pngstruct.h 2016-06-09 22:23:39.250105212 +0900
-@@ -403,6 +403,27 @@
- png_byte filter_type;
- #endif
+ #ifdef PNG_READ_UNKNOWN_CHUNKS_SUPPORTED
+ /* Utility function for png_handle_unknown; set up png_ptr::unknown_chunk */
+ static int
+@@ -4016,6 +4195,38 @@
+ uInt avail_in;
+ png_bytep buffer;
-+#ifdef PNG_APNG_SUPPORTED
-+ png_uint_32 apng_flags;
-+ png_uint_32 next_seq_num; /* next fcTL/fdAT chunk sequence number */
-+ png_uint_32 first_frame_width;
-+ png_uint_32 first_frame_height;
-+
+#ifdef PNG_READ_APNG_SUPPORTED
-+ png_uint_32 num_frames_read; /* incremented after all image data of */
-+ /* a frame is read */
-+#ifdef PNG_PROGRESSIVE_READ_SUPPORTED
-+ png_progressive_frame_ptr frame_info_fn; /* frame info read callback */
-+ png_progressive_frame_ptr frame_end_fn; /* frame data read callback */
-+#endif
-+#endif
-+
-+#ifdef PNG_WRITE_APNG_SUPPORTED
-+ png_uint_32 num_frames_to_write;
-+ png_uint_32 num_frames_written;
-+#endif
-+#endif /* PNG_APNG_SUPPORTED */
-+
- /* New members added in libpng-1.2.0 */
-
- /* New members added in libpng-1.0.2 but first enabled by default in 1.2.0 */
-diff -Naru libpng-1.6.23.org/pngtest.c libpng-1.6.23/pngtest.c
---- libpng-1.6.23.org/pngtest.c 2016-06-09 22:23:09.756041974 +0900
-+++ libpng-1.6.23/pngtest.c 2016-06-09 22:23:39.250105212 +0900
-@@ -883,6 +883,10 @@
- volatile int num_passes;
- int pass;
- int bit_depth, color_type;
-+#ifdef PNG_APNG_SUPPORTED
-+ png_uint_32 num_frames;
-+ png_uint_32 num_plays;
-+#endif
-
- row_buf = NULL;
- error_parameters.file_name = inname;
-@@ -1356,6 +1360,22 @@
- }
- }
- #endif
-+
-+#ifdef PNG_APNG_SUPPORTED
-+ if (png_get_valid(read_ptr, read_info_ptr, PNG_INFO_acTL))
-+ {
-+ if (png_get_acTL(read_ptr, read_info_ptr, &num_frames, &num_plays))
-+ {
-+ png_byte is_hidden;
-+ pngtest_debug2("Handling acTL chunks (frames %ld, plays %ld)",
-+ num_frames, num_plays);
-+ png_set_acTL(write_ptr, write_info_ptr, num_frames, num_plays);
-+ is_hidden = png_get_first_frame_is_hidden(read_ptr, read_info_ptr);
-+ png_set_first_frame_is_hidden(write_ptr, write_info_ptr, is_hidden);
-+ }
-+ }
-+#endif
++ png_uint_32 bytes_to_skip = 0;
+
- #ifdef PNG_WRITE_UNKNOWN_CHUNKS_SUPPORTED
- {
- png_unknown_chunkp unknowns;
-@@ -1427,6 +1447,110 @@
- t_misc += (t_stop - t_start);
- t_start = t_stop;
- #endif
-+#ifdef PNG_APNG_SUPPORTED
-+ if (png_get_valid(read_ptr, read_info_ptr, PNG_INFO_acTL))
-+ {
-+ png_uint_32 frame;
-+ for (frame = 0; frame < num_frames; frame++)
-+ {
-+ png_uint_32 frame_width;
-+ png_uint_32 frame_height;
-+ png_uint_32 x_offset;
-+ png_uint_32 y_offset;
-+ png_uint_16 delay_num;
-+ png_uint_16 delay_den;
-+ png_byte dispose_op;
-+ png_byte blend_op;
-+ png_read_frame_head(read_ptr, read_info_ptr);
-+ if (png_get_valid(read_ptr, read_info_ptr, PNG_INFO_fcTL))
-+ {
-+ png_get_next_frame_fcTL(read_ptr, read_info_ptr,
-+ &frame_width, &frame_height,
-+ &x_offset, &y_offset,
-+ &delay_num, &delay_den,
-+ &dispose_op, &blend_op);
-+ }
-+ else
-+ {
-+ frame_width = width;
-+ frame_height = height;
-+ x_offset = 0;
-+ y_offset = 0;
-+ delay_num = 1;
-+ delay_den = 1;
-+ dispose_op = PNG_DISPOSE_OP_NONE;
-+ blend_op = PNG_BLEND_OP_SOURCE;
-+ }
-+#ifdef PNG_WRITE_APNG_SUPPORTED
-+ png_write_frame_head(write_ptr, write_info_ptr, (png_bytepp)&row_buf,
-+ frame_width, frame_height,
-+ x_offset, y_offset,
-+ delay_num, delay_den,
-+ dispose_op, blend_op);
-+#endif
-+ for (pass = 0; pass < num_passes; pass++)
++ while (png_ptr->idat_size == 0 || bytes_to_skip != 0)
+ {
-+# ifdef calc_pass_height
-+ png_uint_32 pass_height;
++ png_crc_finish(png_ptr, bytes_to_skip);
++ bytes_to_skip = 0;
+
-+ if (num_passes == 7) /* interlaced */
++ png_ptr->idat_size = png_read_chunk_header(png_ptr);
++ if (png_ptr->num_frames_read == 0)
++ {
++ if (png_ptr->chunk_name != png_IDAT)
++ png_error(png_ptr, "Not enough image data");
++ }
++ else
++ {
++ if (png_ptr->chunk_name == png_IEND)
++ png_error(png_ptr, "Not enough image data");
++ if (png_ptr->chunk_name != png_fdAT)
+ {
-+ if (PNG_PASS_COLS(frame_width, pass) > 0)
-+ pass_height = PNG_PASS_ROWS(frame_height, pass);
-+
-+ else
-+ pass_height = 0;
++ png_warning(png_ptr, "Skipped (ignored) a chunk "
++ "between APNG chunks");
++ bytes_to_skip = png_ptr->idat_size;
++ continue;
+ }
+
-+ else /* not interlaced */
-+ pass_height = frame_height;
-+# else
-+# define pass_height frame_height
-+# endif
-+
-+ pngtest_debug1("Writing row data for pass %d", pass);
-+ for (y = 0; y < pass_height; y++)
-+ {
-+#ifndef SINGLE_ROWBUF_ALLOC
-+ pngtest_debug2("Allocating row buffer (pass %d, y = %u)...", pass, y);
-+
-+ row_buf = (png_bytep)png_malloc(read_ptr,
-+ png_get_rowbytes(read_ptr, read_info_ptr));
-+
-+ pngtest_debug2("\t0x%08lx (%lu bytes)", (unsigned long)row_buf,
-+ (unsigned long)png_get_rowbytes(read_ptr, read_info_ptr));
-+
-+#endif /* !SINGLE_ROWBUF_ALLOC */
-+ png_read_rows(read_ptr, (png_bytepp)&row_buf, NULL, 1);
-+
-+#ifdef PNG_WRITE_SUPPORTED
-+#ifdef PNGTEST_TIMING
-+ t_stop = (float)clock();
-+ t_decode += (t_stop - t_start);
-+ t_start = t_stop;
-+#endif
-+ png_write_rows(write_ptr, (png_bytepp)&row_buf, 1);
-+#ifdef PNGTEST_TIMING
-+ t_stop = (float)clock();
-+ t_encode += (t_stop - t_start);
-+ t_start = t_stop;
-+#endif
-+#endif /* PNG_WRITE_SUPPORTED */
++ png_ensure_sequence_number(png_ptr, png_ptr->idat_size);
+
-+#ifndef SINGLE_ROWBUF_ALLOC
-+ pngtest_debug2("Freeing row buffer (pass %d, y = %u)", pass, y);
-+ png_free(read_ptr, row_buf);
-+ row_buf = NULL;
-+#endif /* !SINGLE_ROWBUF_ALLOC */
++ png_ptr->idat_size -= 4;
+ }
+ }
-+#ifdef PNG_WRITE_APNG_SUPPORTED
-+ png_write_frame_tail(write_ptr, write_info_ptr);
-+#endif
-+ }
-+ }
-+ else
-+#endif
- for (pass = 0; pass < num_passes; pass++)
- {
- # ifdef calc_pass_height
-diff -Naru libpng-1.6.23.org/pngwrite.c libpng-1.6.23/pngwrite.c
---- libpng-1.6.23.org/pngwrite.c 2016-06-09 22:21:54.212320317 +0900
-+++ libpng-1.6.23/pngwrite.c 2016-06-09 22:23:39.251105248 +0900
-@@ -128,6 +128,10 @@
- * the application continues writing the PNG. So check the 'invalid'
- * flag here too.
- */
-+#ifdef PNG_WRITE_APNG_SUPPORTED
-+ if (info_ptr->valid & PNG_INFO_acTL)
-+ png_write_acTL(png_ptr, info_ptr->num_frames, info_ptr->num_plays);
-+#endif
- #ifdef PNG_GAMMA_SUPPORTED
- # ifdef PNG_WRITE_gAMA_SUPPORTED
- if ((info_ptr->colorspace.flags & PNG_COLORSPACE_INVALID) == 0 &&
-@@ -365,6 +369,11 @@
- png_benign_error(png_ptr, "Wrote palette index exceeding num_palette");
- #endif
++#else
+ while (png_ptr->idat_size == 0)
+ {
+ png_crc_finish(png_ptr, 0);
+@@ -4027,6 +4238,7 @@
+ if (png_ptr->chunk_name != png_IDAT)
+ png_error(png_ptr, "Not enough image data");
+ }
++#endif /* READ_APNG */
-+#ifdef PNG_WRITE_APNG_SUPPORTED
-+ if (png_ptr->num_frames_written != png_ptr->num_frames_to_write)
-+ png_error(png_ptr, "Not enough frames written");
+ avail_in = png_ptr->IDAT_read_size;
+
+@@ -4090,6 +4302,9 @@
+
+ png_ptr->mode |= PNG_AFTER_IDAT;
+ png_ptr->flags |= PNG_FLAG_ZSTREAM_ENDED;
++#ifdef PNG_READ_APNG_SUPPORTED
++ png_ptr->num_frames_read++;
+#endif
-+
- /* See if user wants us to write information chunks */
- if (info_ptr != NULL)
- {
-@@ -1450,6 +1459,43 @@
- }
- #endif
-+#ifdef PNG_WRITE_APNG_SUPPORTED
-+void PNGAPI
-+png_write_frame_head(png_structp png_ptr, png_infop info_ptr,
-+ png_bytepp row_pointers, png_uint_32 width, png_uint_32 height,
-+ png_uint_32 x_offset, png_uint_32 y_offset,
-+ png_uint_16 delay_num, png_uint_16 delay_den, png_byte dispose_op,
-+ png_byte blend_op)
+ if (png_ptr->zstream.avail_in > 0 || png_ptr->idat_size > 0)
+ png_chunk_benign_error(png_ptr, "Extra compressed data");
+@@ -4528,4 +4743,80 @@
+
+ png_ptr->flags |= PNG_FLAG_ROW_INIT;
+ }
++
++#ifdef PNG_READ_APNG_SUPPORTED
++/* This function is to be called after the main IDAT set has been read and
++ * before a new IDAT is read. It resets some parts of png_ptr
++ * to make them usable by the read functions again */
++void /* PRIVATE */
++png_read_reset(png_structp png_ptr)
+{
-+ png_debug(1, "in png_write_frame_head");
++ png_ptr->mode &= ~PNG_HAVE_IDAT;
++ png_ptr->mode &= ~PNG_AFTER_IDAT;
++ png_ptr->row_number = 0;
++ png_ptr->pass = 0;
++}
+
-+ /* there is a chance this has been set after png_write_info was called,
-+ * so it would be set but not written. is there a way to be sure? */
-+ if (!(info_ptr->valid & PNG_INFO_acTL))
-+ png_error(png_ptr, "png_write_frame_head(): acTL not set");
++void /* PRIVATE */
++png_read_reinit(png_structp png_ptr, png_infop info_ptr)
++{
++ png_ptr->width = info_ptr->next_frame_width;
++ png_ptr->height = info_ptr->next_frame_height;
++ png_ptr->rowbytes = PNG_ROWBYTES(png_ptr->pixel_depth,png_ptr->width);
++ png_ptr->info_rowbytes = PNG_ROWBYTES(info_ptr->pixel_depth,
++ png_ptr->width);
++ if (png_ptr->prev_row != NULL)
++ memset(png_ptr->prev_row, 0, png_ptr->rowbytes + 1);
++}
+
-+ png_write_reset(png_ptr);
++#ifdef PNG_PROGRESSIVE_READ_SUPPORTED
++/* same as png_read_reset() but for the progressive reader */
++void /* PRIVATE */
++png_progressive_read_reset(png_structp png_ptr)
++{
++#ifdef PNG_READ_INTERLACING_SUPPORTED
++ /* Arrays to facilitate easy interlacing - use pass (0 - 6) as index */
+
-+ png_write_reinit(png_ptr, info_ptr, width, height);
++ /* Start of interlace block */
++ static PNG_CONST png_byte png_pass_start[] = {0, 4, 0, 2, 0, 1, 0};
+
-+ if ( !(png_ptr->num_frames_written == 0 &&
-+ (png_ptr->apng_flags & PNG_FIRST_FRAME_HIDDEN) ) )
-+ png_write_fcTL(png_ptr, width, height, x_offset, y_offset,
-+ delay_num, delay_den, dispose_op, blend_op);
++ /* Offset to next interlace block */
++ static PNG_CONST png_byte png_pass_inc[] = {8, 8, 4, 4, 2, 2, 1};
+
-+ PNG_UNUSED(row_pointers)
-+}
++ /* Start of interlace block in the y direction */
++ static PNG_CONST png_byte png_pass_ystart[] = {0, 0, 4, 0, 2, 0, 1};
+
-+void PNGAPI
-+png_write_frame_tail(png_structp png_ptr, png_infop info_ptr)
-+{
-+ png_debug(1, "in png_write_frame_tail");
++ /* Offset to next interlace block in the y direction */
++ static PNG_CONST png_byte png_pass_yinc[] = {8, 8, 8, 4, 4, 2, 2};
+
-+ png_ptr->num_frames_written++;
++ if (png_ptr->interlaced != 0)
++ {
++ if ((png_ptr->transformations & PNG_INTERLACE) == 0)
++ png_ptr->num_rows = (png_ptr->height + png_pass_yinc[0] - 1 -
++ png_pass_ystart[0]) / png_pass_yinc[0];
++ else
++ png_ptr->num_rows = png_ptr->height;
+
-+ PNG_UNUSED(info_ptr)
++ png_ptr->iwidth = (png_ptr->width +
++ png_pass_inc[png_ptr->pass] - 1 -
++ png_pass_start[png_ptr->pass]) /
++ png_pass_inc[png_ptr->pass];
++ }
++ else
++#endif /* READ_INTERLACING */
++ {
++ png_ptr->num_rows = png_ptr->height;
++ png_ptr->iwidth = png_ptr->width;
++ }
++ png_ptr->flags &= ~PNG_FLAG_ZSTREAM_ENDED;
++ if (inflateReset(&(png_ptr->zstream)) != Z_OK)
++ png_error(png_ptr, "inflateReset failed");
++ png_ptr->zstream.avail_in = 0;
++ png_ptr->zstream.next_in = 0;
++ png_ptr->zstream.next_out = png_ptr->row_buf;
++ png_ptr->zstream.avail_out = (uInt)PNG_ROWBYTES(png_ptr->pixel_depth,
++ png_ptr->iwidth) + 1;
+}
-+#endif /* PNG_WRITE_APNG_SUPPORTED */
-
- #ifdef PNG_SIMPLIFIED_WRITE_SUPPORTED
- /* Initialize the write structure - general purpose utility. */
-diff -Naru libpng-1.6.23.org/pngwutil.c libpng-1.6.23/pngwutil.c
---- libpng-1.6.23.org/pngwutil.c 2016-06-09 22:21:54.213320353 +0900
-+++ libpng-1.6.23/pngwutil.c 2016-06-09 22:23:39.251105248 +0900
++#endif /* PROGRESSIVE_READ */
++#endif /* READ_APNG */
+ #endif /* READ */
+Index: pngwutil.c
+===================================================================
+--- pngwutil.c
++++ pngwutil.c
@@ -817,6 +817,11 @@
/* Write the chunk */
png_write_complete_chunk(png_ptr, png_IHDR, buf, (png_size_t)13);
@@ -1538,38 +1444,39 @@ diff -Naru libpng-1.6.23.org/pngwutil.c libpng-1.6.23/pngwutil.c
if ((png_ptr->do_filter) == PNG_NO_FILTERS)
{
if (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE ||
-@@ -998,7 +1003,14 @@
+@@ -998,7 +1003,15 @@
optimize_cmf(data, png_image_size(png_ptr));
#endif
-+# ifdef PNG_WRITE_APNG_SUPPORTED
-+ if (png_ptr->num_frames_written == 0)
-+# endif
++#ifdef PNG_WRITE_APNG_SUPPORTED
++ if (png_ptr->num_frames_written == 0)
++#endif
png_write_complete_chunk(png_ptr, png_IDAT, data, size);
-+# ifdef PNG_WRITE_APNG_SUPPORTED
-+ else
-+ png_write_fdAT(png_ptr, data, size);
-+# endif /* PNG_WRITE_APNG_SUPPORTED */
++#ifdef PNG_WRITE_APNG_SUPPORTED
++ else
++ png_write_fdAT(png_ptr, data, size);
++#endif /* WRITE_APNG */
++
png_ptr->mode |= PNG_HAVE_IDAT;
png_ptr->zstream.next_out = data;
-@@ -1044,7 +1056,15 @@
+@@ -1044,7 +1057,15 @@
optimize_cmf(data, png_image_size(png_ptr));
#endif
-+# ifdef PNG_WRITE_APNG_SUPPORTED
-+ if (png_ptr->num_frames_written == 0)
-+# endif
++#ifdef PNG_WRITE_APNG_SUPPORTED
++ if (png_ptr->num_frames_written == 0)
++#endif
png_write_complete_chunk(png_ptr, png_IDAT, data, size);
-+# ifdef PNG_WRITE_APNG_SUPPORTED
-+ else
-+ png_write_fdAT(png_ptr, data, size);
-+# endif /* PNG_WRITE_APNG_SUPPORTED */
++#ifdef PNG_WRITE_APNG_SUPPORTED
++ else
++ png_write_fdAT(png_ptr, data, size);
++#endif /* WRITE_APNG */
+
png_ptr->zstream.avail_out = 0;
png_ptr->zstream.next_out = NULL;
png_ptr->mode |= PNG_HAVE_IDAT | PNG_AFTER_IDAT;
-@@ -1857,6 +1877,82 @@
+@@ -1858,6 +1879,82 @@
}
#endif
@@ -1584,7 +1491,7 @@ diff -Naru libpng-1.6.23.org/pngwutil.c libpng-1.6.23/pngwutil.c
+
+ png_ptr->num_frames_to_write = num_frames;
+
-+ if (png_ptr->apng_flags & PNG_FIRST_FRAME_HIDDEN)
++ if ((png_ptr->apng_flags & PNG_FIRST_FRAME_HIDDEN) != 0)
+ num_frames--;
+
+ png_save_uint_32(buf, num_frames);
@@ -1647,12 +1554,12 @@ diff -Naru libpng-1.6.23.org/pngwutil.c libpng-1.6.23/pngwutil.c
+
+ png_ptr->next_seq_num++;
+}
-+#endif /* PNG_WRITE_APNG_SUPPORTED */
++#endif /* WRITE_APNG */
+
/* Initializes the row writing capability of libpng */
void /* PRIVATE */
png_write_start_row(png_structrp png_ptr)
-@@ -2622,4 +2718,39 @@
+@@ -2752,4 +2849,39 @@
}
#endif /* WRITE_FLUSH */
}
@@ -1677,7 +1584,7 @@ diff -Naru libpng-1.6.23.org/pngwutil.c libpng-1.6.23/pngwutil.c
+ "don't match the ones in IHDR");
+ if (width > png_ptr->first_frame_width ||
+ height > png_ptr->first_frame_height)
-+ png_error(png_ptr, "width and/or height for a frame greater than"
++ png_error(png_ptr, "width and/or height for a frame greater than "
+ "the ones in IHDR");
+
+ png_set_IHDR(png_ptr, info_ptr, width, height,
@@ -1690,11 +1597,12 @@ diff -Naru libpng-1.6.23.org/pngwutil.c libpng-1.6.23/pngwutil.c
+ png_ptr->rowbytes = PNG_ROWBYTES(png_ptr->pixel_depth, width);
+ png_ptr->usr_width = png_ptr->width;
+}
-+#endif /* PNG_WRITE_APNG_SUPPORTED */
++#endif /* WRITE_APNG */
#endif /* WRITE */
-diff -Naru libpng-1.6.23.org/scripts/symbols.def libpng-1.6.23/scripts/symbols.def
---- libpng-1.6.23.org/scripts/symbols.def 2016-06-09 22:23:09.757042011 +0900
-+++ libpng-1.6.23/scripts/symbols.def 2016-06-09 22:23:39.251105248 +0900
+Index: scripts/symbols.def
+===================================================================
+--- scripts/symbols.def
++++ scripts/symbols.def
@@ -250,3 +250,23 @@
png_get_palette_max @243
png_set_option @244
1
0
commit af6d870ba68da56de797c9ef50ad4063d2d29724
Author: Danny Rawlins <monster.romster(a)gmail.com>
Date: Sun Sep 4 17:53:51 2016 +1000
libgcrypt-32: 1.7.2 -> 1.7.3
diff --git a/libgcrypt-32/.footprint b/libgcrypt-32/.footprint
index 09c1a98..9df1dec 100644
--- a/libgcrypt-32/.footprint
+++ b/libgcrypt-32/.footprint
@@ -2,6 +2,6 @@ drwxr-xr-x root/root usr/
drwxr-xr-x root/root usr/lib32/
-rw-r--r-- root/root usr/lib32/libgcrypt.a
-rwxr-xr-x root/root usr/lib32/libgcrypt.la
-lrwxrwxrwx root/root usr/lib32/libgcrypt.so -> libgcrypt.so.20.1.2
-lrwxrwxrwx root/root usr/lib32/libgcrypt.so.20 -> libgcrypt.so.20.1.2
--rwxr-xr-x root/root usr/lib32/libgcrypt.so.20.1.2
+lrwxrwxrwx root/root usr/lib32/libgcrypt.so -> libgcrypt.so.20.1.3
+lrwxrwxrwx root/root usr/lib32/libgcrypt.so.20 -> libgcrypt.so.20.1.3
+-rwxr-xr-x root/root usr/lib32/libgcrypt.so.20.1.3
diff --git a/libgcrypt-32/.md5sum b/libgcrypt-32/.md5sum
index 3b153f5..7dedc95 100644
--- a/libgcrypt-32/.md5sum
+++ b/libgcrypt-32/.md5sum
@@ -1 +1 @@
-ec7b21dd2134af4b3aece5e5dfd3a700 libgcrypt-1.7.2.tar.bz2
+c869e542cc13a1c28d8055487bf7f5c4 libgcrypt-1.7.3.tar.bz2
diff --git a/libgcrypt-32/Pkgfile b/libgcrypt-32/Pkgfile
index d456912..d346d90 100644
--- a/libgcrypt-32/Pkgfile
+++ b/libgcrypt-32/Pkgfile
@@ -4,7 +4,7 @@
# Depends on: libgcrypt libgpg-error-32
name=libgcrypt-32
-version=1.7.2
+version=1.7.3
release=1
source=(ftp://ftp.gnupg.org/gcrypt/libgcrypt/libgcrypt-$version.tar.bz2)
1
0
commit dfef8629326db5b4ff68665c7fcb5e51371ada62
Author: Danny Rawlins <monster.romster(a)gmail.com>
Date: Sun Sep 4 17:52:48 2016 +1000
glib-32: 2.48.1 -> 2.48.2
diff --git a/glib-32/.footprint b/glib-32/.footprint
index e381b7e..edef500 100644
--- a/glib-32/.footprint
+++ b/glib-32/.footprint
@@ -1,31 +1,31 @@
drwxr-xr-x root/root lib32/
drwxr-xr-x root/root lib32/gio/
drwxr-xr-x root/root lib32/gio/modules/
-lrwxrwxrwx root/root lib32/libgio-2.0.so.0 -> libgio-2.0.so.0.4800.1
--rwxr-xr-x root/root lib32/libgio-2.0.so.0.4800.1
-lrwxrwxrwx root/root lib32/libglib-2.0.so.0 -> libglib-2.0.so.0.4800.1
--rwxr-xr-x root/root lib32/libglib-2.0.so.0.4800.1
-lrwxrwxrwx root/root lib32/libgmodule-2.0.so.0 -> libgmodule-2.0.so.0.4800.1
--rwxr-xr-x root/root lib32/libgmodule-2.0.so.0.4800.1
-lrwxrwxrwx root/root lib32/libgobject-2.0.so.0 -> libgobject-2.0.so.0.4800.1
--rwxr-xr-x root/root lib32/libgobject-2.0.so.0.4800.1
-lrwxrwxrwx root/root lib32/libgthread-2.0.so.0 -> libgthread-2.0.so.0.4800.1
--rwxr-xr-x root/root lib32/libgthread-2.0.so.0.4800.1
+lrwxrwxrwx root/root lib32/libgio-2.0.so.0 -> libgio-2.0.so.0.4800.2
+-rwxr-xr-x root/root lib32/libgio-2.0.so.0.4800.2
+lrwxrwxrwx root/root lib32/libglib-2.0.so.0 -> libglib-2.0.so.0.4800.2
+-rwxr-xr-x root/root lib32/libglib-2.0.so.0.4800.2
+lrwxrwxrwx root/root lib32/libgmodule-2.0.so.0 -> libgmodule-2.0.so.0.4800.2
+-rwxr-xr-x root/root lib32/libgmodule-2.0.so.0.4800.2
+lrwxrwxrwx root/root lib32/libgobject-2.0.so.0 -> libgobject-2.0.so.0.4800.2
+-rwxr-xr-x root/root lib32/libgobject-2.0.so.0.4800.2
+lrwxrwxrwx root/root lib32/libgthread-2.0.so.0 -> libgthread-2.0.so.0.4800.2
+-rwxr-xr-x root/root lib32/libgthread-2.0.so.0.4800.2
drwxr-xr-x root/root usr/
drwxr-xr-x root/root usr/lib32/
drwxr-xr-x root/root usr/lib32/glib-2.0/
drwxr-xr-x root/root usr/lib32/glib-2.0/include/
-rw-r--r-- root/root usr/lib32/glib-2.0/include/glibconfig.h
-rwxr-xr-x root/root usr/lib32/libgio-2.0.la
-lrwxrwxrwx root/root usr/lib32/libgio-2.0.so -> ../../lib32/libgio-2.0.so.0.4800.1
+lrwxrwxrwx root/root usr/lib32/libgio-2.0.so -> ../../lib32/libgio-2.0.so.0.4800.2
-rwxr-xr-x root/root usr/lib32/libglib-2.0.la
-lrwxrwxrwx root/root usr/lib32/libglib-2.0.so -> ../../lib32/libglib-2.0.so.0.4800.1
+lrwxrwxrwx root/root usr/lib32/libglib-2.0.so -> ../../lib32/libglib-2.0.so.0.4800.2
-rwxr-xr-x root/root usr/lib32/libgmodule-2.0.la
-lrwxrwxrwx root/root usr/lib32/libgmodule-2.0.so -> ../../lib32/libgmodule-2.0.so.0.4800.1
+lrwxrwxrwx root/root usr/lib32/libgmodule-2.0.so -> ../../lib32/libgmodule-2.0.so.0.4800.2
-rwxr-xr-x root/root usr/lib32/libgobject-2.0.la
-lrwxrwxrwx root/root usr/lib32/libgobject-2.0.so -> ../../lib32/libgobject-2.0.so.0.4800.1
+lrwxrwxrwx root/root usr/lib32/libgobject-2.0.so -> ../../lib32/libgobject-2.0.so.0.4800.2
-rwxr-xr-x root/root usr/lib32/libgthread-2.0.la
-lrwxrwxrwx root/root usr/lib32/libgthread-2.0.so -> ../../lib32/libgthread-2.0.so.0.4800.1
+lrwxrwxrwx root/root usr/lib32/libgthread-2.0.so -> ../../lib32/libgthread-2.0.so.0.4800.2
drwxr-xr-x root/root usr/lib32/pkgconfig/
-rw-r--r-- root/root usr/lib32/pkgconfig/gio-2.0.pc
-rw-r--r-- root/root usr/lib32/pkgconfig/gio-unix-2.0.pc
diff --git a/glib-32/.md5sum b/glib-32/.md5sum
index 58c8df9..60d89aa 100644
--- a/glib-32/.md5sum
+++ b/glib-32/.md5sum
@@ -1 +1 @@
-67bd3b75c9f6d5587b457dc01cdcd5bb glib-2.48.1.tar.xz
+f4ac1aa2efd4f5798c37625ea697ac57 glib-2.48.2.tar.xz
diff --git a/glib-32/Pkgfile b/glib-32/Pkgfile
index f32ba10..91e7a18 100644
--- a/glib-32/Pkgfile
+++ b/glib-32/Pkgfile
@@ -4,7 +4,7 @@
# Depends on: libpcre-32 libffi-32 python-32
name=glib-32
-version=2.48.1
+version=2.48.2
release=1
source=(http://download.gnome.org/sources/glib/${version:0:4}/glib-$version…
1
0