summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFlorian Franzmann2013-03-17 14:00:49 +0100
committerFlorian Franzmann2013-03-17 14:00:49 +0100
commitc88e5d7a16e0e4197189252ad7c1cf53d678a98a (patch)
tree6d7b6482cd2dc583e44ef28dfd30f9101af10a11
parent6e345ffad597cf8da1de70b3b1a84f543e8abc4a (diff)
graphics/xli: new spell, a command line driven image viewer
-rw-r--r--ChangeLog3
-rwxr-xr-xgraphics/xli/BUILD2
-rwxr-xr-xgraphics/xli/DEPENDS1
-rwxr-xr-xgraphics/xli/DETAILS14
-rw-r--r--graphics/xli/HISTORY4
-rwxr-xr-xgraphics/xli/INSTALL1
-rwxr-xr-xgraphics/xli/PRE_BUILD11
-rw-r--r--graphics/xli/fix-scale-zoom.patch61
-rw-r--r--graphics/xli/libpng14.patch14
-rw-r--r--graphics/xli/xli-security-gentoo.diff199
10 files changed, 310 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
index f6338e6b39..547514c5f7 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,6 @@
+2013-03-17 Florian Franzmann <siflfran@hawo.stw.uni-erlangen.de>
+ * graphics/xli: new spell, command line driven image viewer
+
2013-03-15 Florian Franzmann <siflfran@hawo.stw.uni-erlangen.de>
* science/yacas: new spell, a computer algebra system
diff --git a/graphics/xli/BUILD b/graphics/xli/BUILD
new file mode 100755
index 0000000000..39978a97c3
--- /dev/null
+++ b/graphics/xli/BUILD
@@ -0,0 +1,2 @@
+xmkmf &&
+default_build_make
diff --git a/graphics/xli/DEPENDS b/graphics/xli/DEPENDS
new file mode 100755
index 0000000000..fdb96c3d75
--- /dev/null
+++ b/graphics/xli/DEPENDS
@@ -0,0 +1 @@
+depends libx11
diff --git a/graphics/xli/DETAILS b/graphics/xli/DETAILS
new file mode 100755
index 0000000000..754a0ee647
--- /dev/null
+++ b/graphics/xli/DETAILS
@@ -0,0 +1,14 @@
+ SPELL=xli
+ VERSION=2005-02-27
+ SOURCE="${SPELL}-${VERSION}.tar.gz"
+ SOURCE_URL[0]=http://distfiles.gentoo.org/distfiles/${SOURCE}
+ SOURCE_HASH=sha512:132b28396ebf3832dc35ff5fa7c102539ef30a194512fe6577ce1432bb84ecd7b4368e75eaf59f26a806900f63e1bfb9a93487ce1ebe3cfef2199256a783ccf7
+SOURCE_DIRECTORY="${BUILD_DIRECTORY}/${SPELL}-${VERSION}"
+ WEB_SITE="http://web.aanet.com.au/gwg/xli.html"
+ LICENSE[0]=MIT
+ ENTERED=20130317
+ SHORT="a command line driven image viewer"
+cat << EOF
+This utility will view several types of images under X11, or load images
+onto the X11 root window.
+EOF
diff --git a/graphics/xli/HISTORY b/graphics/xli/HISTORY
new file mode 100644
index 0000000000..94e371bfd9
--- /dev/null
+++ b/graphics/xli/HISTORY
@@ -0,0 +1,4 @@
+2013-03-17 Florian Franzmann <siflfran@hawo.stw.uni-erlangen.de>
+ * BUILD, DEPENDS, DETAILS, fix-scale-zoom.patch, INSTALL, libpng14.patch,
+ PRE_BUILD, xli-security-gentoo.diff: spell created, patches are from gentoo
+
diff --git a/graphics/xli/INSTALL b/graphics/xli/INSTALL
new file mode 100755
index 0000000000..305985a812
--- /dev/null
+++ b/graphics/xli/INSTALL
@@ -0,0 +1 @@
+DESTDIR=${INSTALL_ROOT} default_install
diff --git a/graphics/xli/PRE_BUILD b/graphics/xli/PRE_BUILD
new file mode 100755
index 0000000000..28ef520d44
--- /dev/null
+++ b/graphics/xli/PRE_BUILD
@@ -0,0 +1,11 @@
+default_pre_build &&
+cd ${SOURCE_DIRECTORY} &&
+sedit 's:varargs.h:stdarg.h:' rlelib.c &&
+sedit "s:zopen:xli_zopen:g" * &&
+sed -i Imakefile \
+ -e '/^DEFINES =/s/$/ -DHAVE_GUNZIP -DHAVE_BUNZIP2 /' \
+ -e '/CCOPTIONS =/s/=.*/=/' &&
+sedit '/^#include "xli.h"/i#undef _BSD_SOURCE' png.c &&
+patch -p1 < ${SPELL_DIRECTORY}/xli-security-gentoo.diff &&
+patch -p1 < ${SPELL_DIRECTORY}/fix-scale-zoom.patch &&
+patch -p0 < ${SPELL_DIRECTORY}/libpng14.patch
diff --git a/graphics/xli/fix-scale-zoom.patch b/graphics/xli/fix-scale-zoom.patch
new file mode 100644
index 0000000000..44ee262aee
--- /dev/null
+++ b/graphics/xli/fix-scale-zoom.patch
@@ -0,0 +1,61 @@
+As of jpeg-7, the scale coefficents may be set to non-unitary values by the
+initial DCT transform. This caused the original already-scale detection
+algorithm in xli to break.
+
+To avoid this, set the already-scaled marker when we adjust the scale fraction
+(that gets passed into the DCT).
+
+Signed-off-by: Robin H. Johnson <robbat2@gentoo.org>
+
+diff -Nuar -X x xli-2005-02-27.orig/jpeg.c xli-2005-02-27/jpeg.c
+--- xli-2005-02-27.orig/jpeg.c 2005-02-27 16:42:39.000000000 -0800
++++ xli-2005-02-27/jpeg.c 2009-09-05 15:02:12.462635389 -0700
+@@ -211,7 +211,7 @@
+ xli_jpg_err jerr;
+ Image *image = 0;
+ byte **rows = 0;
+- int i, rowbytes;
++ int i, rowbytes, flags;
+
+ CURRFUNC("jpegLoad");
+ zfp = zopen(fullname);
+@@ -248,9 +248,13 @@
+ if (verbose)
+ describe_jpeg(&cinfo, fullname);
+
++ flags = 0;
+ if (image_ops->iscale > 0 && image_ops->iscale < 4) {
+- cinfo.scale_num = 1;
+- cinfo.scale_denom = 1 << image_ops->iscale;
++ flags |= FLAG_ISCALE;
++ //cinfo.scale_num = 1;
++ cinfo.scale_denom *= 1 << image_ops->iscale;
++ if (verbose)
++ printf("scaling to %d/%d\n", cinfo.scale_num, cinfo.scale_denom);
+ } else if (image_ops->iscale_auto) {
+ image_ops->iscale = 0;
+ while (image_ops->iscale < 3 && (cinfo.image_width >>
+@@ -258,9 +262,11 @@
+ cinfo.image_height >> image_ops->iscale >
+ globals.dinfo.height * .9))
+ image_ops->iscale += 1;
+- cinfo.scale_denom = 1 << image_ops->iscale;
++ cinfo.scale_denom *= 1 << image_ops->iscale;
++ if(image_ops->iscale > 0)
++ flags |= FLAG_ISCALE;
+ if (verbose)
+- printf("auto-scaling to 1/%d\n", cinfo.scale_denom);
++ printf("auto-scaling to %d/%d\n", cinfo.scale_num, cinfo.scale_denom);
+ }
+ znocache(zfp);
+
+@@ -288,8 +294,7 @@
+ }
+
+ image->gamma = RETURN_GAMMA;
+- if (cinfo.scale_denom > 1)
+- image->flags |= FLAG_ISCALE;
++ image->flags |= flags;
+
+ rowbytes = cinfo.output_width * cinfo.output_components;
+ assert(image->pixlen * image->width == rowbytes);
diff --git a/graphics/xli/libpng14.patch b/graphics/xli/libpng14.patch
new file mode 100644
index 0000000000..afb4b24208
--- /dev/null
+++ b/graphics/xli/libpng14.patch
@@ -0,0 +1,14 @@
+http://aur.archlinux.org/packages.php?ID=1676
+http://archwyrm.net/~me/xli-libpng.diff
+
+--- png.c
++++ png.c
+@@ -27,7 +27,7 @@
+ if (ret != 8)
+ return 0;
+
+- ret = png_check_sig(buf, 8);
++ ret = !png_sig_cmp(buf, 0, 8);
+
+ return (ret);
+ }
diff --git a/graphics/xli/xli-security-gentoo.diff b/graphics/xli/xli-security-gentoo.diff
new file mode 100644
index 0000000000..7425e67c7c
--- /dev/null
+++ b/graphics/xli/xli-security-gentoo.diff
@@ -0,0 +1,199 @@
+diff -Nrup xli-2005-02-27/imagetypes.c xli-2005-02-27/imagetypes.c
+--- xli-2005-02-27/imagetypes.c 1999-10-24 22:14:57.000000000 -0400
++++ xli-2005-02-27/imagetypes.c 2005-10-18 07:53:46.000000000 -0400
+@@ -53,7 +53,7 @@ Image *loadImage(ImageOptions * image_op
+ Image *image;
+ int a;
+
+- if (findImage(image_ops->name, fullname) < 0) {
++ if (findImage(image_ops->name, fullname, BUFSIZ) < 0) {
+ if (errno == ENOENT)
+ printf("%s: image not found\n", image_ops->name);
+ else if (errno == EISDIR)
+@@ -95,7 +95,7 @@ void identifyImage(char *name)
+ char fullname[BUFSIZ];
+ int a;
+
+- if (findImage(name, fullname) < 0) {
++ if (findImage(name, fullname, BUFSIZ) < 0) {
+ if (errno == ENOENT)
+ printf("%s: image not found\n", name);
+ else if (errno == EISDIR)
+diff -Nrup xli-2005-02-27/path.c xli-2005-02-27/path.c
+--- xli-2005-02-27/path.c 2005-02-27 19:42:39.000000000 -0500
++++ xli-2005-02-27/path.c 2005-10-18 07:56:45.000000000 -0400
+@@ -172,12 +172,12 @@ static int fileIsOk(char *fullname, stru
+ /* find an image with paths and extensions from defaults files. returns
+ * -1 if access denied or not found, 0 if ok.
+ */
+-int findImage(char *name, char *fullname)
++int findImage(char *name, char *fullname, size_t size)
+ {
+ unsigned int p, e;
+ struct stat sbuf;
+
+- strcpy(fullname, name);
++ strncpy(fullname, name, size);
+ if (!strcmp(name, "stdin")) /* stdin is special name */
+ return (0);
+
+@@ -185,26 +185,26 @@ int findImage(char *name, char *fullname
+ if (!stat(fullname, &sbuf))
+ return (fileIsOk(fullname, &sbuf));
+ #ifndef NO_COMPRESS
+- strcat(fullname, ".Z");
++ strncat(fullname, ".Z", size);
+ if (!stat(fullname, &sbuf))
+ return (fileIsOk(fullname, &sbuf));
+ #endif
+
+ for (p = 0; p < NumPaths; p++) {
+- sprintf(fullname, "%s/%s", Paths[p], name);
++ snprintf(fullname, size, "%s/%s", Paths[p], name);
+ if (!stat(fullname, &sbuf))
+ return (fileIsOk(fullname, &sbuf));
+ #ifndef NO_COMPRESS
+- strcat(fullname, ".Z");
++ strncat(fullname, ".Z", size);
+ if (!stat(fullname, &sbuf))
+ #endif
+ return (fileIsOk(fullname, &sbuf));
+ for (e = 0; e < NumExts; e++) {
+- sprintf(fullname, "%s/%s%s", Paths[p], name, Exts[e]);
++ snprintf(fullname, size, "%s/%s%s", Paths[p], name, Exts[e]);
+ if (!stat(fullname, &sbuf))
+ return (fileIsOk(fullname, &sbuf));
+ #ifndef NO_COMPRESS
+- strcat(fullname, ".Z");
++ strncat(fullname, ".Z", size);
+ if (!stat(fullname, &sbuf))
+ return (fileIsOk(fullname, &sbuf));
+ #endif
+@@ -212,11 +212,11 @@ int findImage(char *name, char *fullname
+ }
+
+ for (e = 0; e < NumExts; e++) {
+- sprintf(fullname, "%s%s", name, Exts[e]);
++ snprintf(fullname, size, "%s%s", name, Exts[e]);
+ if (!stat(fullname, &sbuf))
+ return (fileIsOk(fullname, &sbuf));
+ #ifndef NO_COMPRESS
+- strcat(fullname, ".Z");
++ strncat(fullname, ".Z", size);
+ if (!stat(fullname, &sbuf))
+ return (fileIsOk(fullname, &sbuf));
+ #endif
+@@ -241,7 +241,7 @@ void listImages(void)
+ for (a = 0; a < NumPaths; a++) {
+ printf("%s:\n", Paths[a]);
+ fflush(stdout);
+- sprintf(buf, "ls %s", Paths[a]);
++ snprintf(buf, sizeof(buf)-1, "ls %s", Paths[a]);
+ if (system(buf) < 0) {
+ perror("ls");
+ return;
+@@ -296,14 +296,14 @@ char *expandPath(char *p)
+ var++;
+ else if (*p == '~') {
+ buf1[b1] = '\0';
+- strcat(buf1, getenv("HOME"));
++ strncat(buf1, getenv("HOME"), sizeof(buf1)-1);
+ b1 = strlen(buf1);
+ var = 0;
+ } else if (*p == '/' || *p == '}') {
+ if (var) {
+ buf1[b1] = '\0';
+ buf2[b2] = '\0';
+- strcat(buf1, getenv(buf2));
++ strncat(buf1, getenv(buf2), sizeof(buf1));
+ b1 = strlen(buf1);
+ buf2[0] = '\0';
+ b2 = 0;
+diff -Nrup xli-2005-02-27/reduce.c xli-2005-02-27/reduce.c
+--- xli-2005-02-27/reduce.c 1999-10-24 22:15:02.000000000 -0400
++++ xli-2005-02-27/reduce.c 2005-10-18 07:33:34.000000000 -0400
+@@ -178,7 +178,7 @@ Image *reduce(Image *image, unsigned col
+ /* get destination image */
+ depth = colorsToDepth(OutColors);
+ new_image = newRGBImage(image->width, image->height, depth);
+- sprintf(buf, "%s (%d colors)", image->title, OutColors);
++ snprintf(buf, sizeof(buf)-1, "%s (%d colors)", image->title, OutColors);
+ new_image->title = dupString(buf);
+ new_image->gamma = image->gamma;
+
+diff -Nrup xli-2005-02-27/rlelib.c xli-2005-02-27/rlelib.c
+--- xli-2005-02-27/rlelib.c 2005-10-18 07:40:51.000000000 -0400
++++ xli-2005-02-27/rlelib.c 2005-10-18 07:48:12.000000000 -0400
+@@ -18,7 +18,7 @@
+ #undef DEBUG
+
+ #ifdef DEBUG
+-# define debug(xx) fprintf(stderr,xx)
++# define debug(xx) fprintf(stderr, "%s", xx)
+ #else
+ # define debug(xx)
+ #endif
+Files xli-2005-02-27/xli and xli-2005-02-27/xli differ
+diff -Nrup xli-2005-02-27/xli.h xli-2005-02-27/xli.h
+--- xli-2005-02-27/xli.h 1999-10-24 22:15:07.000000000 -0400
++++ xli-2005-02-27/xli.h 2005-10-19 07:49:21.000000000 -0400
+@@ -229,7 +229,7 @@ char *xlistrstr(char *s1, char *s2);
+
+ /* path.c */
+ char *expandPath(char *p);
+-int findImage(char *name, char *fullname);
++int findImage(char *name, char *fullname, size_t size);
+ void listImages(void);
+ void loadPathsAndExts(void);
+ void showPath(void);
+diff -Nrup xli-2005-02-27/xlito.c xli-2005-02-27/xlito.c
+--- xli-2005-02-27/xlito.c 2005-02-27 19:42:39.000000000 -0500
++++ xli-2005-02-27/xlito.c 2005-10-18 07:48:54.000000000 -0400
+@@ -31,7 +31,7 @@ char *pname, *fname;
+ #undef DEBUG
+
+ #ifdef DEBUG
+-# define debug(xx) fprintf(stderr,xx)
++# define debug(xx) fprintf(stderr, "%s", xx)
+ #else
+ # define debug(xx)
+ #endif
+diff -Nrup xli-2005-02-27/zoom.c xli-2005-02-27/zoom.c
+--- xli-2005-02-27/zoom.c 2005-02-27 19:42:39.000000000 -0500
++++ xli-2005-02-27/zoom.c 2005-10-18 07:35:42.000000000 -0400
+@@ -52,30 +52,30 @@ Image *zoom(Image *oimage, unsigned int
+ if (verbose)
+ printf(" Zooming image Y axis by %d%%...", yzoom);
+ if (changetitle)
+- sprintf(buf, "%s (Y zoom %d%%)", oimage->title, yzoom);
++ snprintf(buf, sizeof(buf)-1, "%s (Y zoom %d%%)", oimage->title, yzoom);
+ }
+ else if (!yzoom) {
+ if (verbose)
+ printf(" Zooming image X axis by %d%%...", xzoom);
+ if (changetitle)
+- sprintf(buf, "%s (X zoom %d%%)", oimage->title, xzoom);
++ snprintf(buf, sizeof(buf)-1, "%s (X zoom %d%%)", oimage->title, xzoom);
+ }
+ else if (xzoom == yzoom) {
+ if (verbose)
+ printf(" Zooming image by %d%%...", xzoom);
+ if (changetitle)
+- sprintf(buf, "%s (%d%% zoom)", oimage->title, xzoom);
++ snprintf(buf, sizeof(buf)-1, "%s (%d%% zoom)", oimage->title, xzoom);
+ }
+ else {
+ if (verbose)
+ printf(" Zooming image X axis by %d%% and Y axis by %d%%...",
+ xzoom, yzoom);
+ if (changetitle)
+- sprintf(buf, "%s (X zoom %d%% Y zoom %d%%)", oimage->title,
++ snprintf(buf, sizeof(buf)-1, "%s (X zoom %d%% Y zoom %d%%)", oimage->title,
+ xzoom, yzoom);
+ }
+ if (!changetitle)
+- strcpy(buf,oimage->title);
++ strncpy(buf,oimage->title, sizeof(buf)-1);
+
+ if (verbose)
+ fflush(stdout);