summarylogtreecommitdiffstats
diff options
context:
space:
mode:
authorBalló György2017-01-22 19:55:13 +0100
committerBalló György2017-01-22 19:55:13 +0100
commit7f57dca3b90d2437243ef06fea3289c90889c0d8 (patch)
treeca19b94e5935f0558ccbbc032246f43a5384a5c0
downloadaur-7f57dca3b90d2437243ef06fea3289c90889c0d8.tar.gz
Move package from the [community] repository
-rw-r--r--.SRCINFO27
-rw-r--r--PKGBUILD46
-rw-r--r--license.txt139
-rw-r--r--xv-3.10a-libpng15.patch520
4 files changed, 732 insertions, 0 deletions
diff --git a/.SRCINFO b/.SRCINFO
new file mode 100644
index 000000000000..99c6e2efab8b
--- /dev/null
+++ b/.SRCINFO
@@ -0,0 +1,27 @@
+pkgbase = xv
+ pkgdesc = A nice image viewer
+ pkgver = 3.10a
+ pkgrel = 22
+ url = http://www.trilon.com/xv/
+ arch = i686
+ arch = x86_64
+ license = custom
+ makedepends = libxt
+ depends = libpng
+ depends = libx11
+ depends = libtiff
+ depends = jasper
+ options = !emptydirs
+ source = ftp://ftp.trilon.com/pub/xv/xv-3.10a.tar.gz
+ source = http://downloads.sourceforge.net/sourceforge/png-mng/xv-3.10a-jumbo-patches-20070520.tar.gz
+ source = http://www.sonic.net/~roelofs/code/xv-3.10a-enhancements.20070520-20081216.diff
+ source = license.txt
+ source = xv-3.10a-libpng15.patch
+ sha1sums = 092f8eb100f16d6b91c88b126c2b2b998eb09b99
+ sha1sums = d00308c1687d9d803d26ef40c73d19a0f593c626
+ sha1sums = 40bfb0889b820e0f9d3bd7d771144ec3458acc66
+ sha1sums = 4561344e8f2c30eee9c55b14a14f062d89d6e7b7
+ sha1sums = 3d19aa0c6ecc8b554081906babe0b4f9a6946da3
+
+pkgname = xv
+
diff --git a/PKGBUILD b/PKGBUILD
new file mode 100644
index 000000000000..7410b8433743
--- /dev/null
+++ b/PKGBUILD
@@ -0,0 +1,46 @@
+# $Id: PKGBUILD 196553 2016-11-22 17:47:29Z anthraxx $
+# Maintainer: Eric Bélanger <eric@archlinux.org>
+
+pkgname=xv
+pkgver=3.10a
+pkgrel=22
+pkgdesc="A nice image viewer"
+arch=('i686' 'x86_64')
+url="http://www.trilon.com/xv/"
+license=('custom')
+depends=('libpng' 'libx11' 'libtiff' 'jasper')
+makedepends=('libxt')
+options=('!emptydirs')
+source=(ftp://ftp.trilon.com/pub/xv/${pkgname}-${pkgver}.tar.gz \
+ http://downloads.sourceforge.net/sourceforge/png-mng/xv-3.10a-jumbo-patches-20070520.tar.gz \
+ http://www.sonic.net/~roelofs/code/xv-3.10a-enhancements.20070520-20081216.diff \
+ license.txt xv-3.10a-libpng15.patch)
+sha1sums=('092f8eb100f16d6b91c88b126c2b2b998eb09b99'
+ 'd00308c1687d9d803d26ef40c73d19a0f593c626'
+ '40bfb0889b820e0f9d3bd7d771144ec3458acc66'
+ '4561344e8f2c30eee9c55b14a14f062d89d6e7b7'
+ '3d19aa0c6ecc8b554081906babe0b4f9a6946da3')
+
+prepare() {
+ tar -cJf xv-${pkgver}-source.tar.xz xv-${pkgver}
+ cd ${pkgname}-${pkgver}
+ patch -p1 -i "${srcdir}/xv-3.10a-jumbo-fix-enh-patch-20070520.txt"
+ patch -p1 -i "${srcdir}/xv-3.10a-enhancements.20070520-20081216.diff"
+ patch -p0 -i "${srcdir}/xv-3.10a-libpng15.patch"
+}
+
+build() {
+ cd ${pkgname}-${pkgver}
+ make JP2KLIB=-ljasper
+}
+
+package() {
+ cd ${pkgname}-${pkgver}
+ install -d "${pkgdir}"/usr/{bin,lib,share/man/man1}
+ make DESTDIR="${pkgdir}" PREFIX=/usr install
+ install -D -m644 "${srcdir}/license.txt" "${pkgdir}/usr/share/licenses/${pkgname}/license.txt"
+
+# installing source tarball (to comply with license)
+ install -D -m644 "${srcdir}/xv-${pkgver}-source.tar.xz" "${pkgdir}/usr/share/doc/xv/xv-${pkgver}-source.tar.xz"
+ ln -s "/usr/share/licenses/${pkgname}/license.txt" "${pkgdir}/usr/share/doc/xv/license.txt"
+}
diff --git a/license.txt b/license.txt
new file mode 100644
index 000000000000..7dd87c233e52
--- /dev/null
+++ b/license.txt
@@ -0,0 +1,139 @@
+XV Licensing Information
+------------------------
+XV IS SHAREWARE FOR PERSONAL USE ONLY.
+
+You may use XV for your own amusement, and if you find it nifty,
+useful, generally cool, or of some value to you, your registration fee
+would be greatly appreciated. $25 is the standard registration fee,
+though of course, larger amounts are quite welcome. Folks who donate
+$40 or more can receive a printed, bound copy of the XV manual for no
+extra charge. If you want one, just ask. BE SURE TO SPECIFY THE
+VERSION OF XV THAT YOU ARE USING!
+
+COMMERCIAL, GOVERNMENT, AND INSTITUTIONAL USERS MUST REGISTER THEIR
+COPIES OF XV.
+
+This does *not* mean that you are required to register XV just because
+you play with it on the workstation in your office. This falls under
+the heading of 'personal use'. If you are a sysadmin, you can put XV
+up in a public directory for your users amusement. Again, 'personal
+use', albeit plural.
+
+On the other hand, if you use XV in the course of doing your work,
+whatever your 'work' may happen to be, you *must* register your
+copy of XV. (Note: If you are a student, and you use XV to do
+classwork or research, you should get your professor/teacher/advisor
+to purchase an appropriate number of copies.)
+
+XV licenses are $25 each. You should purchase one license per
+workstation, or one per XV user, whichever is the smaller number. XV
+is *not* sold on a 'number of concurrent users' basis. If XV was some
+$1000 program, yes, that would be a reasonable request, but at $25,
+it's not. Also, given that XV is completely unlocked, there is no way
+to enforce any 'number of concurrent users' limits, so it isn't sold
+that way.
+
+Printed and bound copies of the 100-odd page XV manual are available
+for $15 each. Note that manuals are *only* sold with, at minimum, an
+equal number of licenses. (e.g. if you purchase 5 licenses, you can
+also purchase *up to* 5 copies of the manual)
+
+The source code to the program can be had (as a compressed 'tar' file
+split over a couple 3.5" MS-DOS formatted floppies) for $15, for those
+who don't have ftp capabilities.
+
+Orders outside the US and Canada must add an additional $5 per manual
+ordered to cover the additional shipping charges.
+
+Checks, money orders, and purchase orders are accepted. Credit cards
+are not. All forms of payment must be payable in US Funds. Checks
+must be payable through a US bank (or a US branch of a non-US bank).
+Purchase orders for less than $50, while still accepted, are not
+encouraged.
+
+All payments should be payable to 'John Bradley', and mailed to:
+ John Bradley
+ 1053 Floyd Terrace
+ Bryn Mawr, PA 19010
+ USA
+
+
+Site Licenses
+-------------
+If you are planning to purchase 10 or more licenses, site licenses are
+available, at a substantial discount. Site licenses let you run XV on
+any and all computing equipment at the site, for any purpose
+whatsoever. The site license covers the current version of XV, and
+any versions released within one year of the licensing date. You are
+also allowed to duplicate and distribute an unlimited number of copies
+of the XV manual, but only for use within the site. Covered versions
+of the software may be run in perpetuity.
+
+Also, it should be noted that a 'site' can be defined as anything
+you'd like. It can be a physical location (a room, building,
+location, etc.), an organizational grouping (a workgroup, department,
+division, etc.) or any other logical grouping ("the seventeen
+technical writers scattered about our company", etc.).
+
+The site license cost will be based on your estimate of the number of
+XV users or workstations at your site, whichever is the smaller
+number.
+
+If you are interested in obtaining a site license, please contact the
+author via electronic mail or FAX (see below for details). Send
+information regarding your site (the name or definition of the 'site',
+a physical address, a fax number, and an estimate of the number of
+users or workstations), and we'll get a site license out to you for
+your examination.
+
+
+Copyright Notice
+----------------
+XV is Copyright 1989, 1994 by John Bradley
+
+Permission to copy and distribute XV in its entirety, for
+non-commercial purposes, is hereby granted without fee, provided that
+this license information and copyright notice appear in all copies.
+
+If you redistribute XV, the *entire* contents of this distribution
+must be distributed, including the README, and INSTALL files, the
+sources, and the complete contents of the 'docs' directory.
+
+Note that distributing XV 'bundled' in with any product is considered
+to be a 'commercial purpose'.
+
+Also note that any copies of XV that are distributed MUST be built
+and/or configured to be in their 'unregistered copy' mode, so that it
+is made obvious to the user that XV is shareware, and that they should
+consider registering, or at least reading this information.
+
+The software may be modified for your own purposes, but modified
+versions may not be distributed without prior consent of the author.
+
+This software is provided 'as-is', without any express or implied
+warranty. In no event will the author be held liable for any damages
+arising from the use of this software.
+
+If you would like to do something with XV that this copyright
+prohibits (such as distributing it with a commercial product, using
+portions of the source in some other program, distributing registered
+copies, etc.), please contact the author (preferably via email).
+Arrangements can probably be worked out.
+
+
+The author may be contacted via:
+ US Mail: John Bradley
+ 1053 Floyd Terrace
+ Bryn Mawr, PA 19010
+
+ FAX: (610) 520-2042
+
+Electronic Mail regarding XV should be sent to one of these three addresses:
+ xv@devo.dccs.upenn.edu - general XV questions
+ xvbiz@devo.dccs.upenn.edu - all XV licensing questions
+ xvtech@devo.dccs.upenn.edu - bug reports, technical questions
+
+Please do *not* send electronic mail directly to the author, as he
+gets more than enough as it is.
+
+
diff --git a/xv-3.10a-libpng15.patch b/xv-3.10a-libpng15.patch
new file mode 100644
index 000000000000..43c51766839c
--- /dev/null
+++ b/xv-3.10a-libpng15.patch
@@ -0,0 +1,520 @@
+--- xvinfo.c
++++ xvinfo.c
+@@ -26,7 +26,7 @@
+ #define INFOHIGH 270
+
+ /* max length of an Info String */
+-#define ISTRLEN 80
++#define ISTRLEN 256
+
+ /* baseline of top line of text */
+ #define TOPBASE (36 + penn_height/2 + 4 + 8 + ASCENT)
+--- xvpng.c
++++ xvpng.c
+@@ -31,6 +31,7 @@
+
+ #ifdef HAVE_PNG
+
++#include "zlib.h"
+ #include "png.h"
+
+ /*** Stuff for PNG Dialog box ***/
+@@ -41,7 +42,9 @@
+ #define COMPRESSION 6 /* default zlib compression level, not max
+ (Z_BEST_COMPRESSION) */
+
+-#define HAVE_tRNS (info_ptr->valid & PNG_INFO_tRNS)
++/* old
++#define HAVE_tRNS (info_ptr->valid & PNG_INFO_tRNS) */
++#define HAVE_tRNS png_get_valid(png_ptr,info_ptr,PNG_INFO_tRNS)
+
+ #define DWIDE 86
+ #define DHIGH 104
+@@ -444,6 +447,10 @@
+ byte *p, *png_line;
+ char software[256];
+ char *savecmnt;
++ /* for storing values until all are accumulated, so that the image header can be set in full */
++ int _bit_depth,_color_type,_interlace_type,_compression_type,_filter_type;
++ png_uint_32 _width,_height;
++ png_time _mod_time;
+
+ if ((png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL,
+ png_xv_error, png_xv_warning)) == NULL) {
+@@ -458,7 +465,7 @@
+ FatalError(software);
+ }
+
+- if (setjmp(png_ptr->jmpbuf)) {
++ if (setjmp(png_jmpbuf(png_ptr))) {
+ png_destroy_write_struct(&png_ptr, &info_ptr);
+ return -1;
+ }
+@@ -489,8 +496,8 @@
+ png_set_filter(png_ptr, 0, filter);
+ }
+
+- info_ptr->width = w;
+- info_ptr->height = h;
++ _width = w;
++ _height = h;
+ if (w <= 0 || h <= 0) {
+ SetISTR(ISTR_WARNING, "%s: image dimensions out of range (%dx%d)",
+ fbasename, w, h);
+@@ -498,7 +505,7 @@
+ return -1;
+ }
+
+- info_ptr->interlace_type = interCB.val ? 1 : 0;
++ _interlace_type = interCB.val ? PNG_INTERLACE_ADAM7 : PNG_INTERLACE_NONE;
+
+ linesize = 0; /* quiet a compiler warning */
+
+@@ -542,40 +549,44 @@
+ png_destroy_write_struct(&png_ptr, &info_ptr);
+ return -1;
+ }
+- info_ptr->color_type = PNG_COLOR_TYPE_RGB;
+- info_ptr->bit_depth = 8;
++ _color_type = PNG_COLOR_TYPE_RGB;
++ _bit_depth = 8;
+ } else /* ptype == PIC8 */ {
+ linesize = w;
+- info_ptr->color_type = PNG_COLOR_TYPE_PALETTE;
++ _color_type = PNG_COLOR_TYPE_PALETTE;
+ if (numuniqcols <= 2)
+- info_ptr->bit_depth = 1;
++ _bit_depth = 1;
+ else
+ if (numuniqcols <= 4)
+- info_ptr->bit_depth = 2;
++ _bit_depth = 2;
+ else
+ if (numuniqcols <= 16)
+- info_ptr->bit_depth = 4;
++ _bit_depth = 4;
+ else
+- info_ptr->bit_depth = 8;
++ _bit_depth = 8;
+
+ for (i = 0; i < numuniqcols; i++) {
+ palette[i].red = r1[i];
+ palette[i].green = g1[i];
+ palette[i].blue = b1[i];
+ }
+- info_ptr->num_palette = numuniqcols;
+- info_ptr->palette = palette;
++/* cannot find a setter for this, unsure if it is necessary anymore...
+ info_ptr->valid |= PNG_INFO_PLTE;
++*/
++ /* set the header just in case it's needed */
++ png_set_IHDR(png_ptr,info_ptr,_width,_height,_bit_depth,_color_type,
++ _interlace_type,PNG_COMPRESSION_TYPE_DEFAULT,PNG_FILTER_TYPE_DEFAULT);
++ png_set_PLTE(png_ptr,info_ptr,palette,numuniqcols);
+ }
+ }
+
+ else if (colorType == F_GREYSCALE || colorType == F_BWDITHER) {
+- info_ptr->color_type = PNG_COLOR_TYPE_GRAY;
++ _color_type = PNG_COLOR_TYPE_GRAY;
+ if (colorType == F_BWDITHER) {
+ /* shouldn't happen */
+ if (ptype == PIC24) FatalError("PIC24 and B/W Stipple in WritePNG()");
+
+- info_ptr->bit_depth = 1;
++ _bit_depth = 1;
+ if (MONO(r1[0], g1[0], b1[0]) > MONO(r1[1], g1[1], b1[1])) {
+ remap[0] = 1;
+ remap[1] = 0;
+@@ -595,7 +606,7 @@
+ png_destroy_write_struct(&png_ptr, &info_ptr);
+ return -1;
+ }
+- info_ptr->bit_depth = 8;
++ _bit_depth = 8;
+ }
+ else /* ptype == PIC8 */ {
+ int low_precision;
+@@ -617,7 +628,7 @@
+ for (; i < 256; i++)
+ remap[i]=0; /* shouldn't be necessary, but... */
+
+- info_ptr->bit_depth = 8;
++ _bit_depth = 8;
+
+ /* Note that this fails most of the time because of gamma */
+ /* (and that would be a bug: GRR FIXME) */
+@@ -636,7 +647,7 @@
+ for (i = 0; i < numuniqcols; i++) {
+ remap[i] &= 0xf;
+ }
+- info_ptr->bit_depth = 4;
++ _bit_depth = 4;
+
+ /* try to adjust to 2-bit precision grayscale */
+
+@@ -652,7 +663,7 @@
+ for (i = 0; i < numuniqcols; i++) {
+ remap[i] &= 3;
+ }
+- info_ptr->bit_depth = 2;
++ _bit_depth = 2;
+
+ /* try to adjust to 1-bit precision grayscale */
+
+@@ -668,7 +679,7 @@
+ for (i = 0; i < numuniqcols; i++) {
+ remap[i] &= 1;
+ }
+- info_ptr->bit_depth = 1;
++ _bit_depth = 1;
+ }
+ }
+ }
+@@ -677,6 +688,9 @@
+ else
+ png_error(png_ptr, "Unknown colorstyle in WritePNG");
+
++ png_set_IHDR(png_ptr,info_ptr,_width,_height,_bit_depth,_color_type,
++ _interlace_type,PNG_COMPRESSION_TYPE_DEFAULT,PNG_FILTER_TYPE_DEFAULT);
++
+ if ((text = (png_textp)malloc(sizeof(png_text)))) {
+ sprintf(software, "XV %s", REVDATE);
+
+@@ -685,20 +699,22 @@
+ text->text = software;
+ text->text_length = strlen(text->text);
+
+- info_ptr->max_text = 1;
+- info_ptr->num_text = 1;
+- info_ptr->text = text;
++/* max_text seems to be internal only now, do not set
++ info_ptr->max_text = 1; */
++ png_set_text(png_ptr,info_ptr,text,1);
+ }
+
+ Display_Gamma = gDial.val; /* Save the current gamma for loading */
+
+ // GRR FIXME: add .Xdefaults option to omit writing gamma (size, cumulative errors when editing)--alternatively, modify save box to include "omit" checkbox
+- info_ptr->gamma = 1.0/gDial.val;
+- info_ptr->valid |= PNG_INFO_gAMA;
++ png_set_gAMA(png_ptr,info_ptr,1.0/gDial.val);
++/* doesn't seem to be a way to set valid directly anymore, unnecessary maybe..
++ info_ptr->valid |= PNG_INFO_gAMA; */
+
++/* might need to be png_write_info_before_PLTE() ... */
+ png_write_info(png_ptr, info_ptr);
+
+- if (info_ptr->bit_depth < 8)
++ if (_bit_depth < 8)
+ png_set_packing(png_ptr);
+
+ pass=png_set_interlace_handling(png_ptr);
+@@ -711,13 +727,13 @@
+ int j;
+ p = pic;
+ for (j = 0; j < h; ++j) {
+- if (info_ptr->color_type == PNG_COLOR_TYPE_GRAY) {
++ if (_color_type == PNG_COLOR_TYPE_GRAY) {
+ int k;
+ for (k = 0; k < w; ++k)
+ png_line[k] = ptype==PIC24 ? MONO(p[k*3], p[k*3+1], p[k*3+2]) :
+ remap[pc2nc[p[k]]];
+ png_write_row(png_ptr, png_line);
+- } else if (info_ptr->color_type == PNG_COLOR_TYPE_PALETTE) {
++ } else if (_color_type == PNG_COLOR_TYPE_PALETTE) {
+ int k;
+ for (k = 0; k < w; ++k)
+ png_line[k] = pc2nc[p[k]];
+@@ -739,28 +755,31 @@
+ (savecmnt = (char *)malloc((strlen(picComments) + 1)*sizeof(char)))) {
+ png_textp tp;
+ char *comment, *key;
++ int nt;
++ int mt;
+
+ strcpy(savecmnt, picComments);
+ key = savecmnt;
++ png_get_text(png_ptr,info_ptr,&tp,&mt); /* to get 'max_text' */
+ tp = text;
+- info_ptr->num_text = 0;
++ nt = 0;
+
+ comment = strchr(key, ':');
+
+ do {
+ /* Allocate a larger structure for comments if necessary */
+- if (info_ptr->num_text >= info_ptr->max_text)
++ if (nt >= mt)
+ {
+ if ((tp =
+- realloc(text, (info_ptr->num_text + 2)*sizeof(png_text))) == NULL)
++ realloc(text, (nt + 2)*sizeof(png_text))) == NULL)
+ {
+ break;
+ }
+ else
+ {
+ text = tp;
+- tp = &text[info_ptr->num_text];
+- info_ptr->max_text += 2;
++ tp = &text[nt];
++ mt += 2;
+ }
+ }
+
+@@ -810,7 +829,7 @@
+ }
+
+ tp->compression = tp->text_length > 640 ? 0 : -1;
+- info_ptr->num_text++;
++ nt++;
+ tp++;
+ }
+ }
+@@ -834,27 +853,29 @@
+ tp->text = key;
+ tp->text_length = q - key;
+ tp->compression = tp->text_length > 750 ? 0 : -1;
+- info_ptr->num_text++;
++ nt++;
+ key = NULL;
+ }
+ } while (key && *key);
++ png_set_text(png_ptr,info_ptr,text,nt);
+ }
+ else {
+- info_ptr->num_text = 0;
++ png_set_text(png_ptr,info_ptr,text,0);
+ }
+ }
+- info_ptr->text = text;
+
+- png_convert_from_time_t(&(info_ptr->mod_time), time(NULL));
+- info_ptr->valid |= PNG_INFO_tIME;
++ png_convert_from_time_t(&_mod_time, time(NULL));
++ png_set_tIME(png_ptr,info_ptr,&_mod_time);
++/* dunno how to set validity
++ info_ptr->valid |= PNG_INFO_tIME; */
+
+ png_write_end(png_ptr, info_ptr);
+ fflush(fp); /* just in case we core-dump before finishing... */
+
+ if (text) {
+ free(text);
+- /* must do this or png_destroy_write_struct() 0.97+ will free text again: */
+- info_ptr->text = (png_textp)NULL;
++ /* must do this or png_destroy_write_struct() 0.97+ will free text again:
++ info_ptr->text = (png_textp)NULL; */
+ if (savecmnt)
+ {
+ free(savecmnt);
+@@ -886,6 +907,14 @@
+ int pass;
+ int gray_to_rgb;
+ size_t commentsize;
++ /* temp storage vars for libpng15 migration */
++ int _bit_depth,_color_type,_interlace_type,_compression_type,_filter_type,_num_text,_num_palette;
++ png_uint_32 _width,_height;
++ png_timep _mod_time;
++ double _gamma;
++ png_textp _text;
++ png_colorp _palette;
++ png_color_16p _background;
+
+ fbasename = BaseName(fname);
+
+@@ -921,7 +950,7 @@
+ FatalError("malloc failure in LoadPNG");
+ }
+
+- if (setjmp(png_ptr->jmpbuf)) {
++ if (setjmp(png_jmpbuf(png_ptr))) {
+ fclose(fp);
+ png_destroy_read_struct(&png_ptr, &info_ptr, (png_infopp)NULL);
+ if (!read_anything) {
+@@ -945,8 +974,10 @@
+ #endif
+ png_read_info(png_ptr, info_ptr);
+
+- pinfo->w = pinfo->normw = info_ptr->width;
+- pinfo->h = pinfo->normh = info_ptr->height;
++ png_get_IHDR(png_ptr,info_ptr,&_width,&_height,&_bit_depth,&_color_type,&_interlace_type,NULL,NULL);
++
++ pinfo->w = pinfo->normw = _width;
++ pinfo->h = pinfo->normh = _height;
+ if (pinfo->w <= 0 || pinfo->h <= 0) {
+ SetISTR(ISTR_WARNING, "%s: image dimensions out of range (%dx%d)",
+ fbasename, pinfo->w, pinfo->h);
+@@ -957,9 +988,9 @@
+ pinfo->frmType = F_PNG;
+
+ sprintf(pinfo->fullInfo, "PNG, %d bit ",
+- info_ptr->bit_depth * info_ptr->channels);
++ _bit_depth * png_get_channels(png_ptr,info_ptr));
+
+- switch(info_ptr->color_type) {
++ switch(_color_type) {
+ case PNG_COLOR_TYPE_PALETTE:
+ strcat(pinfo->fullInfo, "palette color");
+ break;
+@@ -983,15 +1014,17 @@
+
+ sprintf(pinfo->fullInfo + strlen(pinfo->fullInfo),
+ ", %sinterlaced. (%d bytes)",
+- info_ptr->interlace_type ? "" : "non-", filesize);
++ _interlace_type ? "" : "non-", filesize);
+
+- sprintf(pinfo->shrtInfo, "%lux%lu PNG", info_ptr->width, info_ptr->height);
++ sprintf(pinfo->shrtInfo, "%lux%lu PNG", _width, _height);
+
+- if (info_ptr->bit_depth < 8)
++ if (_bit_depth < 8)
+ png_set_packing(png_ptr);
+
+- if (info_ptr->valid & PNG_INFO_gAMA)
+- png_set_gamma(png_ptr, Display_Gamma, info_ptr->gamma);
++ if (png_get_valid(png_ptr,info_ptr,PNG_INFO_gAMA)) {
++ png_get_gAMA(png_ptr,info_ptr,&_gamma);
++ png_set_gamma(png_ptr, Display_Gamma, _gamma);
++ }
+ /*
+ *else
+ * png_set_gamma(png_ptr, Display_Gamma, 0.45);
+@@ -1000,7 +1033,7 @@
+ gray_to_rgb = 0; /* quiet a compiler warning */
+
+ if (have_imagebg) {
+- if (info_ptr->bit_depth == 16) {
++ if (_bit_depth == 16) {
+ my_background.red = imagebgR;
+ my_background.green = imagebgG;
+ my_background.blue = imagebgB;
+@@ -1013,8 +1046,8 @@
+ }
+ png_set_background(png_ptr, &my_background, PNG_BACKGROUND_GAMMA_SCREEN,
+ 0, Display_Gamma);
+- if ((info_ptr->color_type == PNG_COLOR_TYPE_GRAY_ALPHA ||
+- (info_ptr->color_type == PNG_COLOR_TYPE_GRAY && HAVE_tRNS)) &&
++ if ((_color_type == PNG_COLOR_TYPE_GRAY_ALPHA ||
++ (_color_type == PNG_COLOR_TYPE_GRAY && HAVE_tRNS)) &&
+ (imagebgR != imagebgG || imagebgR != imagebgB)) /* i.e., colored bg */
+ {
+ png_set_gray_to_rgb(png_ptr);
+@@ -1022,8 +1055,9 @@
+ gray_to_rgb = 1;
+ }
+ } else {
+- if (info_ptr->valid & PNG_INFO_bKGD) {
+- png_set_background(png_ptr, &info_ptr->background,
++ if (png_get_valid(png_ptr,info_ptr,PNG_INFO_bKGD)) {
++ png_get_bKGD(png_ptr,info_ptr,&_background);
++ png_set_background(png_ptr, _background,
+ PNG_BACKGROUND_GAMMA_FILE, 1, 1.0);
+ } else {
+ my_background.red = my_background.green = my_background.blue =
+@@ -1033,13 +1067,13 @@
+ }
+ }
+
+- if (info_ptr->bit_depth == 16)
++ if (_bit_depth == 16)
+ png_set_strip_16(png_ptr);
+
+- if (info_ptr->color_type == PNG_COLOR_TYPE_GRAY ||
+- info_ptr->color_type == PNG_COLOR_TYPE_GRAY_ALPHA)
++ if (_color_type == PNG_COLOR_TYPE_GRAY ||
++ _color_type == PNG_COLOR_TYPE_GRAY_ALPHA)
+ {
+- if (info_ptr->bit_depth == 1)
++ if (_bit_depth == 1)
+ pinfo->colType = F_BWDITHER;
+ else
+ pinfo->colType = F_GREYSCALE;
+@@ -1049,9 +1083,11 @@
+ pass=png_set_interlace_handling(png_ptr);
+
+ png_read_update_info(png_ptr, info_ptr);
++ /* get HIDR again just in case the info_ptr changed */
++ png_get_IHDR(png_ptr,info_ptr,&_width,&_height,&_bit_depth,&_color_type,&_interlace_type,NULL,NULL);
+
+- if (info_ptr->color_type == PNG_COLOR_TYPE_RGB ||
+- info_ptr->color_type == PNG_COLOR_TYPE_RGB_ALPHA || gray_to_rgb)
++ if (_color_type == PNG_COLOR_TYPE_RGB ||
++ _color_type == PNG_COLOR_TYPE_RGB_ALPHA || gray_to_rgb)
+ {
+ linesize = 3 * pinfo->w;
+ if (linesize/3 < pinfo->w) { /* know pinfo->w > 0 (see above) */
+@@ -1065,16 +1101,17 @@
+ } else {
+ linesize = pinfo->w;
+ pinfo->type = PIC8;
+- if (info_ptr->color_type == PNG_COLOR_TYPE_GRAY ||
+- info_ptr->color_type == PNG_COLOR_TYPE_GRAY_ALPHA) {
++ if (_color_type == PNG_COLOR_TYPE_GRAY ||
++ _color_type == PNG_COLOR_TYPE_GRAY_ALPHA) {
+ for (i = 0; i < 256; i++)
+ pinfo->r[i] = pinfo->g[i] = pinfo->b[i] = i;
+ } else {
+ pinfo->colType = F_FULLCOLOR;
+- for (i = 0; i < info_ptr->num_palette; i++) {
+- pinfo->r[i] = info_ptr->palette[i].red;
+- pinfo->g[i] = info_ptr->palette[i].green;
+- pinfo->b[i] = info_ptr->palette[i].blue;
++ png_get_PLTE(png_ptr,info_ptr,&_palette,&_num_palette);
++ for (i = 0; i < _num_palette; i++) {
++ pinfo->r[i] = _palette[i].red;
++ pinfo->g[i] = _palette[i].green;
++ pinfo->b[i] = _palette[i].blue;
+ }
+ }
+ }
+@@ -1092,7 +1129,7 @@
+ png_error(png_ptr, "can't allocate space for PNG image");
+ }
+
+- png_start_read_image(png_ptr);
++ /*png_start_read_image(png_ptr); -- causes a warning and seems to be unnecessary */
+
+ for (i = 0; i < pass; i++) {
+ byte *p = pinfo->pic;
+@@ -1106,22 +1143,23 @@
+
+ png_read_end(png_ptr, info_ptr);
+
+- if (info_ptr->num_text > 0) {
++ png_get_text(png_ptr,info_ptr,&_text,&_num_text);
++ if (_num_text > 0) {
+ commentsize = 1;
+
+- for (i = 0; i < info_ptr->num_text; i++)
+- commentsize += strlen(info_ptr->text[i].key) + 1 +
+- info_ptr->text[i].text_length + 2;
++ for (i = 0; i < _num_text; i++)
++ commentsize += strlen(_text[i].key) + 1 +
++ _text[i].text_length + 2;
+
+ if ((pinfo->comment = malloc(commentsize)) == NULL) {
+ png_warning(png_ptr,"can't allocate comment string");
+ }
+ else {
+ pinfo->comment[0] = '\0';
+- for (i = 0; i < info_ptr->num_text; i++) {
+- strcat(pinfo->comment, info_ptr->text[i].key);
++ for (i = 0; i < _num_text; i++) {
++ strcat(pinfo->comment, _text[i].key);
+ strcat(pinfo->comment, "::");
+- strcat(pinfo->comment, info_ptr->text[i].text);
++ strcat(pinfo->comment, _text[i].text);
+ strcat(pinfo->comment, "\n");
+ }
+ }
+@@ -1143,7 +1181,7 @@
+ {
+ SetISTR(ISTR_WARNING,"%s: libpng error: %s", fbasename, message);
+
+- longjmp(png_ptr->jmpbuf, 1);
++ longjmp(png_jmpbuf(png_ptr), 1);
+ }
+
+