diff options
Diffstat (limited to 'source/xap')
111 files changed, 8771 insertions, 1220 deletions
diff --git a/source/xap/MPlayer/MPlayer.SlackBuild b/source/xap/MPlayer/MPlayer.SlackBuild index f76652074..7a9cfbe1d 100755 --- a/source/xap/MPlayer/MPlayer.SlackBuild +++ b/source/xap/MPlayer/MPlayer.SlackBuild @@ -23,13 +23,13 @@ # SUCH DAMAGE. # ----------------------------------------------------------------------------- # -# Slackware SlackBuild script +# Slackware SlackBuild script # =========================== # By: Eric Hameleers <alien@slackware.com> # For: MPlayer # Descr: a movie player for LINUX # URL: http://www.mplayerhq.hu/ -# Needs: +# Needs: # Changelog: # 1.0rc1-1: 05/Nov/2006 by Eric Hameleers <alien@slackware.com> # * Initial build. @@ -85,21 +85,27 @@ # * Update to the latest 1.1 branch, and the same ffmpeg that was # shipped with the 1.1.1 tarball. The official 1.1.1 release # did not start a new repo branch, so this is the latest. -# +# 20150308-1: 09/mar/2015 by pprkut@slackware.com +# * Update to latest version from trunk, together with ffmpeg 2.6, +# which was released roughly around that date as well. +# 20140403-1: 03/apr/2015 by volkerdi@slackware.com +# * Update to latest version from trunk and ffmpeg-2.6.1. +# # Run 'sh MPlayer.SlackBuild' to build a Slackware package. # The package (.txz) plus descriptive .txt file are created in /tmp . -# Install using 'installpkg'. +# Install using 'installpkg'. # # ----------------------------------------------------------------------------- # Set initial variables: PRGNAM=MPlayer -VERSION=${VERSION:-20130819} -BRANCH=${BRANCH:-1.1} # leave empty if you want to build MPlayer trunk -FFMPEG=${FFMPEG:-20130505} -BUILD=${BUILD:-2} +VERSION=${VERSION:-20160125} +BRANCH=${BRANCH:-1.2} # leave empty if you want to build MPlayer trunk +FFMPEG=${FFMPEG:-2.8.6} +BUILD=${BUILD:-3} TAG=${TAG:-} +NUMJOBS=${NUMJOBS:-" -j7 "} # Show the branch version in the package name if we build from a branch: [ -n "$BRANCH" ] && PKGVERSION=${BRANCH}_${VERSION} || PKGVERSION=${VERSION} @@ -117,7 +123,7 @@ fi FFURI=git://git.videolan.org/ffmpeg.git DEFSKIN=${DEFSKIN:-"Blue"} # Download more skins at the following url: -SKINVER=${SKINVER:-"1.8"} # http://www.mplayerhq.hu/design7/dload.html +SKINVER=${SKINVER:-"1.11"} # http://www.mplayerhq.hu/design7/dload.html # Available languages: all cs de en es fr hu it pl ru zh_CN LANGUAGES="en,de,es,fr" @@ -126,7 +132,7 @@ LANGUAGES="en,de,es,fr" MARCH=$( uname -m ) if [ -z "$ARCH" ]; then case "$MARCH" in - i?86) export ARCH=i486 ;; + i?86) export ARCH=i586 ;; armv7hl) export ARCH=$MARCH ;; arm*) export ARCH=arm ;; # Unless $ARCH is already set, use uname -m for all other archs: @@ -153,9 +159,7 @@ CODECSDIR=/usr/lib${LIBDIRSUFFIX}/codecs # --------------------------------------------------------------------------- # -- PATENT ALERT! -- -# MPlayer source contains an internal copy of 'libdvdcss' for reading DVD's. -# This is considered illegal software in some countries. -# Also, MPLayer can be built with MP3 (lame) and AMR audio encoders +# MPLayer can be built with MP3 (lame) and AMR audio encoders # (needed for FLV and .3GP videos) but these libraries are 'contaminated' # with patents from Fraunhofer and GGP. # Also, the AAC encoder has patent issues. @@ -166,12 +170,6 @@ CODECSDIR=/usr/lib${LIBDIRSUFFIX}/codecs # incorporate patented code. So here you go. My Slackware package was # built with "USE_PATENTS=NO" i.e. without using # the lame mp3, faac, AMR and dvdcss libraries. -# This also means that this creates a version of MPlayer that is unable -# to play encrypted DVD's (which is most DVD's on the market). If it is -# allowed in your country to use libdvdcss, this is not a big problem though. -# Install a libdvdcss package and it will be picked up automatically by -# MPlayer's internal libdvdread library, so that MPlayer will again be able -# to play encrypted DVD's. # --------------------------------------------------------------------------- USE_PATENTS=${USE_PATENTS:-"NO"} @@ -187,13 +185,10 @@ OSDFONTS="LiberationSans-Regular.ttf \ Arialuni.ttf arial.ttf \ DejaVuSans.ttf Vera.ttf" -# We will work with a stripped-down source tarball, not containing libdvdcss: -[ "$USE_PATENTS" != "YES" ] && EXTRA="_nolibdvdcss" || EXTRA="" - # Where do we look for sources? SRCDIR=$(cd $(dirname $0); pwd) -SOURCE[0]="$SRCDIR/${PRGNAM}${EXTRA}-${VERSION}.tar.xz" +SOURCE[0]="$SRCDIR/${PRGNAM}-${VERSION}.tar.xz" SRCURL[0]="" # The default skin to use (we need to add at least one) @@ -229,32 +224,21 @@ src_checkout() { && cd MPlayer-${VERSION} \ && svn checkout --revision $REV ${MPURI}/${MPBRANCH} . \ && svn propget svn:externals | sed -e 's/[[:space:]].*$//g' | xargs svn up --revision $REV \ - && find . -type d -name '.svn' -depth | xargs rm -rf \ - && ([ "$USE_PATENTS" != "YES" ] && rm -rf libdvdcss || true) \ && chown -R root:root . \ && cd .. \ - && tar -${TARCOMP}cf ${2} MPlayer-${VERSION} + && tar --exclude-vcs -${TARCOMP}cf ${2} MPlayer-${VERSION} rm -rf MPlayer-${VERSION} ;; 2) # ffmpeg-${FFMPEG} mkdir ffmpeg_temp_checkout_$$ \ && cd ffmpeg_temp_checkout_$$ - if [ "$FFMPEG" = "HEAD" ]; then - # Checkout without downloading version history (fast!): - echo "Checking out HEAD from '$FFURI':" - git clone --depth=1 ${FFURI} ffmpeg - else - # Checkout code from a certain branch and/or date; this will take a - # long time because we have to clone the complete git-repository first: - echo "Checking out branch 'master' at date $FFMPEG from '$FFURI':" - git clone ${FFURI} ffmpeg \ - && cd ffmpeg \ - && git checkout master \ - && git checkout $(git rev-list -n 1 --before="`date -d $FFMPEG`" master) \ - && cd .. - fi + echo "Checking out tag n$FFMPEG from '$FFURI':" + git clone ${FFURI} ffmpeg \ + && cd ffmpeg \ + && git checkout n$FFMPEG \ + && cd .. chown -R root:root . \ - && tar --exclude .git -${TARCOMP}cf ${2} ffmpeg + && tar --exclude-vcs -${TARCOMP}cf ${2} ffmpeg cd .. rm -rf ffmpeg_temp_checkout_$$ ;; @@ -323,36 +307,28 @@ echo "++" echo "|| $PRGNAM-$VERSION" echo "++" -# Warn about libdvdread requirement: -if [ "$USE_PATENTS" != "YES" ]; then - cat <<"EOT" -** -** Removing internal DECSS library. -** If you want to play encrypted DVD's you need to install libdvdcss separately. -** -** If you do not want to remove libdvdcss, then -** edit this SlackBuild script and change the line: -** USE_PATENTS=${USE_PATENTS:-"NO"} -** to: -** USE_PATENTS="YES" -** -EOT - sleep 2 -fi - cd $TMP/tmp-$PRGNAM echo "Extracting the source archive(s) for $PRGNAM..." tar -xvf ${SOURCE[0]} -# Extract the ffmpeg source inside the MPlayer directory: -( cd ${PRGNAM}-${VERSION} && tar -xvf ${SOURCE[2]} ) + +cd ${PRGNAM}-${VERSION} + # remove MPlayer's copy of libswscale + rm -rf ffmpeg + + # Extract the ffmpeg source inside the MPlayer directory: + tar -xvf ${SOURCE[2]} + + # in case we build with an official tarball + if [ -e "ffmpeg-$FFMPEG" ]; then + mv "ffmpeg-$FFMPEG" ffmpeg + fi + +cd .. chown -R root:root * chmod -R u+w,go+r-w,a+X-s * cd ${PRGNAM}-${VERSION} -# Apply patch to fix subtitles: -zcat $SRCDIR/subreader-fix-srt-parsing.patch.gz | patch -p1 --verbose || exit 1 - # Determine what X we're running (the modular X returns the prefix # in the next command, while older versions stay silent): XPREF=$(pkg-config --variable=prefix x11) || true @@ -360,14 +336,22 @@ XPREF=$(pkg-config --variable=prefix x11) || true # Remove support for patent encumbered and possibly illegal code: if [ "$USE_PATENTS" != "YES" ]; then - DO_PATENTED="--disable-libdvdcss-internal \ - --disable-mp3lame --disable-mp3lame-lavc \ + DO_PATENTED="--disable-mp3lame --disable-mp3lame-lavc \ --disable-libopencore_amrnb \ --disable-libopencore_amrwb" else DO_PATENTED="" fi +# fix building against samba 4 +zcat $SRCDIR/include-samba-4.0.patch.gz | patch -p1 --verbose || exit 1 + +# fix building against openjpeg 2 +sed -i "s|lopenjpeg|lopenmj2|" ./configure + +# fix flac playback with embedded album art: +zcat $SRCDIR/MPlayer.demux_lavf.flac.diff.gz | patch -p1 --verbose || exit 1 + echo Building ... # MPlayer wants to automatically determine compiler flags, # so we don't provide CFLAGS. @@ -377,10 +361,13 @@ echo Building ... --confdir=/etc/mplayer \ --enable-gui \ --enable-menu \ + --enable-vdpau \ --disable-arts \ + --disable-ossaudio \ --disable-bitmap-font \ --codecsdir=${CODECSDIR} \ --language="${LANGUAGES}" \ + --extra-cflags="-I/usr/include/openmj2-2.1/" \ ${EXTRACONFIGUREOPTIONS} \ ${DO_PATENTED} \ 2>&1 | tee $OUTPUT/configure-${PRGNAM}.log @@ -388,7 +375,7 @@ echo Building ... if [ ! -f VERSION ]; then echo $VERSION > VERSION fi -make 2>&1 | tee $OUTPUT/make-${PRGNAM}.log +make $NUMJOBS 2>&1 | tee $OUTPUT/make-${PRGNAM}.log make DESTDIR=$PKG install 2>&1 |tee $OUTPUT/install-${PRGNAM}.log # Build the html documentation (not all languages are available): @@ -396,7 +383,7 @@ if [ "$LANGUAGES" = "all" ]; then # make html-chunked make html-single else - for i in $(echo $LANGUAGES | tr , ' ') ; do + for i in $(echo $LANGUAGES | tr , ' ') ; do # make html-chunked-$i ; make html-single-$i ; done @@ -511,21 +498,3 @@ md5sum ${PRGNAM}-${PKGVERSION}-${ARCH}-${BUILD}${TAG}.txz > ${PRGNAM}-${PKGVERSI cd - cat $PKG/install/slack-desc | grep "^${PRGNAM}" > $OUTPUT/${PRGNAM}-${PKGVERSION}-${ARCH}-${BUILD}${TAG}.txt -# Warn about libdvdcss requirement (again): -if [ "$USE_PATENTS" != "YES" ]; then - cat <<"EOT" -** -** Internal DECSS library was not built. -** If you want to play encrypted DVD's you need to install libdvdcss separately. -** -** If you do not care about patent issues, -** and want to keep support for internal libdvdcss, then -** edit this SlackBuild script and change the line: -** USE_PATENTS=${USE_PATENTS:-"NO"} -** to: -** USE_PATENTS="YES" -** -EOT - -fi - diff --git a/source/xap/MPlayer/MPlayer.demux_lavf.flac.diff b/source/xap/MPlayer/MPlayer.demux_lavf.flac.diff new file mode 100644 index 000000000..7077d630f --- /dev/null +++ b/source/xap/MPlayer/MPlayer.demux_lavf.flac.diff @@ -0,0 +1,10 @@ +--- ./libmpdemux/demux_lavf.c.orig 2016-01-24 19:46:50.000000000 -0600 ++++ ./libmpdemux/demux_lavf.c 2016-03-13 15:11:45.083055246 -0500 +@@ -222,6 +222,7 @@ + "cdxl", + "dxa", + "flv", ++ "flac", + "gxf", + "nut", + "nuv", diff --git a/source/xap/MPlayer/include-samba-4.0.patch b/source/xap/MPlayer/include-samba-4.0.patch new file mode 100644 index 000000000..2ed272b6a --- /dev/null +++ b/source/xap/MPlayer/include-samba-4.0.patch @@ -0,0 +1,12 @@ +diff -rupN a/stream/stream_smb.c b/stream/stream_smb.c +--- a/stream/stream_smb.c 2013-03-16 13:38:34.000000000 +0000 ++++ b/stream/stream_smb.c 2013-10-31 20:05:32.473947926 +0000 +@@ -18,7 +18,7 @@ + + #include "config.h" + +-#include <libsmbclient.h> ++#include <samba-4.0/libsmbclient.h> + #include <unistd.h> + + #include "mp_msg.h" diff --git a/source/xap/MPlayer/slack-desc b/source/xap/MPlayer/slack-desc index 71686a3c9..033b41706 100644 --- a/source/xap/MPlayer/slack-desc +++ b/source/xap/MPlayer/slack-desc @@ -6,9 +6,9 @@ # customary to leave one space after the ':'. |-----handy-ruler------------------------------------------------------| -MPlayer: MPlayer (MPEG-4 digital video technology) +MPlayer: MPlayer (Linux movie player) MPlayer: -MPlayer: MPlayer is a movie player for LINUX. It plays most MPEG, VOB, AVI, +MPlayer: MPlayer is a movie player for Linux. It plays most MPEG, VOB, AVI, MPlayer: Ogg/OGM, VIVO, ASF/WMA/WMV, QT/MOV/MP4, FLI, RM, NuppelVideo, MPlayer: YUV4MPEG, FILM, RoQ, PVA files, supported by many native, XAnim, MPlayer: and Win32 DLL codecs. You can watch VideoCD, SVCD, DVD, 3ivx, diff --git a/source/xap/MPlayer/subreader-fix-srt-parsing.patch b/source/xap/MPlayer/subreader-fix-srt-parsing.patch deleted file mode 100644 index 84f2de4d9..000000000 --- a/source/xap/MPlayer/subreader-fix-srt-parsing.patch +++ /dev/null @@ -1,60 +0,0 @@ -From d98e61ea438db66323734ad1b6bea66411a3c97b Mon Sep 17 00:00:00 2001 -From: wm4 <wm4@nowhere> -Date: Tue, 30 Apr 2013 00:09:31 +0200 -Subject: [PATCH] subreader: fix out of bound write access when parsing .srt - -This broke .srt subtitles on gcc-4.8. The breakage was relatively -subtle: it set all hour components to 0, while everything else was -parsed successfully. - -But the problem is really that sscanf wrote 1 byte past the sep -variable (or more, for invalid/specially prepared input). The %[..] -format specifier is unbounded. Fix that by letting sscanf drop the -parsed contents with "*", and also make it skip only one input -character by adding "1" (=> "%*1[..."). - -The out of bound write could easily lead to security issues. - -Also, this change makes .srt subtitle parsing slightly more strict. -Strictly speaking this is an unrelated change, but do it anyway. It's -more correct. ---- - sub/subreader.c | 8 ++++---- - 1 file changed, 4 insertions(+), 4 deletions(-) - - (foutrelis: adjusted variable names in first hunk to apply to mplayer) - -diff --git a/sub/subreader.c b/sub/subreader.c -index 23da4c7..0f1b6c9 100644 ---- a/sub/subreader.c -+++ b/sub/subreader.c -@@ -386,14 +386,14 @@ static subtitle *sub_ass_read_line_subviewer(stream_t *st, subtitle *current, - int h1, m1, s1, ms1, h2, m2, s2, ms2, j = 0; - - while (!current->text[0]) { -- char line[LINE_LEN + 1], full_line[LINE_LEN + 1], sep; -+ char line[LINE_LEN + 1], full_line[LINE_LEN + 1]; - int i; - - /* Parse SubRip header */ - if (!stream_read_line(st, line, LINE_LEN, utf16)) - return NULL; -- if (sscanf(line, "%d:%d:%d%[,.:]%d --> %d:%d:%d%[,.:]%d", -- &h1, &m1, &s1, &sep, &ms1, &h2, &m2, &s2, &sep, &ms2) < 10) -+ if (sscanf(line, "%d:%d:%d%*1[,.:]%d --> %d:%d:%d%*1[,.:]%d", -+ &h1, &m1, &s1, &ms1, &h2, &m2, &s2, &ms2) < 8) - continue; - - current->start = a1 * 360000 + a2 * 6000 + a3 * 100 + a4 / 10; -@@ -450,7 +450,7 @@ static subtitle *sub_read_line_subviewer(stream_t *st,subtitle *current, - return sub_ass_read_line_subviewer(st, current, args); - while (!current->text[0]) { - if (!stream_read_line (st, line, LINE_LEN, utf16)) return NULL; -- if ((len=sscanf (line, "%d:%d:%d%[,.:]%d --> %d:%d:%d%[,.:]%d",&a1,&a2,&a3,(char *)&i,&a4,&b1,&b2,&b3,(char *)&i,&b4)) < 10) -+ if ((len=sscanf (line, "%d:%d:%d%*1[,.:]%d --> %d:%d:%d%*1[,.:]%d",&a1,&a2,&a3,&a4,&b1,&b2,&b3,&b4)) < 8) - continue; - current->start = a1*360000+a2*6000+a3*100+a4/10; - current->end = b1*360000+b2*6000+b3*100+b4/10; --- -1.8.1.6 - diff --git a/source/xap/audacious-plugins/audacious-plugins.SlackBuild b/source/xap/audacious-plugins/audacious-plugins.SlackBuild index 20139dff6..8a1e844f6 100755 --- a/source/xap/audacious-plugins/audacious-plugins.SlackBuild +++ b/source/xap/audacious-plugins/audacious-plugins.SlackBuild @@ -30,7 +30,7 @@ NUMJOBS=${NUMJOBS:-" -j7 "} # Automatically determine the architecture we're building on: if [ -z "$ARCH" ]; then case "$( uname -m )" in - i?86) export ARCH=i486 ;; + i?86) export ARCH=i586 ;; arm*) export ARCH=arm ;; # Unless $ARCH is already set, use uname -m for all other archs: *) export ARCH=$( uname -m ) ;; @@ -41,8 +41,8 @@ CWD=$(pwd) TMP=${TMP:-/tmp} PKG=$TMP/package-${PKGNAM} -if [ "$ARCH" = "i486" ]; then - SLKCFLAGS="-O2 -march=i486 -mtune=i686" +if [ "$ARCH" = "i586" ]; then + SLKCFLAGS="-O2 -march=i586 -mtune=i686" LIBDIRSUFFIX="" ARCHOPTS="--disable-sse2" elif [ "$ARCH" = "s390" ]; then @@ -82,7 +82,8 @@ CXXFLAGS="$SLKCFLAGS" \ --libdir=/usr/lib${LIBDIRSUFFIX} \ --sysconfdir=/etc \ --mandir=/usr/man \ - --enable-amidiplug \ + --disable-aac \ + --with-ffmpeg=none \ --program-prefix= \ --program-suffix= \ ${ARCHOPTS} \ diff --git a/source/xap/audacious-plugins/slack-desc b/source/xap/audacious-plugins/slack-desc index 2c8227339..8c8684247 100644 --- a/source/xap/audacious-plugins/slack-desc +++ b/source/xap/audacious-plugins/slack-desc @@ -11,7 +11,7 @@ audacious-plugins: audacious-plugins: This is a collection of plugins for Audacious to support additional audacious-plugins: media formats. audacious-plugins: -audacious-plugins: The webpage for Audacious is: http://www.audacious-media-player.org. +audacious-plugins: The webpage for Audacious is: http://www.audacious-media-player.org audacious-plugins: audacious-plugins: audacious-plugins: diff --git a/source/xap/audacious/audacious.SlackBuild b/source/xap/audacious/audacious.SlackBuild index 83662aec6..d7c3d43c8 100755 --- a/source/xap/audacious/audacious.SlackBuild +++ b/source/xap/audacious/audacious.SlackBuild @@ -30,7 +30,7 @@ NUMJOBS=${NUMJOBS:-" -j7 "} # Automatically determine the architecture we're building on: if [ -z "$ARCH" ]; then case "$( uname -m )" in - i?86) export ARCH=i486 ;; + i?86) export ARCH=i586 ;; arm*) export ARCH=arm ;; # Unless $ARCH is already set, use uname -m for all other archs: *) export ARCH=$( uname -m ) ;; @@ -41,8 +41,8 @@ CWD=$(pwd) TMP=${TMP:-/tmp} PKG=$TMP/package-${PKGNAM} -if [ "$ARCH" = "i486" ]; then - SLKCFLAGS="-O2 -march=i486 -mtune=i686" +if [ "$ARCH" = "i586" ]; then + SLKCFLAGS="-O2 -march=i586 -mtune=i686" LIBDIRSUFFIX="" ARCHOPTS="--disable-sse2" elif [ "$ARCH" = "s390" ]; then diff --git a/source/xap/audacious/slack-desc b/source/xap/audacious/slack-desc index 6574e8059..c0f307f63 100644 --- a/source/xap/audacious/slack-desc +++ b/source/xap/audacious/slack-desc @@ -15,5 +15,5 @@ audacious: MPEG audio, Ogg Vorbis, RIFF wav, most module formats, and a few audacious: other formats. Audacious can be extended through plugins to play a audacious: number of other audio and video formats. audacious: -audacious: The webpage for Audacious is: http://www.audacious-media-player.org. +audacious: The webpage for Audacious is: http://www.audacious-media-player.org audacious: diff --git a/source/xap/blueman/0001-Notification-Also-check-if-notification-daemon-suppo.patch b/source/xap/blueman/0001-Notification-Also-check-if-notification-daemon-suppo.patch new file mode 100644 index 000000000..fd244f3f6 --- /dev/null +++ b/source/xap/blueman/0001-Notification-Also-check-if-notification-daemon-suppo.patch @@ -0,0 +1,44 @@ +From fe902c8827fccae8df93d9deff53e22917d69369 Mon Sep 17 00:00:00 2001 +From: Sander Sweers <infirit@gmail.com> +Date: Mon, 16 May 2016 16:22:14 +0200 +Subject: [PATCH 1/2] Notification: Also check if notification daemon supports + body + +This is the absolute minimum we require from the notification daemon. With +this we fix the when no daemon is available (not running or installed). +See [1] what prompted this change. + +[1] https://github.com/blueman-project/blueman/issues/519#issuecomment-218976647 +--- + blueman/gui/Notification.py | 14 +++++++++++--- + 1 file changed, 11 insertions(+), 3 deletions(-) + +diff --git a/blueman/gui/Notification.py b/blueman/gui/Notification.py +index 41fdd69..6f3d3dc 100644 +--- a/blueman/gui/Notification.py ++++ b/blueman/gui/Notification.py +@@ -161,10 +161,18 @@ class Notification(object): + def actions_supported(): + return "actions" in Notify.get_server_caps() + ++ @staticmethod ++ def body_supported(): ++ return "body" in Notify.get_server_caps() ++ + def __new__(cls, summary, message, timeout=-1, actions=None, actions_cb=None, pixbuf=None, status_icon=None): +- if not Config('org.blueman.general')['notification-daemon'] or (actions and not cls.actions_supported()): +- # Use fallback as user does not want to use a notification daemon or we have to show actions and the +- # notification daemon does not provide them ++ forced_fallback = not Config('org.blueman.general')['notification-daemon'] ++ ++ if forced_fallback or not cls.body_supported() or (actions and not cls.actions_supported()): ++ # Use fallback in the case: ++ # * user does not want to use a notification daemon ++ # * the notification daemon is not available ++ # * we have to show actions and the notification daemon does not provide them + klass = _NotificationDialog + else: + klass = _NotificationBubble +-- +2.8.3 + diff --git a/source/xap/blueman/0002-NetConf-Treat-UnicodeDecodeError-as-if-there-was-no-.patch b/source/xap/blueman/0002-NetConf-Treat-UnicodeDecodeError-as-if-there-was-no-.patch new file mode 100644 index 000000000..17820a106 --- /dev/null +++ b/source/xap/blueman/0002-NetConf-Treat-UnicodeDecodeError-as-if-there-was-no-.patch @@ -0,0 +1,27 @@ +From 2b4c3aecff94c1093de41285bba34b40bc69ddaf Mon Sep 17 00:00:00 2001 +From: Sander Sweers <infirit@gmail.com> +Date: Mon, 2 May 2016 14:49:13 +0200 +Subject: [PATCH 2/2] NetConf: Treat UnicodeDecodeError as if there was no file + +This is unfortunate but most people will not even notice we created a new +state file. +--- + blueman/main/NetConf.py | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/blueman/main/NetConf.py b/blueman/main/NetConf.py +index d62dc14..4d7efd8 100644 +--- a/blueman/main/NetConf.py ++++ b/blueman/main/NetConf.py +@@ -222,7 +222,7 @@ class NetConf(object): + NetConf.default_inst = obj + f.close() + return obj +- except IOError: ++ except (IOError, UnicodeDecodeError): + n = cls() + try: + n.store() +-- +2.8.3 + diff --git a/source/xap/blueman/blueman-open b/source/xap/blueman/blueman-open deleted file mode 100644 index 0cfa688fa..000000000 --- a/source/xap/blueman/blueman-open +++ /dev/null @@ -1,114 +0,0 @@ -#!/bin/sh -# Blueman Mount Script for Slackware -# by Zarren Spry & Robby Workman -# Based on http://kde-apps.org/content/show.php/kde4+bluetooth+files+open?content=108869 - -# Set to 0 if you want more debugging messages -DEBUG=1 - -device_addr="$1" -device_name="$(hcitool name $device_addr)" -own_name="$(basename $0)" -basedir="${basedir:-$HOME/obexfs}" -mountpoint="${basedir}/${device_addr}" -browser=${browser:-"xdg-open"} - -# If we're running in kde, use kdialog -if [ "$KDE_FULL_SESSION" = "true" ]; then - if which kdialog 1>/dev/null 2>/dev/null; then - messagetype="kdialog" - fi -# If not, then see if libnotify is available -# Even if it is, there may not be a notification daemon running, but there's -# no good way to check for this, so oh well... -elif which notify-send 1>/dev/null 2>/dev/null; then - messagetype="libnotify" -# If no libnotify, then use kdialog if it's installed -elif which kdialog 1>/dev/null 2>/dev/null; then - messagetype="kdialog" -# If all else fails, just don't do notifications -else - messagetype="" -fi - -# Mount function -mount_device () -{ - [ ! -z $DEBUG ] && logger -i -t $own_name "Attempting to mount device $device_name to $mountpoint..." - [ ! -z $DEBUG ] && logger -i -t $own_name "Execute: obexfs -b $device_addr $mountpoint" - - mkdir -p $mountpoint - obexfs -b $device_addr $mountpoint 2>&1 - - if [ $? != 0 ]; then - MSG_TXT="Failed to mount $device_name to $mountpoint. $dbg_msg" - FAILZOR=definitely - if [ ! -z $DEBUG ]; then - logger -i -t $own_name "Failed to mount $device_name to $mountpoint." - fi - else - MSG_TXT="Successfully mounted $device_name to $mountpoint" - if [ ! -z $DEBUG ]; then - logger -i -t $own_name "Successfully mounted $device_name to $mountpoint." - fi - fi - - if [ $messagetype == "kdialog" ]; then - kdialog --passivepopup "$MSG_TXT" 2 - elif [ $messagetype == "libnotify" ]; then - notify-send --expire-time=20000 --icon=blueman "$MSG_TXT" - fi - - [ "$FAILZOR" = "definitely" ] && exit 1 - - [ ! -z $DEBUG ] && logger -i -t $own_name "Opening $mountpoint with $browser..." - $browser $mountpoint 2>&1 - -} - -# Unmount function -umount_device () -{ - if grep -qw $mountpoint /proc/mounts 2>/dev/null ; then - [ ! -z $DEBUG ] && logger -i -t $own_name \ - "$mountpoint has something mounted on it already - unmounting it..." - - fusermount -u $mountpoint 1>/dev/null 2>/dev/null - - if [ $? != 0 ]; then - [ ! -z $DEBUG ] && logger -i -t $own_name "Failed to unmount $mountpoint with fusermount..." - umount -f $mountpoint 1>/dev/null 2>/dev/null - if [ $? != 0 ]; then - [ ! -z $DEBUG ] && \ - logger -i -t $own_name \ - "Failed to unmount $mountpoint with umount - try it manually as root and then start over." - FAILZOR=definitely - MSG_TXT="Failed to unmount $mountpoint with fusermount and umount - try it as root first." - else - break - fi - else - [ ! -z $DEBUG ] && logger -i -t $own_name "Successfully unmounted $device_name." - fi - else - [ ! -z $DEBUG ] && logger -i -t $own_name "$mountpoint has nothing mounted on it - continuing..." - fi - - if [ $messagetype == "kdialog" ]; then - kdialog --passivepopup "$MSG_TXT" 3 - elif [ $messagetype == "libnotify" ]; then - notify-send --expire-time=20000 --icon=blueman "$MSG_TXT" - fi - [ "$FAILZOR" = "definitely" ] && exit 1 -} - -MSG_TXT="Attempting to mount $device_name - please wait..." -if [ $messagetype == "kdialog" ]; then - kdialog --passivepopup "$MSG_TXT" 4 -elif [ $messagetype == "libnotify" ]; then - notify-send --expire-time=20000 --icon=blueman "$MSG_TXT" -fi - -umount_device -mount_device - diff --git a/source/xap/blueman/blueman-use_blueman-open_for_obexfs.diff b/source/xap/blueman/blueman-use_blueman-open_for_obexfs.diff deleted file mode 100644 index 542ee6e5d..000000000 --- a/source/xap/blueman/blueman-use_blueman-open_for_obexfs.diff +++ /dev/null @@ -1,12 +0,0 @@ -diff -Nur blueman-1.21.orig/blueman/Constants.py.in blueman-1.21/blueman/Constants.py.in ---- blueman-1.21.orig/blueman/Constants.py.in 2009-09-20 05:01:26.000000000 -0500 -+++ blueman-1.21/blueman/Constants.py.in 2009-12-13 16:26:29.643850538 -0600 -@@ -10,7 +10,7 @@ - POLKIT = "@polkit_val@" == "yes" - HAL_ENABLED = "@hal_en@" == "yes" - --DEF_BROWSE_COMMAND = "nautilus --browser obex://[%d]" -+DEF_BROWSE_COMMAND = "/usr/libexec/blueman-open %d" - - import os - import gettext diff --git a/source/xap/blueman/blueman.SlackBuild b/source/xap/blueman/blueman.SlackBuild index 5559f0db3..810b8cc21 100755 --- a/source/xap/blueman/blueman.SlackBuild +++ b/source/xap/blueman/blueman.SlackBuild @@ -2,8 +2,8 @@ # Slackware build script for blueman -# Copyright 2009 Robby Workman, Northport, Alabama, USA -# Copyright 2010 Patrick Volkerding, Sebeka, MN, USA +# Copyright 2009,2015 Robby Workman, Tuscaloosa, Alabama, USA +# Copyright 2010,2015 Patrick Volkerding, Sebeka, MN, USA # All rights reserved. # # Redistribution and use of this script, with or without modification, is @@ -25,12 +25,12 @@ PKGNAM=blueman VERSION=${VERSION:-$(echo $PKGNAM-*.tar.?z* | rev | cut -f 3- -d . | cut -f 1 -d - | rev)} -BUILD=${BUILD:-3} +BUILD=${BUILD:-1} # Automatically determine the architecture we're building on: if [ -z "$ARCH" ]; then case "$( uname -m )" in - i?86) export ARCH=i486 ;; + i?86) export ARCH=i586 ;; arm*) export ARCH=arm ;; # Unless $ARCH is already set, use uname -m for all other archs: *) export ARCH=$( uname -m ) ;; @@ -43,8 +43,8 @@ CWD=$(pwd) TMP=${TMP:-/tmp} PKG=$TMP/package-$PKGNAM -if [ "$ARCH" = "i486" ]; then - SLKCFLAGS="-O2 -march=i486 -mtune=i686" +if [ "$ARCH" = "i586" ]; then + SLKCFLAGS="-O2 -march=i586 -mtune=i686" LIBDIRSUFFIX="" elif [ "$ARCH" = "i686" ]; then SLKCFLAGS="-O2 -march=i686 -mtune=i686" @@ -62,7 +62,7 @@ mkdir -p $TMP $PKG cd $TMP rm -rf $PKGNAM-$VERSION tar xvf $CWD/$PKGNAM-$VERSION.tar.?z* || exit 1 -cd $PKGNAM-$VERSION +cd $PKGNAM-$VERSION || exit 1 chown -R root:root . find . \ \( -perm 777 -o -perm 775 -o -perm 711 -o -perm 555 -o -perm 511 \) \ @@ -70,13 +70,12 @@ find . \ \( -perm 666 -o -perm 664 -o -perm 600 -o -perm 444 -o -perm 440 -o -perm 400 \) \ -exec chmod 644 {} \; -# Use blueman-open, a modified version of this, to browse obexfs shares: -# http://www.kde-apps.org/content/show.php/kde4+bluetooth+files+open?content=108869 -zcat $CWD/blueman-use_blueman-open_for_obexfs.diff.gz | patch -p1 || exit 1 +zcat $CWD/0001-Notification-Also-check-if-notification-daemon-suppo.patch.gz | patch -p1 --verbose || exit 1 +zcat $CWD/0002-NetConf-Treat-UnicodeDecodeError-as-if-there-was-no-.patch.gz | patch -p1 --verbose || exit 1 CFLAGS="$SLKCFLAGS" \ CXXFLAGS="$SLKCFLAGS" \ -./autogen.sh \ +./configure \ --prefix=/usr \ --libdir=/usr/lib${LIBDIRSUFFIX} \ --sysconfdir=/etc \ @@ -85,43 +84,32 @@ CXXFLAGS="$SLKCFLAGS" \ --docdir=/usr/doc/$PKGNAM-$VERSION \ --disable-static \ --with-dhcp-config=/etc/dhcpd.conf \ - --disable-hal \ --enable-polkit \ - --build=$ARCH-slackware-linux + --enable-thunar-sendto \ + --enable-settings-integration \ + --disable-schemas-compile \ + --build=$ARCH-slackware-linux || exit 1 + +# --with-no-runtime-deps-check + +# I think there's a built-in fallback, but just in case: +sed -i "s,nautilus,thunar,g" blueman/Constants.py* + +# https://github.com/blueman-project/blueman/issues/435 +sed -i "s,#!/usr/bin/env python,#!/usr/bin/python2.7,g" module/_blueman.pyx apps/* make $NUMJOBS || make || exit 1 make install DESTDIR=$PKG || exit 1 -# Add the blueman-open script to /usr/libexec for browsing obexfs shares -# I don't want to put this in PATH and have someone accidentally run it -mkdir -p $PKG/usr/libexec -cat $CWD/blueman-open > $PKG/usr/libexec/blueman-open -chmod 0755 $PKG/usr/libexec/blueman-open - -( cd $PKG - find . | xargs file | grep "executable" | grep ELF | cut -f 1 -d : | \ - xargs strip --strip-unneeded 2> /dev/null || true - find . | xargs file | grep "shared object" | grep ELF | cut -f 1 -d : | \ - xargs strip --strip-unneeded 2> /dev/null || true -) - -( cd $PKG/usr/man - find . -type f -exec gzip -9 {} \; - for i in $( find . -type l ) ; do ln -s $( readlink $i ).gz $i.gz ; rm $i ; done -) - -mkdir -p $PKG/usr/doc/$PKGNAM-$VERSION -cp -a \ - AUTHORS COPYING* INSTALL NEWS README* \ - $PKG/usr/doc/$PKGNAM-$VERSION - -# If there's a ChangeLog, installing at least part of the recent history -# is useful, but don't let it get totally out of control: -if [ -r ChangeLog ]; then - DOCSDIR=$(echo $PKG/usr/doc/${PKGNAM}-$VERSION) - cat ChangeLog | head -n 1000 > $DOCSDIR/ChangeLog - touch -r ChangeLog $DOCSDIR/ChangeLog -fi +# Remove the AppIndicator.py plugin (we don't have libappindicator3 +# nor will we be getting it in the foreseeable future) +rm $PKG/usr/lib${LIBDIRSUFFIX}/python*/site-packages/blueman/plugins/applet/AppIndicator.py* + +find $PKG -print0 | xargs -0 file | grep -e "executable" -e "shared object" | grep ELF \ + | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true + +find $PKG/usr/man -type f -exec gzip -9 {} \; +for i in $( find $PKG/usr/man -type l ) ; do ln -s $( readlink $i ).gz $i.gz ; rm $i ; done mkdir -p $PKG/install cat $CWD/slack-desc > $PKG/install/slack-desc @@ -129,4 +117,3 @@ zcat $CWD/doinst.sh.gz > $PKG/install/doinst.sh cd $PKG /sbin/makepkg -p -l y -c n $TMP/$PKGNAM-$VERSION-$ARCH-$BUILD.txz - diff --git a/source/xap/blueman/doinst.sh b/source/xap/blueman/doinst.sh index 17b18ef35..808893690 100644 --- a/source/xap/blueman/doinst.sh +++ b/source/xap/blueman/doinst.sh @@ -21,3 +21,9 @@ if [ -e usr/share/icons/hicolor/icon-theme.cache ]; then fi fi +if [ -e usr/share/glib-2.0/schemas ]; then + if [ -x /usr/bin/glib-compile-schemas ]; then + /usr/bin/glib-compile-schemas usr/share/glib-2.0/schemas >/dev/null 2>&1 + fi +fi + diff --git a/source/xap/blueman/slack-desc b/source/xap/blueman/slack-desc index d9b80088d..a906f3ff3 100644 --- a/source/xap/blueman/slack-desc +++ b/source/xap/blueman/slack-desc @@ -16,4 +16,4 @@ blueman: - Connecting to input and audio devices blueman: - Sending/Receiving/Browsing files via OBEX blueman: - Pairing blueman: -blueman: Homepage: http://blueman-project.org +blueman: Homepage: https://github.com/blueman-project/blueman diff --git a/source/xap/ddd/ddd.SlackBuild b/source/xap/ddd/ddd.SlackBuild index fda06cc5e..5bd702099 100755 --- a/source/xap/ddd/ddd.SlackBuild +++ b/source/xap/ddd/ddd.SlackBuild @@ -1,5 +1,5 @@ #!/bin/sh -# Copyright 2013 Patrick J. Volkerding, Sebeka, Minnesota, USA +# Copyright 2013, 2014 Patrick J. Volkerding, Sebeka, Minnesota, USA # All rights reserved. # # Redistribution and use of this script, with or without modification, is @@ -27,12 +27,12 @@ PKGNAM=ddd VERSION=${VERSION:-$(echo $PKGNAM-*.tar.?z* | rev | cut -f 3- -d . | cut -f 1 -d - | rev)} -BUILD=${BUILD:-1} +BUILD=${BUILD:-4} # Automatically determine the architecture we're building on: if [ -z "$ARCH" ]; then case "$( uname -m )" in - i?86) ARCH=i486 ;; + i?86) ARCH=i586 ;; arm*) ARCH=arm ;; # Unless $ARCH is already set, use uname -m for all other archs: *) ARCH=$( uname -m ) ;; @@ -84,6 +84,9 @@ chmod -R u+w,go+r-w,a-s . # http://savannah.gnu.org/bugs/?26726 zcat $CWD/strclass.C.diff.gz | patch -p0 --verbose || exit 1 +# Fix machine code window with gdb > 7.1: +zcat $CWD/machine_code_window_fix.diff.gz | patch -p1 --verbose || exit 1 + CFLAGS="$SLKCFLAGS" \ CXXFLAGS="$SLKCFLAGS" \ ./configure \ diff --git a/source/xap/ddd/machine_code_window_fix.diff b/source/xap/ddd/machine_code_window_fix.diff new file mode 100644 index 000000000..f63b43c62 --- /dev/null +++ b/source/xap/ddd/machine_code_window_fix.diff @@ -0,0 +1,13 @@ +diff --git a/ddd/GDBAgent.C b/ddd/GDBAgent.C +index 7fc1379..87652d2 100644 +--- a/ddd/GDBAgent.C ++++ b/ddd/GDBAgent.C +@@ -3200,7 +3200,7 @@ string GDBAgent::disassemble_command(string start, const char *end) const + { + string end_( end ); + normalize_address(end_); +- cmd += ' '; ++ cmd += ','; + cmd += end_; + } + return cmd; diff --git a/source/xap/electricsheep/electricsheep.SlackBuild b/source/xap/electricsheep/electricsheep.SlackBuild index 69ab99d02..8ff65c768 100755 --- a/source/xap/electricsheep/electricsheep.SlackBuild +++ b/source/xap/electricsheep/electricsheep.SlackBuild @@ -34,7 +34,7 @@ PRGNAM=electricsheep VERSION=${VERSION:-20090306} -BUILD=${BUILD:-3} +BUILD=${BUILD:-4} # Automatically determine the architecture we're building on: if [ -z "$ARCH" ]; then @@ -206,11 +206,12 @@ cd client --mandir=/usr/man \ --build=$ARCH-slackware-linux \ 2>&1 | tee $OUTPUT/configure-${PRGNAM}.log - make 2>&1 | tee $OUTPUT/make-${PRGNAM}.log + make -j 7 2>&1 | tee $OUTPUT/make-${PRGNAM}.log make DESTDIR=$PKG install 2>&1 |tee $OUTPUT/install-${PRGNAM}.log cd .. # Then the flam3 (fractal flames) renderer: cd flam3 + cat $SRCDIR/flam3-3.0.1-libpng15.patch | patch -p1 --verbose || exit 1 LDFLAGS="$SLKLDFLAGS" \ CXXFLAGS="$SLKCFLAGS" \ CFLAGS="$SLKCFLAGS" \ @@ -220,7 +221,7 @@ cd flam3 --mandir=/usr/man \ --build=$ARCH-slackware-linux \ 2>&1 | tee $OUTPUT/configure-${PRGNAM}.log - make 2>&1 | tee $OUTPUT/make-${PRGNAM}.log + make -j 7 2>&1 | tee $OUTPUT/make-${PRGNAM}.log make DESTDIR=$PKG install 2>&1 |tee $OUTPUT/install-${PRGNAM}.log cd .. diff --git a/source/xap/electricsheep/flam3-3.0.1-libpng15.patch b/source/xap/electricsheep/flam3-3.0.1-libpng15.patch new file mode 100644 index 000000000..48046cc17 --- /dev/null +++ b/source/xap/electricsheep/flam3-3.0.1-libpng15.patch @@ -0,0 +1,74 @@ +--- src/png.c ++++ src/png.c +@@ -142,7 +142,7 @@ + } + if (setjmp(png_jmpbuf(png_ptr))) { + if (png_image) { +- for (y = 0 ; y < info_ptr->height ; y++) ++ for (y = 0 ; y < png_get_image_height(png_ptr, info_ptr) ; y++) + free (png_image[y]); + free (png_image); + } +@@ -161,19 +161,19 @@ + png_set_sig_bytes (png_ptr, SIG_CHECK_SIZE); + png_read_info (png_ptr, info_ptr); + +- if (8 != info_ptr->bit_depth) { ++ if (8 != png_get_bit_depth(png_ptr, info_ptr)) { + fprintf(stderr, "bit depth type must be 8, not %d.\n", +- info_ptr->bit_depth); ++ png_get_bit_depth(png_ptr, info_ptr)); + return 0; + } + +- *width = info_ptr->width; +- *height = info_ptr->height; ++ *width = png_get_image_width(png_ptr, info_ptr); ++ *height = png_get_image_height(png_ptr, info_ptr); + p = q = malloc(4 * *width * *height); +- png_image = (png_byte **)malloc (info_ptr->height * sizeof (png_byte*)); ++ png_image = (png_byte **)malloc (png_get_image_height(png_ptr, info_ptr) * sizeof (png_byte*)); + +- linesize = info_ptr->width; +- switch (info_ptr->color_type) { ++ linesize = png_get_image_width(png_ptr, info_ptr); ++ switch (png_get_color_type(png_ptr, info_ptr)) { + case PNG_COLOR_TYPE_RGB: + linesize *= 3; + break; +@@ -182,21 +182,21 @@ + break; + default: + fprintf(stderr, "color type must be RGB or RGBA not %d.\n", +- info_ptr->color_type); ++ png_get_color_type(png_ptr, info_ptr)); + return 0; + } + +- for (y = 0 ; y < info_ptr->height ; y++) { ++ for (y = 0 ; y < png_get_image_height(png_ptr, info_ptr) ; y++) { + png_image[y] = malloc (linesize); + } + png_read_image (png_ptr, png_image); + png_read_end (png_ptr, info_ptr); + +- for (y = 0 ; y < info_ptr->height ; y++) { ++ for (y = 0 ; y < png_get_image_height(png_ptr, info_ptr) ; y++) { + unsigned char *s = png_image[y]; +- for (x = 0 ; x < info_ptr->width ; x++) { ++ for (x = 0 ; x < png_get_image_width(png_ptr, info_ptr) ; x++) { + +- switch (info_ptr->color_type) { ++ switch (png_get_color_type(png_ptr, info_ptr)) { + case PNG_COLOR_TYPE_RGB: + p[0] = s[0]; + p[1] = s[1]; +@@ -217,7 +217,7 @@ + } + } + +- for (y = 0 ; y < info_ptr->height ; y++) ++ for (y = 0 ; y < png_get_image_height(png_ptr, info_ptr) ; y++) + free (png_image[y]); + free (png_image); + png_destroy_read_struct (&png_ptr, &info_ptr, (png_infopp)NULL); diff --git a/source/xap/fluxbox/fluxbox.SlackBuild b/source/xap/fluxbox/fluxbox.SlackBuild index 25eedf3eb..07b5e0cec 100755 --- a/source/xap/fluxbox/fluxbox.SlackBuild +++ b/source/xap/fluxbox/fluxbox.SlackBuild @@ -79,10 +79,10 @@ CXXFLAGS="$SLKCFLAGS" \ --mandir=/usr/man \ --docdir=/usr/doc/fluxbox-$VERSION \ --enable-xinerama \ - --enable-shape \ --enable-slit \ --enable-nls \ - --enable-timed-cache \ + --enable-timedcache \ + --enable-xext \ --build=$ARCH-slackware-linux make $NUMJOBS || make || exit 1 diff --git a/source/xap/fvwm/fvwm.SlackBuild b/source/xap/fvwm/fvwm.SlackBuild index b04223c75..ddd373d93 100755 --- a/source/xap/fvwm/fvwm.SlackBuild +++ b/source/xap/fvwm/fvwm.SlackBuild @@ -1,6 +1,6 @@ #!/bin/sh -# Copyright 2011, 2012 Patrick J. Volkerding, Sebeka, MN, USA +# Copyright 2011, 2012, 2015, 2016 Patrick J. Volkerding, Sebeka, MN, USA # All rights reserved. # # Redistribution and use of this script, with or without modification, is @@ -23,12 +23,12 @@ PKGNAM=fvwm VERSION=${VERSION:-$(echo $PKGNAM-*.tar.?z* | rev | cut -f 3- -d . | cut -f 1 -d - | rev)} -BUILD=${BUILD:-6} +BUILD=${BUILD:-1} # Automatically determine the architecture we're building on: if [ -z "$ARCH" ]; then case "$( uname -m )" in - i?86) export ARCH=i486 ;; + i?86) export ARCH=i586 ;; arm*) export ARCH=arm ;; # Unless $ARCH is already set, use uname -m for all other archs: *) export ARCH=$( uname -m ) ;; @@ -37,8 +37,8 @@ fi NUMJOBS=${NUMJOBS:-" -j7 "} -if [ "$ARCH" = "i486" ]; then - SLKCFLAGS="-O2 -march=i486 -mtune=i686" +if [ "$ARCH" = "i586" ]; then + SLKCFLAGS="-O2 -march=i586 -mtune=i686" LIBDIRSUFFIX="" elif [ "$ARCH" = "s390" ]; then SLKCFLAGS="-O2" @@ -61,7 +61,7 @@ mkdir -p $TMP $PKG cd $TMP rm -rf $PKGNAM-$VERSION tar xvf $CWD/$PKGNAM-$VERSION.tar.?z* || exit 1 -cd $PKGNAM-$VERSION +cd $PKGNAM-$VERSION || exit 1 chown -R root:root . find . \ \( -perm 777 -o -perm 775 -o -perm 711 -o -perm 555 -o -perm 511 \) \ @@ -77,9 +77,10 @@ CFLAGS="$SLKCFLAGS" \ --mandir=/usr/man \ --docdir=/usr/doc/$PKGNAM-$VERSION \ --disable-bidi \ + --disable-gtk \ --program-prefix= \ --program-suffix= \ - --build=$ARCH-slackware-linux + --build=$ARCH-slackware-linux || exit 1 make $NUMJOBS || make || exit 1 make install DESTDIR=$PKG || exit 1 diff --git a/source/xap/fvwm/slack-desc b/source/xap/fvwm/slack-desc index 2d2a9ef5f..d616afa4d 100644 --- a/source/xap/fvwm/slack-desc +++ b/source/xap/fvwm/slack-desc @@ -14,6 +14,6 @@ fvwm: consumption, provide a 3-D look to window frames, and provide a simple fvwm: virtual desktop. fvwm: fvwm: Homepage: http://www.fvwm.org -fvwm: +fvwm: Development: https://github.com/fvwmorg/fvwm fvwm: fvwm: diff --git a/source/xap/geeqie/geeqie.SlackBuild b/source/xap/geeqie/geeqie.SlackBuild index 2c0851b4d..6dffa6fe5 100755 --- a/source/xap/geeqie/geeqie.SlackBuild +++ b/source/xap/geeqie/geeqie.SlackBuild @@ -1,6 +1,6 @@ #!/bin/sh -# Copyright 2010, 2011, 2012 Patrick Volkerding, Sebeka, MN, USA +# Copyright 2010, 2011, 2012, 2015, 2016 Patrick Volkerding, Sebeka, MN, USA # All rights reserved. # # Redistribution and use of this script, with or without modification, is @@ -22,15 +22,25 @@ # Modified by the SlackBuilds.org project - PKGNAM=geeqie -VERSION=${VERSION:-$(echo $PKGNAM-*.tar.?z* | rev | cut -f 3- -d . | cut -f 1 -d - | rev)} BUILD=${BUILD:-1} +CWD=$(pwd) +# Download the geeqie Git head if there's no tarball: +if ! /bin/ls $CWD/geeqie*tar* 1> /dev/null 2> /dev/null ; then + git clone git://www.geeqie.org/geeqie.git + mv geeqie geeqie-$(date +%Y%m%d)git + tar --exclude-vcs -cf geeqie-$(date +%Y%m%d)git.tar geeqie-$(date +%Y%m%d)git + xz -9 geeqie-$(date +%Y%m%d)git.tar + rm -r $CWD/geeqie-$(date +%Y%m%d)git +fi + +VERSION=${VERSION:-$(echo $PKGNAM-*.tar.xz | rev | cut -f 3- -d . | cut -f 1 -d - | rev)} + # Automatically determine the architecture we're building on: if [ -z "$ARCH" ]; then case "$( uname -m )" in - i?86) export ARCH=i486 ;; + i?86) export ARCH=i586 ;; arm*) export ARCH=arm ;; # Unless $ARCH is already set, use uname -m for all other archs: *) export ARCH=$( uname -m ) ;; @@ -39,8 +49,8 @@ fi NUMJOBS=${NUMJOBS:-" -j7 "} -if [ "$ARCH" = "i486" ]; then - SLKCFLAGS="-O2 -D_FILE_OFFSET_BITS=64 -march=i486 -mtune=i686" +if [ "$ARCH" = "i586" ]; then + SLKCFLAGS="-O2 -D_FILE_OFFSET_BITS=64 -march=i586 -mtune=i686" elif [ "$ARCH" = "i686" ]; then SLKCFLAGS="-O2 -D_FILE_OFFSET_BITS=64 -march=i686" elif [ "$ARCH" = "s390" ]; then @@ -51,7 +61,6 @@ else SLKCFLAGS="-O2 -D_FILE_OFFSET_BITS=64" fi -CWD=$(pwd) TMP=${TMP:-/tmp} PKG=$TMP/package-$PKGNAM rm -rf $PKG @@ -59,8 +68,9 @@ mkdir -p $TMP $PKG cd $TMP rm -rf $PKGNAM-$VERSION -tar xvf $CWD/$PKGNAM-$VERSION.tar.?z* || exit 1 +tar xvf $CWD/$PKGNAM-$VERSION.tar.xz || exit 1 cd $PKGNAM-$VERSION || exit 1 + chown -R root:root . find . \ \( -perm 777 -o -perm 775 -o -perm 711 -o -perm 555 -o -perm 511 \) \ @@ -68,6 +78,8 @@ find . \ \( -perm 666 -o -perm 664 -o -perm 600 -o -perm 444 -o -perm 440 -o -perm 400 \) \ -exec chmod 644 {} \; +autoreconf -f -i ; intltoolize + CFLAGS="$SLKCFLAGS" \ CXXFLAGS="$SLKCFLAGS" \ ./configure \ diff --git a/source/xap/geeqie/slack-desc b/source/xap/geeqie/slack-desc index 7371d160b..16a0d9923 100644 --- a/source/xap/geeqie/slack-desc +++ b/source/xap/geeqie/slack-desc @@ -12,7 +12,7 @@ geeqie: Geeqie is an interactive GTK based image viewer that supports multiple geeqie: image formats, zooming, panning, thumbnails, and sorting images into geeqie: collections. geeqie: -geeqie: Homepage: http://geeqie.sourceforge.net +geeqie: Homepage: http://www.geeqie.org geeqie: geeqie: geeqie: diff --git a/source/xap/gftp/gftp.SlackBuild b/source/xap/gftp/gftp.SlackBuild index 9a293b64c..c125b39fa 100755 --- a/source/xap/gftp/gftp.SlackBuild +++ b/source/xap/gftp/gftp.SlackBuild @@ -22,13 +22,13 @@ PKGNAM=gftp VERSION=${VERSION:-$(echo $PKGNAM-*.tar.?z* | rev | cut -f 3- -d . | cut -f 1 -d - | rev)} -BUILD=${BUILD:-3} +BUILD=${BUILD:-4} # Automatically determine the architecture we're building on: if [ -z "$ARCH" ]; then case "$(uname -m)" in i?86) ARCH=i486 ;; - arm*) readelf /usr/bin/file -A | egrep -q "Tag_CPU.*[4,5]" && ARCH=arm || ARCH=armv7lh ;; + arm*) readelf /usr/bin/file -A | egrep -q "Tag_CPU.*[4,5]" && ARCH=arm || ARCH=armv7hl ;; # Unless $ARCH is already set, use uname -m for all other archs: *) ARCH=$(uname -m) ;; esac diff --git a/source/xap/gimp/gimp.SlackBuild b/source/xap/gimp/gimp.SlackBuild index 458485851..157a86e4b 100755 --- a/source/xap/gimp/gimp.SlackBuild +++ b/source/xap/gimp/gimp.SlackBuild @@ -1,6 +1,6 @@ #!/bin/sh -# Copyright 2008, 2009, 2010, 2011 Patrick J. Volkerding, Sebeka, MN, USA +# Copyright 2008, 2009, 2010, 2011, 2015 Patrick J. Volkerding, Sebeka, MN, USA # All rights reserved. # # Redistribution and use of this script, with or without modification, is @@ -28,7 +28,7 @@ BUILD=${BUILD:-1} # Automatically determine the architecture we're building on: if [ -z "$ARCH" ]; then case "$( uname -m )" in - i?86) export ARCH=i486 ;; + i?86) export ARCH=i586 ;; arm*) export ARCH=arm ;; # Unless $ARCH is already set, use uname -m for all other archs: *) export ARCH=$( uname -m ) ;; @@ -43,8 +43,8 @@ PKG=$TMP/package-gimp rm -rf $PKG mkdir -p $TMP $PKG -if [ "$ARCH" = "i486" ]; then - SLKCFLAGS="-O2 -march=i486 -mtune=i686" +if [ "$ARCH" = "i586" ]; then + SLKCFLAGS="-O2 -march=i586 -mtune=i686" LIBDIRSUFFIX="" elif [ "$ARCH" = "s390" ]; then SLKCFLAGS="-O2" @@ -80,6 +80,7 @@ CFLAGS="$SLKCFLAGS" \ --docdir=/usr/doc/gimp-$VERSION \ --disable-static \ --with-libcurl \ + --with-lcms=lcms2 \ --build=$ARCH-slackware-linux make $NUMJOBS || make || exit 1 diff --git a/source/xap/gkrellm/gkrellm.SlackBuild b/source/xap/gkrellm/gkrellm.SlackBuild index 14c071725..f01e4f349 100755 --- a/source/xap/gkrellm/gkrellm.SlackBuild +++ b/source/xap/gkrellm/gkrellm.SlackBuild @@ -1,6 +1,6 @@ #!/bin/sh -# Copyright 2008, 2009, 2010, 2011 Patrick J. Volkerding, Sebeka, MN, USA +# Copyright 2008, 2009, 2010, 2011, 2016 Patrick J. Volkerding, Sebeka, MN, USA # All rights reserved. # # Redistribution and use of this script, with or without modification, is @@ -20,14 +20,14 @@ # OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -VERSION=2.3.5 -PKGVER=2.3.5 -BUILD=${BUILD:-2} +VERSION=2.3.7 +PKGVER=2.3.7 +BUILD=${BUILD:-1} # Automatically determine the architecture we're building on: if [ -z "$ARCH" ]; then case "$( uname -m )" in - i?86) export ARCH=i486 ;; + i?86) export ARCH=i586 ;; arm*) export ARCH=arm ;; # Unless $ARCH is already set, use uname -m for all other archs: *) export ARCH=$( uname -m ) ;; @@ -49,7 +49,7 @@ mkdir -p $TMP $PKG cd $TMP rm -rf gkrellm-$VERSION -tar xvf $CWD/gkrellm-$VERSION.tar.bz2 || exit 1 +tar xvf $CWD/gkrellm-$VERSION.tar.?z* || exit 1 cd gkrellm-$VERSION || exit 1 # Fix library paths (works for all ARCHs): sed -i -e "s#lib/gkrellm2#lib${LIBDIRSUFFIX}/gkrellm2#g" $(grep -lr 'lib/gkrellm2' *) diff --git a/source/xap/gnuchess/eboard.png16.diff b/source/xap/gnuchess/eboard.png16.diff new file mode 100644 index 000000000..f5743cdd9 --- /dev/null +++ b/source/xap/gnuchess/eboard.png16.diff @@ -0,0 +1,16 @@ +--- ./cimg.cc.orig 2008-02-22 09:51:22.000000000 -0600 ++++ ./cimg.cc 2015-03-23 11:10:46.570421240 -0500 +@@ -94,11 +94,11 @@ + ct == PNG_COLOR_TYPE_GRAY_ALPHA) + png_set_gray_to_rgb(pngp); + +- alloc(pngp->width,pngp->height); ++ alloc(png_get_image_width(pngp, infp), png_get_image_height(pngp, infp)); + if (!ok) { fclose(f); return; } + ok = 0; + +- for(i=0;i<pngp->height;i++) { ++ for(i=0;i<png_get_image_height(pngp, infp);i++) { + png_read_row(pngp, (png_bytep) (&data[i*rowlen]), NULL); + } + diff --git a/source/xap/gnuchess/gnuchess.SlackBuild b/source/xap/gnuchess/gnuchess.SlackBuild index 46bc29e0d..4e2fa415e 100755 --- a/source/xap/gnuchess/gnuchess.SlackBuild +++ b/source/xap/gnuchess/gnuchess.SlackBuild @@ -1,6 +1,6 @@ #!/bin/sh -# Copyright 2008, 2009, 2010, 2011, 2013 Patrick J. Volkerding, Sebeka, MN, USA +# Copyright 2008, 2009, 2010, 2011, 2013, 2015 Patrick J. Volkerding, Sebeka, MN, USA # All rights reserved. # # Redistribution and use of this script, with or without modification, is @@ -21,16 +21,16 @@ # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -VERGNUCHESS=6.0.3 +VERGNUCHESS=6.2.2 VERSJENG=11.2 VEREBOARD=1.1.1 -VERXBOARD=4.7.1 -BUILD=${BUILD:-2} +VERXBOARD=4.8.0 +BUILD=${BUILD:-1} # Automatically determine the architecture we're building on: if [ -z "$ARCH" ]; then case "$( uname -m )" in - i?86) export ARCH=i486 ;; + i?86) export ARCH=i586 ;; arm*) export ARCH=arm ;; # Unless $ARCH is already set, use uname -m for all other archs: *) export ARCH=$( uname -m ) ;; @@ -39,8 +39,8 @@ fi NUMJOBS=${NUMJOBS:-" -j7 "} -if [ "$ARCH" = "i486" ]; then - SLKCFLAGS="-O2 -march=i486 -mtune=i686" +if [ "$ARCH" = "i586" ]; then + SLKCFLAGS="-O2 -march=i586 -mtune=i686" elif [ "$ARCH" = "s390" ]; then SLKCFLAGS="-O2" elif [ "$ARCH" = "x86_64" ]; then @@ -71,6 +71,7 @@ find . \ CFLAGS="$SLKCFLAGS" \ ./configure \ --prefix=/usr \ + --mandir=/usr/man \ --infodir=/usr/info \ --build=$ARCH-slackware-linux make $NUMJOBS || make || exit 1 @@ -112,6 +113,7 @@ tar xvf $CWD/eboard-$VEREBOARD.tar.bz2 || exit 1 cd eboard-$VEREBOARD || exit 1 zcat $CWD/eboard.assert.diff.gz | patch -p1 --verbose || exit 1 zcat $CWD/eboard.ldl.diff.gz | patch -p1 --verbose || exit 1 +zcat $CWD/eboard.png16.diff.gz | patch -p1 --verbose || exit 1 chown -R root:root . find . \ \( -perm 777 -o -perm 775 -o -perm 711 -o -perm 555 -o -perm 511 \) \ @@ -136,7 +138,7 @@ cd $TMP rm -rf xboard-$VERXBOARD tar xvf $CWD/xboard-$VERXBOARD.tar.?z* || exit 1 cd xboard-$VERXBOARD || exit 1 -zcat $CWD/xboard.conf.in.diff.gz | patch -p1 --verbose || exit 1 +zcat $CWD/xboard.conf.diff.gz | patch -p1 --verbose || exit 1 chown -R root:root . find . \ \( -perm 777 -o -perm 775 -o -perm 711 -o -perm 555 -o -perm 511 \) \ diff --git a/source/xap/gnuchess/xboard.conf.in.diff b/source/xap/gnuchess/xboard.conf.diff index 488813800..160ce4fa1 100644 --- a/source/xap/gnuchess/xboard.conf.in.diff +++ b/source/xap/gnuchess/xboard.conf.diff @@ -1,14 +1,12 @@ ---- ./xboard.conf.in.orig 2013-02-20 23:59:30.000000000 -0600 -+++ ./xboard.conf.in 2013-03-19 21:39:17.377182426 -0500 -@@ -67,12 +67,12 @@ +--- ./xboard.conf.orig 2015-03-20 13:32:54.035406604 -0500 ++++ ./xboard.conf 2015-03-20 13:35:24.433417456 -0500 +@@ -73,11 +73,11 @@ ; ; Engines & adjudicatons in engine-engine games ; --firstChessProgram fairymax ---secondChessProgram fairymax --firstChessProgramNames {fairymax +-firstChessProgram gnuchess -+-secondChessProgram gnuchess +-firstChessProgramNames {"GNU Chess" -fcp gnuchess +fairymax "Fruit 2.1" -fcp fruit -fUCI diff --git a/source/xap/gnuplot/gnuplot.SlackBuild b/source/xap/gnuplot/gnuplot.SlackBuild index b6203229f..862ae88bf 100755 --- a/source/xap/gnuplot/gnuplot.SlackBuild +++ b/source/xap/gnuplot/gnuplot.SlackBuild @@ -1,6 +1,6 @@ #!/bin/sh -# Copyright 2008, 2009, 2010 Patrick J. Volkerding, Sebeka, MN, USA +# Copyright 2008, 2009, 2010, 2016 Patrick J. Volkerding, Sebeka, MN, USA # All rights reserved. # # Redistribution and use of this script, with or without modification, is @@ -22,12 +22,12 @@ PKGNAM=gnuplot VERSION=${VERSION:-$(echo $PKGNAM-*.tar.?z* | rev | cut -f 3- -d . | cut -f 1 -d - | rev)} -BUILD=${BUILD:-1} +BUILD=${BUILD:-2} # Automatically determine the architecture we're building on: if [ -z "$ARCH" ]; then case "$( uname -m )" in - i?86) export ARCH=i486 ;; + i?86) export ARCH=i586 ;; arm*) export ARCH=arm ;; # Unless $ARCH is already set, use uname -m for all other archs: *) export ARCH=$( uname -m ) ;; @@ -36,8 +36,8 @@ fi NUMJOBS=${NUMJOBS:-" -j7 "} -if [ "$ARCH" = "i486" ]; then - SLKCFLAGS="-O2 -march=i486 -mtune=i686" +if [ "$ARCH" = "i586" ]; then + SLKCFLAGS="-O2 -march=i586 -mtune=i686" LIBDIRSUFFIX="" elif [ "$ARCH" = "s390" ]; then SLKCFLAGS="-O2" @@ -76,11 +76,11 @@ CFLAGS="$SLKCFLAGS" \ --mandir=/usr/man \ --infodir=/usr/info \ --libdir=/usr/lib${LIBDIRSUFFIX} \ - --with-png \ --with-gd \ + --with-caca \ --datadir=/usr/share/gnuplot \ --with-readline=builtin \ - --build=${ARCH}-slackware-linux + --build=${ARCH}-slackware-linux || exit 1 # # I think most people would rather not have a Qt dependency here. @@ -89,11 +89,12 @@ CFLAGS="$SLKCFLAGS" \ make $NUMJOBS || make || exit 1 make install DESTDIR=$PKG || exit 1 +make install-info DESTDIR=$PKG || exit 1 find $PKG | xargs file | grep -e "executable" -e "shared object" \ | grep ELF | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null -# Compress and if needed symlink the man pages: +# Compress and if needed symlink the man pages: || exit 1 if [ -d $PKG/usr/man ]; then ( cd $PKG/usr/man for manpagedir in $(find . -type d -name "man*") ; do diff --git a/source/xap/gparted/com.slackware.pkexec.gparted.policy b/source/xap/gparted/com.slackware.pkexec.gparted.policy new file mode 100644 index 000000000..2981762ef --- /dev/null +++ b/source/xap/gparted/com.slackware.pkexec.gparted.policy @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE policyconfig PUBLIC + "-//freedesktop//DTD PolicyKit Policy Configuration 1.0//EN" + "http://www.freedesktop.org/standards/PolicyKit/1/policyconfig.dtd"> +<policyconfig> + + <action id="com.slackware.pkexec.gparted"> + <message>Authentication is required to run the GParted Partition Editor</message> + <icon_name>gparted</icon_name> + <defaults> + <allow_any>auth_admin</allow_any> + <allow_inactive>auth_admin</allow_inactive> + <allow_active>auth_admin</allow_active> + </defaults> + <annotate key="org.freedesktop.policykit.exec.path">/usr/sbin/gparted</annotate> + <annotate key="org.freedesktop.policykit.exec.allow_gui">true</annotate> + </action> + +</policyconfig> + diff --git a/source/xap/gparted/doinst.sh b/source/xap/gparted/doinst.sh new file mode 100644 index 000000000..4e8ba7071 --- /dev/null +++ b/source/xap/gparted/doinst.sh @@ -0,0 +1,4 @@ +if [ -x /usr/bin/update-desktop-database ]; then + /usr/bin/update-desktop-database -q usr/share/applications >/dev/null 2>&1 +fi + diff --git a/source/xap/gparted/gparted.SlackBuild b/source/xap/gparted/gparted.SlackBuild new file mode 100755 index 000000000..7a78ab016 --- /dev/null +++ b/source/xap/gparted/gparted.SlackBuild @@ -0,0 +1,132 @@ +#!/bin/sh +# +# Slackware build script for GParted +# +# Copyright 2009-2015 Erik W. Hanson, Minneapolis, MN, USA +# All rights reserved. +# +# Redistribution and use of this script, with or without modification, is +# permitted provided that the following conditions are met: +# +# 1. Redistributions of this script must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ''AS IS'' AND ANY EXPRESS OR IMPLIED +# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO +# EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; +# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +PKGNAM=gparted +VERSION=${VERSION:-$(echo $(basename $(echo $PRGNAM-*.tar.xz | cut -f 2 -d -) .tar.xz) | cut -f 2 -d -)} +BUILD=${BUILD:-1} + +NUMJOBS=${NUMJOBS:-" -j7 "} + +# Automatically determine the architecture we're building on: +if [ -z "$ARCH" ]; then + case "$( uname -m )" in + i?86) export ARCH=i586 ;; + arm*) export ARCH=arm ;; + # Unless $ARCH is already set, use uname -m for all other archs: + *) export ARCH=$( uname -m ) ;; + esac +fi + +CWD=$(pwd) +TMP=${TMP:-/tmp} +PKG=$TMP/package-$PKGNAM + +if [ "$ARCH" = "i586" ]; then + SLKCFLAGS="-O2 -march=i586 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "s390" ]; then + SLKCFLAGS="-O2" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "x86_64" ]; then + SLKCFLAGS="-O2 -fPIC" + LIBDIRSUFFIX="64" +else + SLKCFLAGS="-O2" + LIBDIRSUFFIX="" +fi + +rm -rf $PKG +mkdir -p $TMP $PKG +cd $TMP +rm -rf $PKGNAM-$VERSION +tar xvf $CWD/$PKGNAM-$VERSION.tar.xz || exit 1 +cd $PKGNAM-$VERSION || exit 1 +chown -R root:root . +find -L . \ + \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \ + -o -perm 511 \) -exec chmod 755 {} \; -o \ + \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \ + -o -perm 440 -o -perm 400 \) -exec chmod 644 {} \; + +sed -i "s:@gksuprog@ @installdir@/gparted %f:@installdir@/gparted_polkit %f:g" \ + gparted.desktop.in.in + +CFLAGS="$SLKCFLAGS" \ +CXXFLAGS="$SLKCFLAGS" \ +./configure \ + --prefix=/usr \ + --libdir=/usr/lib${LIBDIRSUFFIX} \ + --sysconfdir=/etc \ + --localstatedir=/var \ + --mandir=/usr/man \ + --docdir=/usr/doc/$PKGNAM-$VERSION \ + --disable-doc \ + --build=$ARCH-slackware-linux || exit 1 + +make $NUMJOBS || make || exit 1 +make install DESTDIR=$PKG || exit 1 + +find $PKG | xargs file | grep -e "executable" -e "shared object" | grep ELF \ + | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null + +mkdir -p $PKG/usr/share/polkit-1/actions +cat $CWD/com.slackware.pkexec.gparted.policy > $PKG/usr/share/polkit-1/actions/com.slackware.pkexec.gparted.policy + +cat $CWD/gparted_polkit > $PKG/usr/sbin/gparted_polkit +chmod 0755 $PKG/usr/sbin/gparted_polkit + +# Compress and link manpages, if any: +if [ -d $PKG/usr/man ]; then + ( cd $PKG/usr/man + for manpagedir in $(find . -type d -name "man*") ; do + ( cd $manpagedir + for eachpage in $( find . -type l -maxdepth 1) ; do + ln -s $( readlink $eachpage ).gz $eachpage.gz + rm $eachpage + done + gzip -9 *.? + ) + done + ) +fi + +mkdir -p $PKG/usr/doc/$PKGNAM-$VERSION +cp -a AUTHORS COPYING* ChangeLog NEWS README* \ + $PKG/usr/doc/$PKGNAM-$VERSION + +# If there's a ChangeLog, installing at least part of the recent history +# is useful, but don't let it get totally out of control: +if [ -r ChangeLog ]; then + DOCSDIR=$(echo $PKG/usr/doc/${PKGNAM}-$VERSION) + cat ChangeLog | head -n 1000 > $DOCSDIR/ChangeLog + touch -r ChangeLog $DOCSDIR/ChangeLog +fi + +mkdir -p $PKG/install +cat $CWD/slack-desc > $PKG/install/slack-desc +zcat $CWD/doinst.sh.gz > $PKG/install/doinst.sh + +cd $PKG +/sbin/makepkg -l y -c n $TMP/$PKGNAM-$VERSION-$ARCH-$BUILD.txz + diff --git a/source/xap/gparted/gparted_polkit b/source/xap/gparted/gparted_polkit new file mode 100644 index 000000000..76bd7b5e6 --- /dev/null +++ b/source/xap/gparted/gparted_polkit @@ -0,0 +1,6 @@ +#!/bin/bash +if [ $(which pkexec) ]; then + pkexec --disable-internal-agent "/usr/sbin/gparted" "$@" +else + /usr/sbin/gparted "$@" +fi diff --git a/source/xap/gparted/slack-desc b/source/xap/gparted/slack-desc new file mode 100644 index 000000000..85f3617b8 --- /dev/null +++ b/source/xap/gparted/slack-desc @@ -0,0 +1,19 @@ +# HOW TO EDIT THIS FILE: +# The "handy ruler" below makes it easier to edit a package description. +# Line up the first '|' above the ':' following the base package name, and +# the '|' on the right side marks the last column you can put a character in. +# You must make exactly 11 lines for the formatting to be correct. It's also +# customary to leave one space after the ':' except on otherwise blank lines. + + |-----handy-ruler------------------------------------------------------| +gparted: gparted (Graphical partition editor) +gparted: +gparted: With GParted you can resize, copy, and move partitions without data +gparted: loss, enabling you to: +gparted: +gparted: * Grow or shrink your C: drive +gparted: * Create space for new operating systems +gparted: * Attempt data rescue from lost partitions +gparted: +gparted: http://gparted.sourceforge.net/ +gparted: diff --git a/source/xap/gucharmap/gucharmap.SlackBuild b/source/xap/gucharmap/gucharmap.SlackBuild index 56fe66c67..7d493cb6f 100755 --- a/source/xap/gucharmap/gucharmap.SlackBuild +++ b/source/xap/gucharmap/gucharmap.SlackBuild @@ -22,12 +22,12 @@ VERSION=${VERSION:-$(echo gucharmap-*.tar.?z* | rev | cut -f 3- -d . | cut -f 1 -d - | rev)} -BUILD=${BUILD:-1} +BUILD=${BUILD:-2} # Automatically determine the architecture we're building on: if [ -z "$ARCH" ]; then case "$( uname -m )" in - i?86) export ARCH=i486 ;; + i?86) export ARCH=i586 ;; arm*) export ARCH=arm ;; # Unless $ARCH is already set, use uname -m for all other archs: *) export ARCH=$( uname -m ) ;; @@ -36,8 +36,8 @@ fi NUMJOBS=${NUMJOBS:-" -j7 "} -if [ "$ARCH" = "i486" ]; then - SLKCFLAGS="-O2 -march=i486 -mtune=i686" +if [ "$ARCH" = "i586" ]; then + SLKCFLAGS="-O2 -march=i586 -mtune=i686" LIBDIRSUFFIX="" elif [ "$ARCH" = "s390" ]; then SLKCFLAGS="-O2" diff --git a/source/xap/gv/gv-xft.patch b/source/xap/gv/gv-xft.patch new file mode 100644 index 000000000..eb0520a55 --- /dev/null +++ b/source/xap/gv/gv-xft.patch @@ -0,0 +1,404 @@ +diff -rc gv-3.7.4/configure gv-xft-3.7.4/configure +*** gv-3.7.4/configure 2013-03-17 12:20:09.000000000 +0100 +--- gv-xft-3.7.4/configure 2014-05-02 14:22:59.879439785 +0200 +*************** +*** 13604,13616 **** + true + fi + +! { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XawInitializeWidgetSet in -lXaw3d" >&5 +! $as_echo_n "checking for XawInitializeWidgetSet in -lXaw3d... " >&6; } + if test "${ac_cv_lib_Xaw3d_XawInitializeWidgetSet+set}" = set; then : + $as_echo_n "(cached) " >&6 + else + ac_check_lib_save_LIBS=$LIBS +! LIBS="-lXaw3d $X_LIBS $LIBS" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext + /* end confdefs.h. */ + +--- 13604,13616 ---- + true + fi + +! { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XawInitializeWidgetSet in -l$XAW3DLIB" >&5 +! $as_echo_n "checking for XawInitializeWidgetSet in -l$XAW3DLIB ... " >&6; } + if test "${ac_cv_lib_Xaw3d_XawInitializeWidgetSet+set}" = set; then : + $as_echo_n "(cached) " >&6 + else + ac_check_lib_save_LIBS=$LIBS +! LIBS="-l$XAW3DLIB $X_LIBS $LIBS" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext + /* end confdefs.h. */ + +*************** +*** 13645,13651 **** + #define HAVE_LIBXAW3D 1 + _ACEOF + +! LIBS="-lXaw3d $LIBS" + + else + as_fn_error "Unable to find a valid Xaw3d library. Please install it and rerun configure." "$LINENO" 5 +--- 13645,13651 ---- + #define HAVE_LIBXAW3D 1 + _ACEOF + +! LIBS="-l$XAW3DLIB $LIBS" + + else + as_fn_error "Unable to find a valid Xaw3d library. Please install it and rerun configure." "$LINENO" 5 +Seulement dans gv-xft-3.7.4: debian +diff -rc gv-3.7.4/src/FileSel.c gv-xft-3.7.4/src/FileSel.c +*** gv-3.7.4/src/FileSel.c 2012-04-01 16:43:24.000000000 +0200 +--- gv-xft-3.7.4/src/FileSel.c 2014-05-02 18:09:53.530875424 +0200 +*************** +*** 1853,1859 **** + SET_Arg(XtNallowMarks, False); + SET_Arg(XtNjustify, XtJustifyLeft); + *listP = ADD_Widget_Arg("list",vlistWidgetClass,*aaaP); +- + ENDMESSAGE(CreateList) + } + +--- 1853,1858 ---- +diff -rc gv-3.7.4/src/main.c gv-xft-3.7.4/src/main.c +*** gv-3.7.4/src/main.c 2012-04-01 16:43:24.000000000 +0200 +--- gv-xft-3.7.4/src/main.c 2014-05-02 20:26:04.052136882 +0200 +*************** +*** 62,67 **** +--- 62,70 ---- + #include INC_XAW(Scrollbar.h) + #include INC_XAW(XawInit.h) + #include INC_XMU(Editres.h) ++ #ifdef HAVE_XAW3DXFT ++ #include <X11/Xaw3dxft/Xaw3dXft.h> ++ #endif + #ifdef HAVE_LIBXINERAMA + #include INC_EXT(Xinerama.h) + #endif +*************** +*** 323,328 **** +--- 326,348 ---- + + int main(int argc, char *argv[]) + { ++ #ifdef HAVE_XAW3DXFT ++ XftInitFtLibrary(); ++ Xaw3dXftSetDefaultFontName("Liberation-10"); ++ Xaw3dXftSetHilitColor("#332211"); ++ Xaw3dXftSetInsensitiveTwist("#a00000"); ++ Xaw3dXftMenuSpacing = 0; ++ Xaw3dXftEncoding = -1; ++ Xaw3dXftStringHilight = 0; ++ Xaw3dXftStringUsePixmap = 0; ++ Xaw3dXftNoHilitReverse = 1; ++ Xaw3dXftButtonInverse = 0; ++ Xaw3dXftButtonDashed = 1; ++ Xaw3dXftShowTips = 1; ++ Xaw3dXftTextBgHilight = 1; ++ Xaw3dXftTextBgHilightColor = 0x332211; ++ #endif ++ + MAINBEGINMESSAGE(main) + gv_safe_gs_workdir = GV_LIBDIR "/safe-gs-workdir"; + gv_safe_gs_tempdir = 0; +Seulement dans gv-xft-3.7.4/src: main.c~ +diff -rc gv-3.7.4/src/misc_private.c gv-xft-3.7.4/src/misc_private.c +*** gv-3.7.4/src/misc_private.c 2012-03-29 18:03:49.000000000 +0200 +--- gv-xft-3.7.4/src/misc_private.c 2014-05-02 15:52:46.514612158 +0200 +*************** +*** 44,49 **** +--- 44,52 ---- + #include INC_XAW(Cardinals.h) + #include INC_X11(IntrinsicP.h) + #include INC_XAW(LabelP.h) ++ #ifdef HAVE_XAW3DXFT ++ #include <X11/Xaw3dxft/Xaw3dXft.h> ++ #endif + #include "GhostviewP.h" + + #include "types.h" +*************** +*** 111,119 **** +--- 114,127 ---- + + #ifdef HAVE_XAW3D_INTERNATIONAL + if( vw->simple.international == True ) { ++ #ifdef HAVE_XAW3DXFT ++ Xaw3dXftDrawString(widget, Xaw3dXftDefaultFont, ++ x, y, text, (int)(strlen(text))); ++ #else + XmbDrawString(XtDisplay(widget), XtWindow(widget), + w->label.fontset, w->label.normal_GC, + x, y, text, (int)(strlen(text))); ++ #endif + } else { + #endif + if (w->label.encoding) { +*************** +*** 121,129 **** +--- 129,142 ---- + w->label.normal_GC, + x, y,(XChar2b*)text, (int)(strlen(text))); + } else { ++ #ifdef HAVE_XAW3DXFT ++ Xaw3dXftDrawString(widget, Xaw3dXftDefaultFont, ++ x, y, text, (int)(strlen(text))); ++ #else + XDrawString(XtDisplay(widget), XtWindow(widget), + w->label.normal_GC, + x, y, text, (int)(strlen(text))); ++ #endif + } + #ifdef HAVE_XAW3D_INTERNATIONAL + } +diff -rc gv-3.7.4/src/paths.h gv-xft-3.7.4/src/paths.h +*** gv-3.7.4/src/paths.h 2012-04-01 16:43:24.000000000 +0200 +--- gv-xft-3.7.4/src/paths.h 2014-05-02 12:19:02.351201784 +0200 +*************** +*** 37,48 **** +--- 37,56 ---- + #if HAVE_GCC_VERSION(2,95) + #define INC_X11(aaa) <X11/aaa> + #define INC_XMU(aaa) <X11/Xmu/aaa> ++ #ifdef HAVE_XAW3DXFT ++ #define INC_XAW(aaa) <X11/Xaw3dxft/aaa> ++ #else + #define INC_XAW(aaa) <X11/Xaw3d/aaa> ++ #endif + #define INC_EXT(aaa) <X11/extensions/aaa> + #else + #define INC_X11(aaa) <X11/##aaa##> + #define INC_XMU(aaa) <X11/Xmu/##aaa##> ++ #ifdef HAVE_XAW3DXFT ++ #define INC_XAW(aaa) <X11/Xaw3dxft/##aaa##> ++ #else + #define INC_XAW(aaa) <X11/Xaw3d/##aaa##> ++ #endif + #define INC_EXT(aaa) <X11/extensions/##aaa##> + #endif + +diff -rc gv-3.7.4/src/Vlist.c gv-xft-3.7.4/src/Vlist.c +*** gv-3.7.4/src/Vlist.c 2012-04-01 16:43:24.000000000 +0200 +--- gv-xft-3.7.4/src/Vlist.c 2014-05-02 18:31:38.121917171 +0200 +*************** +*** 49,55 **** + #include "VlistP.h" + #include "Frame.h" + #include INC_XMU(Converters.h) +! + #define VLIST_MARK_LEFT_INDENT 4 + #define VLIST_MARK_LABEL_INTERNAL_WIDTH 11 + #define VLIST_MARK_LABEL_INDENT 4 +--- 49,57 ---- + #include "VlistP.h" + #include "Frame.h" + #include INC_XMU(Converters.h) +! #ifdef HAVE_XAW3DXFT +! #include <X11/Xaw3dxft/Xaw3dXft.h> +! #endif + #define VLIST_MARK_LEFT_INDENT 4 + #define VLIST_MARK_LABEL_INTERNAL_WIDTH 11 + #define VLIST_MARK_LABEL_INDENT 4 +*************** +*** 214,230 **** +--- 216,243 ---- + values.graphics_exposures = False; + vw->vlist.background_GC = XtGetGC((Widget)vw,(unsigned) GCForeground | GCGraphicsExposures,&values); + ++ Dimension merde; + /* TODO: check if this works here in international mode, or if it has + * to be moved to Realize... */ + #ifdef HAVE_XAW3D_INTERNATIONAL + if( vw->simple.international == True ) { ++ #ifdef HAVE_XAW3DXFT ++ vw->vlist.yofs = Xaw3dXftDefaultFont->ascent + 1; ++ vw->vlist.ydelta = Xaw3dXftDefaultFont->ascent + Xaw3dXftDefaultFont->descent; ++ #else + XFontSetExtents *ext = XExtentsOfFontSet(vw->label.fontset); + vw->vlist.yofs = (ext->max_ink_extent.y<0)?-ext->max_ink_extent.y:ext->max_ink_extent.y; + vw->vlist.ydelta = ext->max_ink_extent.height; ++ #endif + } else { + #endif ++ #ifdef HAVE_XAW3DXFT ++ vw->vlist.yofs = Xaw3dXftDefaultFont->ascent + 1; ++ vw->vlist.ydelta = Xaw3dXftDefaultFont->ascent + Xaw3dXftDefaultFont->descent; ++ #else + vw->vlist.yofs = vw->label.font->max_bounds.ascent; + vw->vlist.ydelta = vw->label.font->max_bounds.ascent + vw->label.font->max_bounds.descent; ++ #endif + #ifdef HAVE_XAW3D_INTERNATIONAL + } + #endif +*************** +*** 339,353 **** +--- 352,380 ---- + len = strlen(s); + #ifdef HAVE_XAW3D_INTERNATIONAL + if( vw->simple.international == True ) ++ #ifdef HAVE_XAW3DXFT ++ Xaw3dXftDrawString(w, Xaw3dXftDefaultFont, ++ vw->label.label_x, ++ vw->label.label_y + yofs + entry*ydelta, ++ s, len); ++ #else + XmbDrawString(XtDisplay(w), XtWindow(w), vw->label.fontset, + vw->label.normal_GC, + vw->label.label_x, vw->label.label_y + yofs + entry*ydelta, + s, len); ++ #endif + else + #endif ++ #ifdef HAVE_XAW3DXFT ++ Xaw3dXftDrawString(w, Xaw3dXftDefaultFont, ++ vw->label.label_x, ++ vw->label.label_y + yofs + entry*ydelta, ++ s, len); ++ #else + XDrawString(XtDisplay(w), XtWindow(w), vw->label.normal_GC, + vw->label.label_x, vw->label.label_y + yofs + entry*ydelta, + s, len); ++ #endif + } + ENDMESSAGE1(PaintEntryString) + } +*************** +*** 404,416 **** + if (region == NULL || XRectInRegion(region,x,y,width,height) != RectangleOut) { + if (erase) { + INFMESSAGE(clearing entry) +! XFillRectangle(XtDisplayOfObject(w), XtWindowOfObject(w),vw->vlist.background_GC,x,y,width,height); + } else { + INFMESSAGE(drawing entry) + XFillRectangle(XtDisplayOfObject(w), XtWindowOfObject(w),gc,x,y,width,height); + FrameDrawFrame(w,x,y,width,height,ss,sw, + vw->threeD.top_shadow_GC, + vw->threeD.bot_shadow_GC); + } + ret=1; + } +--- 431,453 ---- + if (region == NULL || XRectInRegion(region,x,y,width,height) != RectangleOut) { + if (erase) { + INFMESSAGE(clearing entry) +! #ifndef HAVE_XAW3DXFT +! XFillRectangle(XtDisplayOfObject(w), XtWindowOfObject(w),vw->vlist.background_GC,x,y,width,height); +! #else +! XFillRectangle(XtDisplayOfObject(w), XtWindowOfObject(w),vw->vlist.background_GC,x,y-1,width,height+2); +! #endif + } else { + INFMESSAGE(drawing entry) ++ #ifndef HAVE_XAW3DXFT + XFillRectangle(XtDisplayOfObject(w), XtWindowOfObject(w),gc,x,y,width,height); + FrameDrawFrame(w,x,y,width,height,ss,sw, + vw->threeD.top_shadow_GC, + vw->threeD.bot_shadow_GC); ++ #else ++ FrameDrawFrame(w,x,y-1,width,height+2,ss,sw, ++ vw->threeD.top_shadow_GC, ++ vw->threeD.bot_shadow_GC); ++ #endif + } + ret=1; + } +*************** +*** 491,505 **** + if (region == NULL || XRectInRegion(region,x,y,width,height) != RectangleOut) { + if (paint) { + INFMESSAGE(drawing mark) + XFillRectangle(XtDisplayOfObject(w), XtWindowOfObject(w),vw->vlist.mark_background_GC,x,y,width,height); + FrameDrawFrame(w,x,y,width,height,ss,vw->vlist.mark_shadow_width, + vw->threeD.top_shadow_GC, + vw->threeD.bot_shadow_GC); + } else { + INFMESSAGE(clearing mark) + XFillRectangle(XtDisplayOfObject(w), XtWindowOfObject(w), + (entry == vw->vlist.highlighted) ? vw->vlist.highlighted_background_GC : vw->vlist.background_GC, +! x,y,width,height); + } + } + } +--- 528,552 ---- + if (region == NULL || XRectInRegion(region,x,y,width,height) != RectangleOut) { + if (paint) { + INFMESSAGE(drawing mark) ++ #ifndef HAVE_XAW3DXFT + XFillRectangle(XtDisplayOfObject(w), XtWindowOfObject(w),vw->vlist.mark_background_GC,x,y,width,height); + FrameDrawFrame(w,x,y,width,height,ss,vw->vlist.mark_shadow_width, + vw->threeD.top_shadow_GC, + vw->threeD.bot_shadow_GC); ++ #else ++ FrameDrawFrame(w,x,y-1,width,height+2,ss,vw->vlist.mark_shadow_width, ++ vw->threeD.top_shadow_GC, ++ vw->threeD.bot_shadow_GC); ++ #endif + } else { + INFMESSAGE(clearing mark) + XFillRectangle(XtDisplayOfObject(w), XtWindowOfObject(w), + (entry == vw->vlist.highlighted) ? vw->vlist.highlighted_background_GC : vw->vlist.background_GC, +! #ifndef HAVE_XAW3DXFT +! x,y,width,height); +! #else +! x,y-1,width,height+2); +! #endif + } + } + } +*************** +*** 589,600 **** +--- 636,657 ---- + if (y + (vw->vlist.ydelta - vw->vlist.yofs) >= rectangle.y) { + #ifdef HAVE_XAW3D_INTERNATIONAL + if( vw->simple.international == True ) ++ #ifdef HAVE_XAW3DXFT ++ Xaw3dXftDrawString(w, Xaw3dXftDefaultFont, ++ vw->label.label_x, y, s, len); ++ #else + XmbDrawString(XtDisplay(w), XtWindow(w), vw->label.fontset, + vw->label.normal_GC, vw->label.label_x, y, s, len); ++ #endif + else + #endif ++ #ifdef HAVE_XAW3DXFT ++ Xaw3dXftDrawString(w, Xaw3dXftDefaultFont, ++ vw->label.label_x, y, s, len); ++ #else + XDrawString(XtDisplay(w), XtWindow(w), vw->label.normal_GC, + vw->label.label_x, y, s, len); ++ #endif + } + if (nl) + s = nl + 1; +*************** +*** 955,961 **** + int entriesvisible = -1; + + if (vw->vlist.ydelta > 0) { +! entriesvisible = height/vw->vlist.ydelta; + } + #if 0 + printf("fitting %d entries of height %d in %d", +--- 1012,1018 ---- + int entriesvisible = -1; + + if (vw->vlist.ydelta > 0) { +! entriesvisible = height/(vw->vlist.ydelta); + } + #if 0 + printf("fitting %d entries of height %d in %d", +*************** +*** 968,974 **** +--- 1025,1036 ---- + entriesvisible,(int)(vw->vlist.entries), + entriesvisible/(float)(vw->vlist.entries)); + #endif ++ #ifdef HAVE_XAW3DXFT ++ percent = 0.8 * entriesvisible/(float)(vw->vlist.entries); ++ #else + percent = entriesvisible/(float)(vw->vlist.entries); ++ #endif ++ if (percent>1.0) percent = 1.0; + INFMESSAGE(VlistVisibleLength) + IIMESSAGE(entriesvisible,vw->vlist.entries) + FMESSAGE(percent) diff --git a/source/xap/gv/gv.SlackBuild b/source/xap/gv/gv.SlackBuild index 751cefd8a..084699627 100755 --- a/source/xap/gv/gv.SlackBuild +++ b/source/xap/gv/gv.SlackBuild @@ -1,6 +1,6 @@ #!/bin/sh -# Copyright 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013 Patrick J. Volkerding, Sebeka, MN, USA +# Copyright 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2015 Patrick J. Volkerding, Sebeka, MN, USA # All rights reserved. # # Redistribution and use of this script, with or without modification, is @@ -23,7 +23,7 @@ PKGNAM=gv VERSION=${VERSION:-$(echo $PKGNAM-*.tar.?z* | rev | cut -f 3- -d . | cut -f 1 -d - | rev)} -BUILD=${BUILD:-1} +BUILD=${BUILD:-2} # Automatically determine the architecture we're building on: if [ -z "$ARCH" ]; then @@ -58,6 +58,8 @@ rm -rf ${PKGNAM}-${VERSION} tar xvf $CWD/${PKGNAM}-$VERSION.tar.?z* || exit 1 cd ${PKGNAM}-$VERSION || exit 1 +zcat $CWD/gv-xft.patch.gz | patch -p1 --verbose || exit 1 + # Make sure ownerships and permissions are sane: chown -R root:root . find . \ diff --git a/source/xap/hexchat/doinst.sh b/source/xap/hexchat/doinst.sh new file mode 100644 index 000000000..3e5691a05 --- /dev/null +++ b/source/xap/hexchat/doinst.sh @@ -0,0 +1,9 @@ +if [ -x /usr/bin/update-desktop-database ]; then + /usr/bin/update-desktop-database -q usr/share/applications >/dev/null 2>&1 +fi + +if [ -e usr/share/icons/hicolor/icon-theme.cache ]; then + if [ -x /usr/bin/gtk-update-icon-cache ]; then + /usr/bin/gtk-update-icon-cache usr/share/icons/hicolor >/dev/null 2>&1 + fi +fi diff --git a/source/xap/hexchat/hexchat.SlackBuild b/source/xap/hexchat/hexchat.SlackBuild new file mode 100755 index 000000000..e6e25afcc --- /dev/null +++ b/source/xap/hexchat/hexchat.SlackBuild @@ -0,0 +1,106 @@ +#!/bin/sh + +# Copyright 2016 Patrick J. Volkerding, Sebeka, MN, USA +# All rights reserved. +# +# Redistribution and use of this script, with or without modification, is +# permitted provided that the following conditions are met: +# +# 1. Redistributions of this script must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED +# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO +# EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; +# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +PKGNAM=hexchat +VERSION=${VERSION:-$(echo $PKGNAM-*.tar.?z* | rev | cut -f 3- -d . | cut -f 1 -d - | rev)} +BUILD=${BUILD:-1} + +NUMJOBS=${NUMJOBS:-" -j7 "} + +# Automatically determine the architecture we're building on: +if [ -z "$ARCH" ]; then + case "$( uname -m )" in + i?86) export ARCH=i586 ;; + arm*) export ARCH=arm ;; + # Unless $ARCH is already set, use uname -m for all other archs: + *) export ARCH=$( uname -m ) ;; + esac +fi + +CWD=$(pwd) +TMP=${TMP:-/tmp} +PKG=$TMP/package-$PKGNAM + +if [ "$ARCH" = "i586" ]; then + SLKCFLAGS="-O2 -march=i586 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "i686" ]; then + SLKCFLAGS="-O2 -march=i686 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "x86_64" ]; then + SLKCFLAGS="-O2 -fPIC" + LIBDIRSUFFIX="64" +else + SLKCFLAGS="-O2" + LIBDIRSUFFIX="" +fi + +NUMJOBS=${NUMJOBS:-" -j7 "} + +rm -rf $PKG +mkdir -p $TMP $PKG +cd $TMP +rm -rf $PKGNAM-$VERSION +tar xvf $CWD/$PKGNAM-$VERSION.tar.xz || exit 1 +cd $PKGNAM-$VERSION || exit 1 +chown -R root:root . +find -L . \ + \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \ + -o -perm 511 \) -exec chmod 755 {} \; -o \ + \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \ + -o -perm 440 -o -perm 400 \) -exec chmod 644 {} \; + +CFLAGS="$SLKCFLAGS" \ +CXXFLAGS="$SLKCFLAGS" \ +./configure \ + --prefix=/usr \ + --libdir=/usr/lib${LIBDIRSUFFIX} \ + --sysconfdir=/etc \ + --localstatedir=/var \ + --mandir=/usr/man \ + --enable-textfe \ + --enable-openssl \ + --disable-lua \ + --docdir=/usr/doc/$PKGNAM-$VERSION \ + --build=$ARCH-slackware-linux || exit 1 + +make $NUMJOBS || make || exit 1 +make install DESTDIR=$PKG || exit 1 + +find $PKG -print0 | xargs -0 file | grep -e "executable" -e "shared object" | grep ELF \ + | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true + +find $PKG/usr/man -type f -exec gzip -9 {} \; +for i in $( find $PKG/usr/man -type l ) ; do ln -s $( readlink $i ).gz $i.gz ; rm $i ; done + +mkdir -p $PKG/usr/doc/$PKGNAM-$VERSION +cp -a \ + COPYING* readme* \ + $PKG/usr/doc/$PKGNAM-$VERSION + +mkdir -p $PKG/install +cat $CWD/slack-desc > $PKG/install/slack-desc +zcat $CWD/doinst.sh.gz > $PKG/install/doinst.sh + +cd $PKG +/sbin/makepkg -l y -c n $TMP/$PKGNAM-$VERSION-$ARCH-$BUILD.txz + diff --git a/source/xap/hexchat/slack-desc b/source/xap/hexchat/slack-desc new file mode 100644 index 000000000..eb15d816c --- /dev/null +++ b/source/xap/hexchat/slack-desc @@ -0,0 +1,19 @@ +# HOW TO EDIT THIS FILE: +# The "handy ruler" below makes it easier to edit a package description. +# Line up the first '|' above the ':' following the base package name, and +# the '|' on the right side marks the last column you can put a character in. +# You must make exactly 11 lines for the formatting to be correct. It's also +# customary to leave one space after the ':' except on otherwise blank lines. + + |-----handy-ruler------------------------------------------------------| +hexchat: hexchat (GTK+ IRC client) +hexchat: +hexchat: HexChat is an IRC client for Windows and UNIX-like operating systems. +hexchat: +hexchat: Website: https://hexchat.github.io/ +hexchat: +hexchat: +hexchat: +hexchat: +hexchat: +hexchat: diff --git a/source/xap/imagemagick/doinst.sh b/source/xap/imagemagick/doinst.sh new file mode 100644 index 000000000..a78c00608 --- /dev/null +++ b/source/xap/imagemagick/doinst.sh @@ -0,0 +1,17 @@ +#!/bin/sh +config() { + NEW="$1" + OLD="`dirname $NEW`/`basename $NEW .new`" + # If there's no config file by that name, mv it over: + if [ ! -r $OLD ]; then + mv $NEW $OLD + elif [ "`cat $OLD | md5sum`" = "`cat $NEW | md5sum`" ]; then # toss the redundant copy + rm $NEW + fi + # Otherwise, we leave the .new copy for the admin to consider... +} + +# Process all .new config files: +for file in etc/ImageMagick*/*.new ; do + config $file +done diff --git a/source/xap/imagemagick/imagemagick.SlackBuild b/source/xap/imagemagick/imagemagick.SlackBuild index aca05857d..49797da04 100755 --- a/source/xap/imagemagick/imagemagick.SlackBuild +++ b/source/xap/imagemagick/imagemagick.SlackBuild @@ -1,6 +1,6 @@ #!/bin/sh -# Copyright 2008, 2009, 2010, 2011, 2012, 2013 Patrick J. Volkerding, Sebeka, MN, USA +# Copyright 2008, 2009, 2010, 2011, 2012, 2013, 2015, 2016 Patrick J. Volkerding, Sebeka, MN, USA # All rights reserved. # # Redistribution and use of this script, with or without modification, is @@ -28,20 +28,21 @@ BUILD=${BUILD:-1} # This is a bit messy, so we'll explain it well. :-) -# This is the base version number, which is needed to cd into the source tree -BASEVER=6.8.6-10 - # This is the version number used in the source tarball filename -FILEVER=6.8.6-10 +FILEVER=6.9.4-9 + +# This is the base version number, which is needed to cd into the source tree. +# Normally this is the same as $FILEVER, but allow setting it here if needed. +BASEVER=$FILEVER # This is the version number used in the package, where a version number cannot -# contain a '-' -PKGVER=6.8.6_10 +# contain a '-'. We'll try to autogenerate this one. +PKGVER=$(echo $FILEVER | tr - _) # Automatically determine the architecture we're building on: if [ -z "$ARCH" ]; then case "$( uname -m )" in - i?86) export ARCH=i486 ;; + i?86) export ARCH=i586 ;; arm*) export ARCH=arm ;; # Unless $ARCH is already set, use uname -m for all other archs: *) export ARCH=$( uname -m ) ;; @@ -50,8 +51,8 @@ fi NUMJOBS=${NUMJOBS:-" -j7 "} -if [ "$ARCH" = "i486" ]; then - SLKCFLAGS="-O2 -march=i486 -mtune=i686" +if [ "$ARCH" = "i586" ]; then + SLKCFLAGS="-O2 -march=i586 -mtune=i686" LIBDIRSUFFIX="" elif [ "$ARCH" = "s390" ]; then SLKCFLAGS="-O2" @@ -79,9 +80,12 @@ mkdir -p $TMP $PKG cd $TMP rm -rf ImageMagick-$BASEVER -tar xvf $CWD/ImageMagick-$FILEVER.tar.?z* || exit 1 +tar xvf $CWD/ImageMagick-$FILEVER.tar.xz || exit 1 cd ImageMagick-$BASEVER || exit 1 +# Harden the default settings in policy.xml to prevent security issues: +zcat $CWD/policy.xml.diff.gz | patch -p1 --verbose || exit 1 + chown -R root:root . find . \ \( -perm 777 -o -perm 775 -o -perm 711 -o -perm 555 -o -perm 511 \) \ @@ -109,6 +113,7 @@ CXXFLAGS="$SLKCFLAGS" \ --disable-openmp \ --enable-static=no \ --enable-shared \ + --with-gcc-arch=$ARCH \ --with-perl \ --with-rsvg \ --build=$ARCH-slackware-linux || exit 1 @@ -153,7 +158,27 @@ rmdir $PKG/usr/share/man find $PKG | xargs file | grep -e "executable" -e "shared object" | grep ELF \ | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null -gzip -9 $PKG/usr/man/man?/*.? +# Compress and link manpages, if any: +if [ -d $PKG/usr/man ]; then + ( cd $PKG/usr/man + for manpagedir in $(find . -type d -name "man*") ; do + ( cd $manpagedir + for eachpage in $( find . -type l -maxdepth 1 | grep -v '\.gz$') ; do + ln -s $( readlink $eachpage ).gz $eachpage.gz + rm $eachpage + done + gzip -9 *.? + ) + done + ) +fi + +# Move config files to .new: +( cd $PKG/etc/ImageMagick* + for file in * ; do + mv ${file} ${file}.new + done +) mkdir -p $PKG/usr mv $PKG/usr/share/doc $PKG/usr @@ -164,12 +189,13 @@ cp -a \ # If there's a ChangeLog, installing at least part of the recent history # is useful, but don't let it get totally out of control: if [ -r ChangeLog ]; then - DOCSDIR=$(echo $PKG/usr/doc/*-$VERSION) + DOCSDIR=$(echo $PKG/usr/doc/ImageMagick-*) cat ChangeLog | head -n 1000 > $DOCSDIR/ChangeLog touch -r ChangeLog $DOCSDIR/ChangeLog fi mkdir -p $PKG/install +zcat $CWD/doinst.sh.gz > $PKG/install/doinst.sh cat $CWD/slack-desc > $PKG/install/slack-desc cd $PKG diff --git a/source/xap/imagemagick/policy.xml.diff b/source/xap/imagemagick/policy.xml.diff new file mode 100644 index 000000000..dc033c1cb --- /dev/null +++ b/source/xap/imagemagick/policy.xml.diff @@ -0,0 +1,33 @@ +--- ./config/policy.xml.orig 2016-06-10 07:19:41.000000000 -0500 ++++ ./config/policy.xml 2016-06-17 17:30:47.311584022 -0500 +@@ -49,6 +49,21 @@ + exceeds policy maximum so memory limit is 1GB). + --> + <policymap> ++ <policy domain="cache" name="shared-secret" value="passphrase" stealth="true"/> ++ <!-- SECURITY: disable potentially insecure coders: --> ++ <policy domain="coder" rights="none" pattern="EPHEMERAL" /> ++ <policy domain="coder" rights="none" pattern="HTTPS" /> ++ <policy domain="coder" rights="none" pattern="MVG" /> ++ <policy domain="coder" rights="none" pattern="MSL" /> ++ <policy domain="coder" rights="none" pattern="TEXT" /> ++ <policy domain="coder" rights="none" pattern="SHOW" /> ++ <policy domain="coder" rights="none" pattern="WIN" /> ++ <policy domain="coder" rights="none" pattern="PLT" /> ++ <!-- SECURITY: prevent indirect reads: --> ++ <policy domain="path" rights="none" pattern="@*" /> ++ <!-- SECURITY: prevent pipe to shell: --> ++ <policy domain="path" rights="none" pattern="|*" /> ++ <!-- Some examples: --> + <!-- <policy domain="resource" name="temporary-path" value="/tmp"/> --> + <!-- <policy domain="resource" name="memory" value="2GiB"/> --> + <!-- <policy domain="resource" name="map" value="4GiB"/> --> +@@ -61,8 +76,4 @@ + <!-- <policy domain="resource" name="throttle" value="0"/> --> + <!-- <policy domain="resource" name="time" value="3600"/> --> + <!-- <policy domain="system" name="precision" value="6"/> --> +- <!-- <policy domain="coder" rights="none" pattern="MVG" /> --> +- <!-- <policy domain="delegate" rights="none" pattern="HTTPS" /> --> +- <!-- <policy domain="path" rights="none" pattern="@*"/> --> +- <policy domain="cache" name="shared-secret" value="passphrase" stealth="true"/> + </policymap> diff --git a/source/xap/mozilla-firefox/gold/gold b/source/xap/mozilla-firefox/gold/gold new file mode 100755 index 000000000..8c86d3b06 --- /dev/null +++ b/source/xap/mozilla-firefox/gold/gold @@ -0,0 +1,2 @@ +#!/bin/bash +/usr/bin/ld.gold "$@" diff --git a/source/xap/mozilla-firefox/gold/ld b/source/xap/mozilla-firefox/gold/ld new file mode 120000 index 000000000..78a06a2a1 --- /dev/null +++ b/source/xap/mozilla-firefox/gold/ld @@ -0,0 +1 @@ +gold
\ No newline at end of file diff --git a/source/xap/mozilla-firefox/mozilla-firefox.SlackBuild b/source/xap/mozilla-firefox/mozilla-firefox.SlackBuild index 78f826750..a09c1bb7f 100755 --- a/source/xap/mozilla-firefox/mozilla-firefox.SlackBuild +++ b/source/xap/mozilla-firefox/mozilla-firefox.SlackBuild @@ -1,6 +1,6 @@ #!/bin/sh -# Copyright 2008, 2009, 2010, 2011, 2012, 2013 Patrick J. Volkerding, Sebeka, Minnesota, USA +# Copyright 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016 Patrick J. Volkerding, Sebeka, Minnesota, USA # All rights reserved. # # Redistribution and use of this script, with or without modification, is @@ -23,13 +23,8 @@ # Thanks to the folks at the Mozilla Foundation for permission to # distribute this, and for all the great work! :-) -VERSION=$(basename $(ls firefox-*.tar.bz2 | cut -d - -f 2 | rev | cut -f 3- -d . | rev) .source) -RELEASEVER=$(echo $VERSION | cut -f 1 -d r | cut -f 1 -d b) -# With esr releases we need to fix this -if [ "${RELEASEVER}r" = "$VERSION" ]; then - RELEASEVER=$(echo $RELEASEVER | cut -f 1 -d e) - RELEASEVERMAJ=$(echo $RELEASEVER | cut -f 1 -d .) -fi +VERSION=$(basename $(ls firefox-*.tar.?z* | cut -d - -f 2 | rev | cut -f 3- -d . | rev) .source) +RELEASEVER=$(echo $VERSION | cut -f 1 -d r | cut -f 1 -d b | cut -f 1 -d e) BUILD=${BUILD:-1} # Specify this variable for a localized build. @@ -43,7 +38,7 @@ MOZLOCALIZE=${MOZLOCALIZE:-} # Automatically determine the architecture we're building on: if [ -z "$ARCH" ]; then case "$( uname -m )" in - i?86) export ARCH=i486 ;; + i?86) export ARCH=i586 ;; arm*) export ARCH=arm ;; # Unless $ARCH is already set, use uname -m for all other archs: *) export ARCH=$( uname -m ) ;; @@ -77,40 +72,55 @@ fi # PGO is disabled by default: PGO=${PGO:-no} -# Try to be gentle to the compiler, no optimizations: -if [ "$ARCH" = "i486" ]; then - SLKCFLAGS="-O" +if [ "$ARCH" = "i586" ]; then + SLKCFLAGS="" LIBDIRSUFFIX="" + OPTIMIZE=" --enable-optimize=-O2 " + # On IA32, use gold since GNU ld runs out of memory linking libxul.so: + PATH="$(pwd)/gold:$PATH" + export CC="gcc -B$(pwd)/gold" + export CXX="g++ -B$(pwd)/gold" elif [ "$ARCH" = "s390" ]; then - SLKCFLAGS="-O" + SLKCFLAGS="-O2" LIBDIRSUFFIX="" + OPTIMIZE=" --enable-optimize=-O2 " elif [ "$ARCH" = "x86_64" ]; then - SLKCFLAGS="-O -fPIC" + SLKCFLAGS="-O2 -fPIC" LIBDIRSUFFIX="64" + OPTIMIZE=" --enable-optimize=-O2 " elif [ "$ARCH" = "arm" ]; then SLKCFLAGS="-O2 -march=armv4 -mtune=xscale" LIBDIRSUFFIX="" + OPTIMIZE=" --enable-optimize=-O2 " elif [ "$ARCH" = "armel" ]; then SLKCFLAGS="-O2 -march=armv4t" LIBDIRSUFFIX="" + OPTIMIZE=" --enable-optimize=-O2 " +else + SLKCFLAGS="-O2" + LIBDIRSUFFIX="" + OPTIMIZE=" --enable-optimize=-O2 " +fi + +# Workaround to prevent unidentified crashes. Since this seems to be +# fixed in recent betas, only use the fix for known crashing versions: +if [ $VERSION = 43.0 \ + -o $VERSION = 43.0.1 \ + -o $VERSION = 43.0.2 \ + -o $VERSION = 43.0.3 \ + -o $VERSION = 43.0.4 ]; then + OPTIMIZE="$(echo "$OPTIMIZE" | sed 's/O2/Os/g')" + echo "Detected Firefox $VERSION... enabling crash workaround O2 -> Os." + sleep 1 fi CWD=$(pwd) TMP=${TMP:-/tmp} PKG=$TMP/package-mozilla-firefox -# If not specified, figure out if this is a beta, an esr -# or a release (we start assuming this last): +# If not specified, figure out if this is a beta or a release MOZVERS=${MOZVERS:-release} -if echo $VERSION | grep -q b ; then # we think it is a beta - if bzgrep -q ^mozilla-beta/ $CWD/firefox-$VERSION.source.tar.bz2 ; then - MOZVERS=beta - fi -elif echo $VERSION | grep -q esr ; then # we think it is an esr - if bzgrep -q ^mozilla-esr$RELEASEVERMAJ/ $CWD/firefox-$VERSION.source.tar.bz2 ; then - MOZVERS=esr$RELEASEVERMAJ - fi -fi +if echo $VERSION | grep -q b ; then MOZVERS=beta ; fi NUMJOBS=${NUMJOBS:-" -j7 "} @@ -118,30 +128,26 @@ rm -rf $PKG mkdir -p $TMP $PKG/usr/lib${LIBDIRSUFFIX} cd $TMP -rm -rf mozilla-$MOZVERS -tar xvf $CWD/firefox-$VERSION.source.tar.bz2 || exit 1 -cd mozilla-$MOZVERS || exit 1 +rm -rf firefox-$VERSION +# Unpack this in a subdirectory to prevent changing permissions on /tmp: +rm -rf firefox-unpack +mkdir firefox-unpack +cd firefox-unpack +tar xvf $CWD/firefox-$VERSION.source.tar.?z* || exit 1 +mv * .. +cd .. +rm -rf firefox-unpack +cd firefox-$VERSION || exit 1 # Fetch localization, if requested: if [ ! -z $MOZLOCALIZE ]; then LOC_TAG="FIREFOX_$( echo $VERSION | tr \. _ )_RELEASE" rm -f $LOC_TAG.tar.bz2 - if echo $MOZVERS | grep -q esr ; then LOC_VERS=release ; else LOC_VERS=$MOZVERS ; fi - wget https://hg.mozilla.org/releases/l10n/mozilla-$LOC_VERS/$MOZLOCALIZE/archive/$LOC_TAG.tar.bz2 + wget https://hg.mozilla.org/releases/l10n/mozilla-$MOZVERS/$MOZLOCALIZE/archive/$LOC_TAG.tar.bz2 tar xvf $LOC_TAG.tar.bz2 mv $MOZLOCALIZE-$LOC_TAG $MOZLOCALIZE fi -# Fix a long standing bug that's prevented staying current on GTK+. -# Thanks to the BLFS folks. :-) -cat << EOF >> layout/build/Makefile.in - -ifdef MOZ_ENABLE_CANVAS -EXTRA_DSO_LDOPTS += \$(XLDFLAGS) -lX11 -lXrender -endif - -EOF - # Patch mimeTypes.rdf # Uncomment this if you want to use the patch; otherwise, we overwrite the # mimeTypes.rdf inside the package directory later @@ -154,15 +160,6 @@ find . \ \( -perm 666 -o -perm 664 -o -perm 600 -o -perm 444 -o -perm 440 -o -perm 400 \) \ -exec chmod 644 {} \; -if gcc --version | grep -q "gcc (GCC) 4.7.0" ; then - # Enable compiling with gcc-4.7.0: - sed -i '/fcntl.h/a#include <unistd.h>' \ - ipc/chromium/src/base/{file_util_linux,message_pump_libevent,process_util_posix}.cc && - sed -i '/sys\/time\.h/a#include <unistd.h>' ipc/chromium/src/base/time_posix.cc && - sed -i 's#\"PRIxPTR#\" PRIxPTR#' layout/base/tests/TestPoisonArea.cpp && - sed -i 's# ""##' browser/base/Makefile.in -fi - # Our building options, in a configure-like display ;) OPTIONS="\ --enable-official-branding \ @@ -174,37 +171,39 @@ OPTIONS="\ --enable-default-toolkit=cairo-gtk2 \ --enable-startup-notification \ --enable-crypto \ + --enable-gstreamer=1.0 \ --enable-svg \ --enable-canvas \ --enable-logging \ --enable-xft \ --enable-webm \ - --enable-xinerama \ - --enable-optimize \ + $OPTIMIZE \ --enable-reorder \ --enable-strip \ --enable-cpp-rtti \ - --enable-single-profile \ --disable-gnomevfs \ - --disable-ldap \ --disable-accessibility \ --disable-crashreporter \ --disable-debug \ --disable-pedantic \ - --disable-installer \ - --disable-mailnews \ - --disable-composer \ - --disable-profilesharing" + --disable-installer" # Complains about missing APNG support in Slackware's libpng: # --with-system-png \ # This option breaks mozilla-12.0: # --enable-system-cairo \ +# NOTE: It probably reduces bugs to use the bundled library versions, +# so in general we will not --enable-system-libraries. +# But since system zlib has been used for a long time and isn't a moving +# target, we'll leave that one as-is. if [ ! -z $MOZLOCALIZE ]; then OPTIONS=$OPTIONS" \ --enable-ui-locale=$MOZLOCALIZE --with-l10n-base=.." - # There's no dictionaries in localized builds - sed -i "/@BINPATH@\/dictionaries\/\*/d" browser/installer/package-manifest.in || exit 1 + # There are no dictionaries in localized builds + sed -i \ + -e "/@BINPATH@\/dictionaries\/\*/d" \ + -e "/@RESPATH@\/dictionaries\/\*/d" \ + browser/installer/package-manifest.in || exit 1 fi export MOZILLA_OFFICIAL="1" @@ -226,7 +225,7 @@ echo ". \$topsrcdir/browser/config/mozconfig" > .mozconfig # Mozilla devs enforce using an objdir for building # https://developer.mozilla.org/en/Configuring_Build_Options#Building_with_an_objdir mkdir obj -echo "mk_add_options MOZ_OBJDIR=@TOPSRCDIR@/obj" >> .mozconfig +echo "mk_add_options MOZ_OBJDIR=$(pwd)/obj" >> .mozconfig if [ "$MOZLOCALIZE" ]; then echo "mk_add_options MOZ_CO_LOCALES=\"$MOZLOCALIZE\"" >> .mozconfig diff --git a/source/xap/mozilla-thunderbird/gold/gold b/source/xap/mozilla-thunderbird/gold/gold new file mode 100755 index 000000000..8c86d3b06 --- /dev/null +++ b/source/xap/mozilla-thunderbird/gold/gold @@ -0,0 +1,2 @@ +#!/bin/bash +/usr/bin/ld.gold "$@" diff --git a/source/xap/mozilla-thunderbird/gold/ld b/source/xap/mozilla-thunderbird/gold/ld new file mode 120000 index 000000000..78a06a2a1 --- /dev/null +++ b/source/xap/mozilla-thunderbird/gold/ld @@ -0,0 +1 @@ +gold
\ No newline at end of file diff --git a/source/xap/mozilla-thunderbird/mozilla-thunderbird.SlackBuild b/source/xap/mozilla-thunderbird/mozilla-thunderbird.SlackBuild index 24f58d6bf..d26fefedc 100755 --- a/source/xap/mozilla-thunderbird/mozilla-thunderbird.SlackBuild +++ b/source/xap/mozilla-thunderbird/mozilla-thunderbird.SlackBuild @@ -1,6 +1,6 @@ #!/bin/sh -# Copyright 2008, 2009, 2010, 2011, 2012 Patrick J. Volkerding, Sebeka, Minnesota, USA +# Copyright 2008, 2009, 2010, 2011, 2012, 2014, 2016 Patrick J. Volkerding, Sebeka, Minnesota, USA # All rights reserved. # # Redistribution and use of this script, with or without modification, is @@ -25,84 +25,73 @@ # Thanks to the folks at the Mozilla Foundation for permission to # distribute this, and for all the great work! :-) -TARBALLVER=$(basename $(ls thunderbird-*.tar.bz2 | cut -d - -f 2 | rev | cut -f 3- -d . | rev) .source) -# Strip the end from beta versions: -VERSION=$(echo $TARBALLVER | cut -f 1 -d b) -MAJORVER=$(echo $TARBALLVER | cut -f 1 -d .) +VERSION=$(basename $(ls thunderbird-*.tar.?z* | cut -d - -f 2 | rev | cut -f 3- -d . | rev) .source) +RELEASEVER=$(echo $VERSION | cut -f 1 -d e | cut -f 1 -d b) BUILD=${BUILD:-1} -CWD=$(pwd) -TMP=${TMP:-/tmp} -PKG=$TMP/package-mozilla-thunderbird - -# Figure out if this is a beta, or a release: -if echo $TARBALLVER | grep -q b ; then # we think it is a beta - if bzgrep -q comm-beta/ $CWD/thunderbird-$TARBALLVER.source.tar.bz2 ; then - MOZVERS=${MOZVERS:-beta} - else # blindly assume it is a release - MOZVERS=${MOZVERS:-release} - fi -else # release, no "b" in the tarball version: - if bzgrep -q comm-esr${MAJORVER}/ $CWD/thunderbird-$TARBALLVER.source.tar.bz2 ; then - # Looks like we get this sometimes even when the tarball isn't labeled as esr... - MOZVERS=${MOZVERS:-esr${MAJORVER}} - else - MOZVERS=${MOZVERS:-release} - fi -fi +# Specify this variable for a localized build. +# For example, to build a version of Thunderbird with Italian support, run +# the build script like this: +# +# MOZLOCALIZE=it ./mozilla-firefox.SlackBuild +# +MOZLOCALIZE=${MOZLOCALIZE:-} # Automatically determine the architecture we're building on: -MARCH=$( uname -m ) if [ -z "$ARCH" ]; then - case "$MARCH" in - i?86) export ARCH=i486 ;; - armv7hl) export ARCH=$MARCH ;; - arm*) export ARCH=arm ;; + case "$( uname -m )" in + i?86) export ARCH=i586 ;; + armv7hl) export ARCH=armv7hl ;; + arm*) export ARCH=arm ;; # Unless $ARCH is already set, use uname -m for all other archs: - *) export ARCH=$MARCH ;; + *) export ARCH=$( uname -m ) ;; esac fi -# Try to be gentle to the compiler, no optimizations: -if [ "$ARCH" = "i486" ]; then - SLKCFLAGS="-O" - LIBDIRSUFFIX="" -elif [ "$ARCH" = "s390" ]; then - SLKCFLAGS="-O" +if [ "$ARCH" = "i586" ]; then LIBDIRSUFFIX="" + OPTIMIZE=" --enable-optimize=-O2 " + # On IA32, use gold since GNU ld runs out of memory linking libxul.so: + PATH="$(pwd)/gold:$PATH" + export CC="gcc -B$(pwd)/gold" + export CXX="g++ -B$(pwd)/gold" elif [ "$ARCH" = "x86_64" ]; then - SLKCFLAGS="-O -fPIC" LIBDIRSUFFIX="64" -elif [ "$ARCH" = "arm" ]; then - SLKCFLAGS="-O2 -march=armv4 -mtune=xscale" - LIBDIRSUFFIX="" -elif [ "$ARCH" = "armel" ]; then - SLKCFLAGS="-O2 -march=armv4t" - LIBDIRSUFFIX="" -elif [ "$ARCH" = "armv7hl" ]; then - SLKCFLAGS="-O2 -march=armv7-a -mfpu=vfpv3-d16" + OPTIMIZE=" --enable-optimize=-O2 " +else LIBDIRSUFFIX="" + OPTIMIZE=" --enable-optimize=-O2 " fi +CWD=$(pwd) +TMP=${TMP:-/tmp} +PKG=$TMP/package-mozilla-thunderbird + NUMJOBS=${NUMJOBS:-" -j7 "} rm -rf $PKG mkdir -p $TMP $PKG/usr/lib${LIBDIRSUFFIX} cd $TMP -rm -rf comm-$MOZVERS -tar xvf $CWD/thunderbird-$TARBALLVER.source.tar.bz2 || exit 1 -cd comm-$MOZVERS || exit 1 - -# Fix a long standing bug that's prevented staying current on GTK+. -# Thanks to the BLFS folks. :-) -cat << EOF >> mozilla/layout/build/Makefile.in - -ifdef MOZ_ENABLE_CANVAS -EXTRA_DSO_LDOPTS += \$(XLDFLAGS) -lX11 -lXrender -endif - -EOF +rm -rf thunderbird-$VERSION +# Unpack this in a subdirectory to prevent changing permissions on /tmp: +rm -rf thunderbird-unpack +mkdir thunderbird-unpack +cd thunderbird-unpack +tar xvf $CWD/thunderbird-$VERSION.source.tar.?z* || exit 1 +mv * .. +cd .. +rm -rf thunderbird-unpack +cd thunderbird-$VERSION || exit 1 + +# Fetch localization, if requested: +if [ ! -z $MOZLOCALIZE ]; then + LOC_TAG="THUNDERBIRD_$( echo $VERSION | tr \. _ )_RELEASE" + rm -f $LOC_TAG.tar.bz2 + wget https://hg.mozilla.org/releases/l10n/mozilla-release/$MOZLOCALIZE/archive/$LOC_TAG.tar.bz2 + tar xvf $LOC_TAG.tar.bz2 + mv $MOZLOCALIZE-$LOC_TAG $MOZLOCALIZE +fi # Arch-dependent patches: case "$ARCH" in @@ -121,44 +110,15 @@ find . \ \( -perm 666 -o -perm 664 -o -perm 600 -o -perm 444 -o -perm 440 -o -perm 400 \) \ -exec chmod 644 {} \; -if gcc --version | grep -q "gcc (GCC) 4.7.0" ; then - # Enable compiling with gcc-4.7.0: - sed -i '/fcntl.h/a#include <unistd.h>' \ - mozilla/ipc/chromium/src/base/{file_util_linux,message_pump_libevent,process_util_posix}.cc && - sed -i '/sys\/time\.h/a#include <unistd.h>' mozilla/ipc/chromium/src/base/time_posix.cc && - sed -i 's#\"PRIxPTR#\" PRIxPTR#g' mozilla/layout/base/tests/TestPoisonArea.cpp && - sed -i 's#\"CRLF#\" CRLF#g' mailnews/base/search/src/nsMsgSearchAdapter.cpp && - sed -i 's#\"CRLF#\" CRLF#g' mailnews/base/src/nsMsgFolderCompactor.cpp && - sed -i 's#\"CRLF#\" CRLF#g' mailnews/compose/src/nsSmtpProtocol.cpp && - sed -i 's#\"CRLF#\" CRLF#g' mailnews/imap/src/nsImapMailFolder.cpp && - sed -i 's#\"CRLF#\" CRLF#g' mailnews/imap/src/nsImapProtocol.cpp && - sed -i 's#\"CRLF#\" CRLF#g' mailnews/imap/src/nsImapServerResponseParser.cpp && - sed -i 's#\"CRLF#\" CRLF#g' mailnews/local/src/nsPop3Protocol.cpp && - sed -i 's#\"CRLF#\" CRLF#g' mailnews/mime/src/mimedrft.cpp && - sed -i 's#\"MSG_LINEBREAK#\" MSG_LINEBREAK#g' mailnews/mime/src/mimemult.cpp && - sed -i 's#\"MSG_LINEBREAK#\" MSG_LINEBREAK#g' mailnews/base/src/nsMsgFolderCompactor.cpp && - sed -i 's# ""##' mozilla/browser/base/Makefile.in -fi - -# Mozilla devs enforce using an objdir for building -# and launching configure with the absolute path -# https://developer.mozilla.org/en/Configuring_Build_Options#Building_with_an_objdir -mkdir obj -cd obj -export MOZILLA_DIR=$TMP/comm-$MOZVERS/mozilla && -export MOZILLA_OFFICIAL="1" && -export BUILD_OFFICIAL="1" && -export MOZ_PHOENIX="1" && -export CFLAGS="$SLKCFLAGS" && -export CXXFLAGS="$SLKCFLAGS" && -export MOZ_MAKE_FLAGS="$NUMJOBS" && -$TMP/comm-$MOZVERS/configure \ +# Our building options, in a configure-like display ;) +OPTIONS="\ --enable-official-branding \ --prefix=/usr \ --libdir=/usr/lib${LIBDIRSUFFIX} \ --with-default-mozilla-five-home=/usr/lib${LIBDIRSUFFIX}/thunderbird-$VERSION \ --with-system-zlib \ --enable-application=mail \ + --enable-calendar \ --enable-default-toolkit=cairo-gtk2 \ --enable-startup-notification \ --enable-crypto \ @@ -167,34 +127,60 @@ $TMP/comm-$MOZVERS/configure \ --enable-svg \ --enable-canvas \ --enable-xft \ - --enable-xinerama \ - --enable-optimize \ + $OPTIMIZE \ --enable-reorder \ --enable-strip \ --enable-cpp-rtti \ - --enable-single-profile \ --disable-accessibility \ --disable-crashreporter \ --disable-debug \ --disable-tests \ - --disable-logging \ --disable-pedantic \ - --disable-installer \ - --disable-profilesharing + --host=$ARCH-slackware-linux \ + --target=$ARCH-slackware-linux \ + --build=$ARCH-slackware-linux" # Complains about missing APNG support in Slackware's libpng: #--with-system-png \ # Broken with 12.0: #--enable-system-cairo \ +if [ ! -z $MOZLOCALIZE ]; then + OPTIONS=$OPTIONS" \ + --enable-ui-locale=$MOZLOCALIZE + --with-l10n-base=.." + # There are no dictionaries in localized builds + sed -i \ + -e "/@BINPATH@\/dictionaries\/\*/d" \ + -e "/@RESPATH@\/dictionaries\/\*/d" \ + mail/installer/package-manifest.in || exit 1 +fi -#make -f client.mk build MOZ_MAKE_FLAGS="$NUMJOBS" || exit 1 -make $NUMJOBS || exit 1 -make install DESTDIR=$PKG || exit 1 +export BUILD_OFFICIAL=1 +export MOZILLA_OFFICIAL=1 +export MOZ_PHOENIX=1 +export MOZ_MAKE_FLAGS="$NUMJOBS" -# Exit obj directory: -cd .. +# Clear some variables that could break the build +unset DBUS_SESSION_BUS_ADDRESS ORBIT_SOCKETDIR SESSION_MANAGER \ + XDG_SESSION_COOKIE XAUTHORITY MAKEFLAGS + +# Assemble our .mozconfig: +echo > .mozconfig + +# Mozilla devs enforce using an objdir for building +# https://developer.mozilla.org/en/Configuring_Build_Options#Building_with_an_objdir +mkdir obj +echo "mk_add_options MOZ_OBJDIR=$(pwd)/obj" >> .mozconfig +# This directory is also needed or the build will fail: +mkdir -p mozilla/obj + +# Write in it the options above +for option in $OPTIONS; do echo "ac_add_options $option" >> .mozconfig; done + +make -f client.mk build || exit 1 +make -f client.mk install DESTDIR=$PKG || exit 1 # We don't need these (just symlinks anyway): -rm -rf $PKG/usr/lib${LIBDIRSUFFIX}/thunderbird-devel-$VERSION +rm -rf $PKG/usr/lib${LIBDIRSUFFIX}/thunderbird-devel-$RELEASEVER # Nor these: rm -rf $PKG/usr/include @@ -212,10 +198,10 @@ cat $CWD/mozilla-thunderbird.desktop > $PKG/usr/share/applications/mozilla-thund mkdir -p $PKG/usr/share/pixmaps cat $CWD/thunderbird.png > $PKG/usr/share/pixmaps/thunderbird.png -# These files/directories are usually created if Firefox is run as root, +# These files/directories are usually created if Thunderbird is run as root, # which on many systems might (and possibly should) be never. Therefore, if we # don't see them we'll put stubs in place to prevent startup errors. -( cd $PKG/usr/lib${LIBDIRSUFFIX}/thunderbird-$VERSION +( cd $PKG/usr/lib${LIBDIRSUFFIX}/thunderbird-$RELEASEVER if [ -d extensions/talkback\@mozilla.org ]; then if [ ! -r extensions/talkback\@mozilla.org/chrome.manifest ]; then echo > extensions/talkback\@mozilla.org/chrome.manifest @@ -227,21 +213,27 @@ cat $CWD/thunderbird.png > $PKG/usr/share/pixmaps/thunderbird.png ) # Need some default icons in the right place: -mkdir -p $PKG/usr/lib${LIBDIRSUFFIX}/thunderbird-$VERSION/chrome/icons/default -install -m 644 other-licenses/branding/thunderbird/default16.png \ - $PKG/usr/lib${LIBDIRSUFFIX}/thunderbird-$VERSION/icons/ -install -m 644 other-licenses/branding/thunderbird/default16.png \ - $PKG/usr/lib${LIBDIRSUFFIX}/thunderbird-$VERSION/chrome/icons/default/ -( cd $PKG/usr/lib${LIBDIRSUFFIX}/thunderbird-$VERSION - install -m 644 icons/{default,mozicon50}.xpm chrome/icons/default/ -) +for i in 16 22 24 32 48 256; do + install -m 0644 -D other-licenses/branding/thunderbird/mailicon${i}.png \ + $PKG/usr/share/icons/hicolor/${i}x${i}/apps/thunderbird.png +done +mkdir -p $PKG/usr/share/pixmaps +( cd $PKG/usr/share/pixmaps ; ln -sf /usr/share/icons/hicolor/256x256/apps/thunderbird . ) +mkdir -p $PKG/usr/lib$LIBDIRSUFFIX/thunderbird-$RELEASEVER/chrome/icons/default +install -m 644 other-licenses/branding/thunderbird/mailicon16.png \ + $PKG/usr/lib$LIBDIRSUFFIX/thunderbird-$RELEASEVER/icons/ +install -m 644 other-licenses/branding/thunderbird/mailicon16.png \ + $PKG/usr/lib$LIBDIRSUFFIX/thunderbird-$RELEASEVER/chrome/icons/default/ # Copy over the LICENSE -install -p -c -m 644 LICENSE $PKG/usr/lib${LIBDIRSUFFIX}/thunderbird-$VERSION/ +install -p -c -m 644 LICENSE $PKG/usr/lib${LIBDIRSUFFIX}/thunderbird-$RELEASEVER/ mkdir $PKG/install cat $CWD/slack-desc > $PKG/install/slack-desc cd $PKG -/sbin/makepkg -l y -c n $TMP/mozilla-thunderbird-$TARBALLVER-$ARCH-$BUILD.txz - +if [ -z $MOZLOCALIZE ]; then + /sbin/makepkg -l y -c n $TMP/mozilla-thunderbird-$VERSION-$ARCH-$BUILD.txz +else + /sbin/makepkg -l y -c n $TMP/mozilla-thunderbird-$VERSION-$ARCH-${BUILD}_$MOZLOCALIZE.txz +fi diff --git a/source/xap/network-manager-applet/network-manager-applet.SlackBuild b/source/xap/network-manager-applet/network-manager-applet.SlackBuild index 5eb17a861..8257aadaa 100755 --- a/source/xap/network-manager-applet/network-manager-applet.SlackBuild +++ b/source/xap/network-manager-applet/network-manager-applet.SlackBuild @@ -2,7 +2,7 @@ # Slackware build script for network-manager-applet -# Copyright 2010, 2011 Robby Workman, Northport, Alabama, USA +# Copyright 2010, 2011, 2014 Robby Workman, Northport, Alabama, USA # All rights reserved. # # Redistribution and use of this script, with or without modification, is @@ -28,7 +28,7 @@ BUILD=${BUILD:-1} if [ -z "$ARCH" ]; then case "$( uname -m )" in - i?86) ARCH=i486 ;; + i?86) ARCH=i586 ;; arm*) ARCH=arm ;; *) ARCH=$( uname -m ) ;; esac @@ -40,8 +40,8 @@ CWD=$(pwd) TMP=${TMP:-/tmp} PKG=$TMP/package-$PKGNAM -if [ "$ARCH" = "i486" ]; then - SLKCFLAGS="-O2 -march=i486 -mtune=i686" +if [ "$ARCH" = "i586" ]; then + SLKCFLAGS="-O2 -march=i586 -mtune=i686" LIBDIRSUFFIX="" elif [ "$ARCH" = "i686" ]; then SLKCFLAGS="-O2 -march=i686 -mtune=i686" @@ -67,9 +67,6 @@ find . \ \( -perm 666 -o -perm 664 -o -perm 600 -o -perm 444 -o -perm 440 -o -perm 400 \) \ -exec chmod 644 {} \; -sed -i 's/GtkBox/GtkHBox/g' src/connection-editor/ce-page-general.ui -sed -i 's/GtkBox/GtkVBox/g' src/connection-editor/nm-connection-editor.ui - CFLAGS="$SLKCFLAGS" \ CXXFLAGS="$SLKCFLAGS" \ ./configure \ @@ -79,9 +76,9 @@ CXXFLAGS="$SLKCFLAGS" \ --localstatedir=/var \ --mandir=/usr/man \ --docdir=/usr/doc/$PKGNAM-$VERSION \ - --with-gtkver=2 \ --disable-static \ --enable-more-warnings=no \ + --with-modem-manager-1 \ --build=$ARCH-slackware-linux || exit 1 make $NUMJOBS || make || exit 1 diff --git a/source/xap/pan/pan.SlackBuild b/source/xap/pan/pan.SlackBuild index ab8915918..540bdb7e3 100755 --- a/source/xap/pan/pan.SlackBuild +++ b/source/xap/pan/pan.SlackBuild @@ -23,12 +23,12 @@ PKGNAM=pan VERSION=${VERSION:-$(echo $PKGNAM-*.tar.?z* | cut -d - -f 2 | rev | cut -f 3- -d . | rev)} -BUILD=${BUILD:-2} +BUILD=${BUILD:-3} # Automatically determine the architecture we're building on: if [ -z "$ARCH" ]; then case "$( uname -m )" in - i?86) export ARCH=i486 ;; + i?86) export ARCH=i586 ;; arm*) export ARCH=arm ;; # Unless $ARCH is already set, use uname -m for all other archs: *) export ARCH=$( uname -m ) ;; @@ -38,8 +38,8 @@ fi NUMJOBS=${NUMJOBS:-" -j7 "} -if [ "$ARCH" = "i486" ]; then - SLKCFLAGS="-O2 -march=i486 -mtune=i686" +if [ "$ARCH" = "i586" ]; then + SLKCFLAGS="-O2 -march=i586 -mtune=i686" elif [ "$ARCH" = "s390" ]; then SLKCFLAGS="-O2" elif [ "$ARCH" = "x86_64" ]; then diff --git a/source/xap/pavucontrol/doinst.sh b/source/xap/pavucontrol/doinst.sh new file mode 100644 index 000000000..5fb28930d --- /dev/null +++ b/source/xap/pavucontrol/doinst.sh @@ -0,0 +1,3 @@ +if [ -x /usr/bin/update-desktop-database ]; then + /usr/bin/update-desktop-database -q usr/share/applications >/dev/null 2>&1 +fi diff --git a/source/xap/pavucontrol/pavucontrol.SlackBuild b/source/xap/pavucontrol/pavucontrol.SlackBuild new file mode 100755 index 000000000..59a49d8c2 --- /dev/null +++ b/source/xap/pavucontrol/pavucontrol.SlackBuild @@ -0,0 +1,97 @@ +#!/bin/sh + +# Copyright 2015 Patrick J. Volkerding, Sebeka, Minnesota, USA +# All rights reserved. +# +# Redistribution and use of this script, with or without modification, is +# permitted provided that the following conditions are met: +# +# 1. Redistributions of this script must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED +# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO +# EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; +# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +PKGNAM=pavucontrol +VERSION=${VERSION:-$(echo $PKGNAM-*.tar.?z* | rev | cut -f 3- -d . | cut -f 1 -d - | rev)} +BUILD=${BUILD:-1} + +NUMJOBS=${NUMJOBS:-" -j7 "} + +if [ -z "$ARCH" ]; then + case "$( uname -m )" in + i?86) ARCH=i586 ;; + arm*) ARCH=arm ;; + *) ARCH=$( uname -m ) ;; + esac +fi + +CWD=$(pwd) +TMP=${TMP:-/tmp} +PKG=$TMP/package-$PKGNAM + +if [ "$ARCH" = "i586" ]; then + SLKCFLAGS="-O2 -march=i586 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "i686" ]; then + SLKCFLAGS="-O2 -march=i686 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "x86_64" ]; then + SLKCFLAGS="-O2 -fPIC" + LIBDIRSUFFIX="64" +else + SLKCFLAGS="-O2" + LIBDIRSUFFIX="" +fi + +NUMJOBS=${NUMJOBS:-" -j7 "} + +rm -rf $PKG +mkdir -p $TMP $PKG +cd $TMP +rm -rf $PKGNAM-$VERSION +tar xvf $CWD/$PKGNAM-$VERSION.tar.xz || exit 1 +cd $PKGNAM-$VERSION || exit 1 +chown -R root:root . +find -L . \ + \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \ + -o -perm 511 \) -exec chmod 755 {} \; -o \ + \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \ + -o -perm 440 -o -perm 400 \) -exec chmod 644 {} \; + +zcat $CWD/replace-gtk-stock-lock-icon.diff.gz | patch -p1 --verbose || exit 1 + +CFLAGS="$SLKCFLAGS" \ +CXXFLAGS="$SLKCFLAGS -std=c++11" \ +./configure \ + --prefix=/usr \ + --libdir=/usr/lib${LIBDIRSUFFIX} \ + --sysconfdir=/etc \ + --localstatedir=/var \ + --mandir=/usr/man \ + --docdir=/usr/doc/$PKGNAM-$VERSION \ + --build=$ARCH-slackware-linux || exit 1 + +make $NUMJOBS || make || exit 1 +make install DESTDIR=$PKG || exit 1 + +find $PKG | xargs file | grep -e "executable" -e "shared object" | grep ELF \ + | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true + +mkdir -p $PKG/usr/doc/$PKGNAM-$VERSION +cp -a COPYING* doc/README* LICENSE $PKG/usr/doc/$PKGNAM-$VERSION + +mkdir -p $PKG/install +cat $CWD/slack-desc > $PKG/install/slack-desc +zcat $CWD/doinst.sh.gz > $PKG/install/doinst.sh + +cd $PKG +/sbin/makepkg -l y -c n $TMP/$PKGNAM-$VERSION-$ARCH-$BUILD.txz diff --git a/source/xap/pavucontrol/replace-gtk-stock-lock-icon.diff b/source/xap/pavucontrol/replace-gtk-stock-lock-icon.diff new file mode 100644 index 000000000..cd8df10d1 --- /dev/null +++ b/source/xap/pavucontrol/replace-gtk-stock-lock-icon.diff @@ -0,0 +1,21 @@ +diff -Nur pavucontrol-3.0.orig/src/pavucontrol.glade pavucontrol-3.0/src/pavucontrol.glade +--- pavucontrol-3.0.orig/src/pavucontrol.glade 2015-03-24 09:39:00.000000000 -0500 ++++ pavucontrol-3.0/src/pavucontrol.glade 2016-01-04 22:40:15.553206280 -0600 +@@ -312,7 +312,7 @@ + <object class="GtkImage" id="image18"> + <property name="visible">True</property> + <property name="can_focus">False</property> +- <property name="icon_name">stock_lock</property> ++ <property name="icon_name">security-medium</property> + <property name="icon-size">1</property> + </object> + </child> +@@ -1474,7 +1474,7 @@ + <object class="GtkImage" id="image18"> + <property name="visible">True</property> + <property name="can_focus">False</property> +- <property name="icon_name">stock_lock</property> ++ <property name="icon_name">security-medium</property> + <property name="icon-size">1</property> + </object> + </child> diff --git a/source/xap/pavucontrol/slack-desc b/source/xap/pavucontrol/slack-desc new file mode 100644 index 000000000..86f8f5d77 --- /dev/null +++ b/source/xap/pavucontrol/slack-desc @@ -0,0 +1,19 @@ +# HOW TO EDIT THIS FILE: +# The "handy ruler" below makes it easier to edit a package description. +# Line up the first '|' above the ':' following the base package name, and +# the '|' on the right side marks the last column you can put a character in. +# You must make exactly 11 lines for the formatting to be correct. It's also +# customary to leave one space after the ':' except on otherwise blank lines. + + |-----handy-ruler------------------------------------------------------| +pavucontrol: pavucontrol (PulseAudio Volume Controller) +pavucontrol: +pavucontrol: It is a simple GTK based volume control tool("mixer") for +pavucontrol: PulseAudio sound server. In contrast to classic mixer tools, this one +pavucontrol: allows you to control both the volume of hardware devices and of +pavucontrol: each playback stream separately. +pavucontrol: +pavucontrol: Website: http://0pointer.de/lennart/projects/pavucontrol/ +pavucontrol: +pavucontrol: +pavucontrol: diff --git a/source/xap/pidgin/doinst.sh b/source/xap/pidgin/doinst.sh new file mode 100644 index 000000000..1f8ff67de --- /dev/null +++ b/source/xap/pidgin/doinst.sh @@ -0,0 +1,10 @@ +if [ -x /usr/bin/update-desktop-database ]; then + /usr/bin/update-desktop-database -q usr/share/applications >/dev/null 2>&1 +fi + +if [ -e usr/share/icons/hicolor/icon-theme.cache ]; then + if [ -x /usr/bin/gtk-update-icon-cache ]; then + /usr/bin/gtk-update-icon-cache usr/share/icons/hicolor >/dev/null 2>&1 + fi +fi + diff --git a/source/xap/pidgin/link-libirc-to-libsasl2.patch b/source/xap/pidgin/link-libirc-to-libsasl2.patch deleted file mode 100644 index 2858ac994..000000000 --- a/source/xap/pidgin/link-libirc-to-libsasl2.patch +++ /dev/null @@ -1,65 +0,0 @@ ---- ./libpurple/protocols/irc/Makefile.am.orig 2013-02-11 03:16:52.000000000 -0600 -+++ ./libpurple/protocols/irc/Makefile.am 2013-02-15 15:18:32.950591016 -0600 -@@ -27,7 +27,7 @@ - st = - pkg_LTLIBRARIES = libirc.la - libirc_la_SOURCES = $(IRCSOURCES) --libirc_la_LIBADD = $(GLIB_LIBS) -+libirc_la_LIBADD = $(GLIB_LIBS) $(SASL_LIBS) - - endif - ---- ./libpurple/protocols/irc/Makefile.in.orig 2013-02-11 03:17:20.000000000 -0600 -+++ ./libpurple/protocols/irc/Makefile.in 2013-02-15 15:18:43.256590687 -0600 -@@ -1,4 +1,4 @@ --# Makefile.in generated by automake 1.11.6 from Makefile.am. -+# Makefile.in generated by automake 1.11.5 from Makefile.am. - # @configure_input@ - - # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -@@ -92,7 +92,8 @@ - am__installdirs = "$(DESTDIR)$(pkgdir)" - LTLIBRARIES = $(noinst_LTLIBRARIES) $(pkg_LTLIBRARIES) - am__DEPENDENCIES_1 = --@STATIC_IRC_FALSE@libirc_la_DEPENDENCIES = $(am__DEPENDENCIES_1) -+@STATIC_IRC_FALSE@libirc_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \ -+@STATIC_IRC_FALSE@ $(am__DEPENDENCIES_1) - am__libirc_la_SOURCES_DIST = cmds.c dcc_send.c irc.c irc.h msgs.c \ - parse.c - am__objects_1 = libirc_la-cmds.lo libirc_la-dcc_send.lo \ -@@ -415,7 +416,7 @@ - @STATIC_IRC_TRUE@libirc_la_SOURCES = $(IRCSOURCES) - @STATIC_IRC_TRUE@libirc_la_CFLAGS = $(AM_CFLAGS) - @STATIC_IRC_FALSE@pkg_LTLIBRARIES = libirc.la --@STATIC_IRC_FALSE@libirc_la_LIBADD = $(GLIB_LIBS) -+@STATIC_IRC_FALSE@libirc_la_LIBADD = $(GLIB_LIBS) $(SASL_LIBS) - AM_CPPFLAGS = \ - -I$(top_srcdir)/libpurple \ - -I$(top_builddir)/libpurple \ ---- ./libpurple/protocols/irc/Makefile.orig 2013-02-15 15:16:32.812594857 -0600 -+++ ./libpurple/protocols/irc/Makefile 2013-02-15 15:18:53.684590354 -0600 -@@ -1,4 +1,4 @@ --# Makefile.in generated by automake 1.11.6 from Makefile.am. -+# Makefile.in generated by automake 1.11.5 from Makefile.am. - # libpurple/protocols/irc/Makefile. Generated from Makefile.in by configure. - - # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -@@ -92,7 +92,8 @@ - am__installdirs = "$(DESTDIR)$(pkgdir)" - LTLIBRARIES = $(noinst_LTLIBRARIES) $(pkg_LTLIBRARIES) - am__DEPENDENCIES_1 = --libirc_la_DEPENDENCIES = $(am__DEPENDENCIES_1) -+libirc_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \ -+ $(am__DEPENDENCIES_1) - am__libirc_la_SOURCES_DIST = cmds.c dcc_send.c irc.c irc.h msgs.c \ - parse.c - am__objects_1 = libirc_la-cmds.lo libirc_la-dcc_send.lo \ -@@ -415,7 +416,7 @@ - #libirc_la_SOURCES = $(IRCSOURCES) - #libirc_la_CFLAGS = $(AM_CFLAGS) - pkg_LTLIBRARIES = libirc.la --libirc_la_LIBADD = $(GLIB_LIBS) -+libirc_la_LIBADD = $(GLIB_LIBS) $(SASL_LIBS) - AM_CPPFLAGS = \ - -I$(top_srcdir)/libpurple \ - -I$(top_builddir)/libpurple \ diff --git a/source/xap/pidgin/pidgin.SlackBuild b/source/xap/pidgin/pidgin.SlackBuild index cf28811be..106bfc734 100755 --- a/source/xap/pidgin/pidgin.SlackBuild +++ b/source/xap/pidgin/pidgin.SlackBuild @@ -1,6 +1,6 @@ #!/bin/sh -# Copyright 2006, 2007, 2008, 2009, 2010, 2011, 2013 Patrick J. Volkerding, Sebeka, MN, USA +# Copyright 2006, 2007, 2008, 2009, 2010, 2011, 2013, 2014, 2015, 2016 Patrick J. Volkerding, Sebeka, MN, USA # All rights reserved. # # Redistribution and use of this script, with or without modification, is @@ -24,12 +24,12 @@ PKGNAM=pidgin VERSION=${VERSION:-$(echo $PKGNAM-2.*.tar.?z* | rev | cut -f 3- -d . | cut -f 1 -d - | rev)} PIDGINENC=${PIDGINENC:-3.1} -BUILD=${BUILD:-5} +BUILD=${BUILD:-2} # Automatically determine the architecture we're building on: if [ -z "$ARCH" ]; then case "$( uname -m )" in - i?86) export ARCH=i486 ;; + i?86) export ARCH=i586 ;; arm*) export ARCH=arm ;; # Unless $ARCH is already set, use uname -m for all other archs: *) export ARCH=$( uname -m ) ;; @@ -44,8 +44,8 @@ PKG=$TMP/package-${PKGNAM} rm -rf $PKG mkdir -p $TMP $PKG -if [ "$ARCH" = "i486" ]; then - SLKCFLAGS="-O2 -march=i486 -mtune=i686" +if [ "$ARCH" = "i586" ]; then + SLKCFLAGS="-O2 -march=i586 -mtune=i686" LIBDIRSUFFIX="" ARCHQUADLET="" elif [ "$ARCH" = "s390" ]; then @@ -79,6 +79,8 @@ find . \ \( -perm 666 -o -perm 664 -o -perm 600 -o -perm 444 -o -perm 440 -o -perm 400 \) \ -exec chmod 644 {} \; +#autoreconf --force --install + CFLAGS="$SLKCFLAGS" \ CXXFLAGS="$SLKCFLAGS" \ ./configure \ @@ -95,6 +97,7 @@ CXXFLAGS="$SLKCFLAGS" \ --with-nss-libs=/usr/lib${LIBDIRSUFFIX}/ \ --with-nspr-includes="$(pkg-config --variable=includedir nspr)" \ --with-nspr-libs=/usr/lib${LIBDIRSUFFIX}/ \ + --with-system-ssl-certs=/etc/ssl/certs \ --disable-vv \ --enable-gtkspell \ --enable-cyrus-sasl \ @@ -102,12 +105,11 @@ CXXFLAGS="$SLKCFLAGS" \ --disable-meanwhile \ --disable-avahi \ --disable-nm \ + --with-gstreamer=1.0 \ --program-prefix= \ --program-suffix= \ --build=$ARCH-slackware-linux$ARCHQUADLET || exit 1 -zcat $CWD/link-libirc-to-libsasl2.patch.gz | patch -p1 --verbose || exit 1 - # Fix install location: grep -lr -- "lib/perl" . | xargs sed -i 's?lib/perl?lib'"$LIBDIRSUFFIX"'/perl?g' @@ -154,7 +156,7 @@ find $PKG -name .packlist | while read plist ; do mv -f ${plist}.new ${plist} done -### add gaim-encryption +### add pidgin-encryption ( cd $TMP rm -rf pidgin-encryption-$PIDGINENC tar xvf $CWD/pidgin-encryption-$PIDGINENC.tar.gz || exit 1 @@ -182,7 +184,7 @@ done make $NUMJOBS || make || exit 1 make install DESTDIR=$PKG || exit 1 ) || exit 1 -### end add gaim-encryption +### end add pidgin-encryption # Strip binaries: find $PKG | xargs file | grep -e "executable" -e "shared object" | grep ELF \ @@ -222,6 +224,7 @@ cp -a \ mkdir -p $PKG/install cat $CWD/slack-desc > $PKG/install/slack-desc +zcat $CWD/doinst.sh.gz > $PKG/install/doinst.sh cd $PKG /sbin/makepkg -l y -c n $TMP/${PKGNAM}-$VERSION-$ARCH-$BUILD.txz diff --git a/source/xap/rdesktop/rdesktop-1.8.0-fix-missing-ui.diff b/source/xap/rdesktop/rdesktop-1.8.0-fix-missing-ui.diff deleted file mode 100644 index efad2f335..000000000 --- a/source/xap/rdesktop/rdesktop-1.8.0-fix-missing-ui.diff +++ /dev/null @@ -1,77 +0,0 @@ -From 8aeb027877c517510ea39c26c37c6dbd46401800 Mon Sep 17 00:00:00 2001 -From: mancha <mancha1@hush.com> -Date: Sun, 20 Oct 2013 -Subject: Fix crash with -P and/or -N - -Make sure that ui is created if processing demand active PDU. - -Relevant upstream revisions: ----------------------------- -http://sourceforge.net/p/rdesktop/code/1731/ -http://sourceforge.net/p/rdesktop/code/1732/ -http://sourceforge.net/p/rdesktop/code/1741/ - ---- - proto.h | 1 + - rdesktop.c | 20 +++++++++++++------- - rdp.c | 3 +++ - 3 files changed, 17 insertions(+), 7 deletions(-) - ---- a/proto.h 2013-06-20 -+++ b/proto.h 2013-10-20 -@@ -144,6 +144,7 @@ RD_BOOL subprocess(char *const argv[], s - char *l_to_a(long N, int base); - int load_licence(unsigned char **data); - void save_licence(unsigned char *data, int length); -+void rd_create_ui(void); - RD_BOOL rd_pstcache_mkdir(void); - int rd_open_file(char *filename); - void rd_close_file(int fd); ---- a/rdesktop.c 2013-10-20 -+++ b/rdesktop.c 2013-10-20 -@@ -1132,13 +1132,7 @@ main(int argc, char *argv[]) - DEBUG(("Connection successful.\n")); - memset(password, 0, sizeof(password)); - -- /* only create a window if we dont have one intialized */ -- if (!ui_have_window()) -- { -- if (!ui_create_window()) -- return EX_OSERR; -- } -- -+ rd_create_ui(); - tcp_run_ui(True); - - g_redirect = False; -@@ -1732,6 +1726,18 @@ save_licence(unsigned char *data, int le - close(fd); - } - -+/* create rdesktop ui */ -+void -+rd_create_ui() -+{ -+ /* only create a window if we dont have one intialized */ -+ if (!ui_have_window()) -+ { -+ if (!ui_create_window()) -+ exit(EX_OSERR); -+ } -+} -+ - /* Create the bitmap cache directory */ - RD_BOOL - rd_pstcache_mkdir(void) ---- a/rdp.c 2013-06-20 -+++ b/rdp.c 2013-10-20 -@@ -1044,6 +1044,9 @@ process_demand_active(STREAM s) - uint8 type; - uint16 len_src_descriptor, len_combined_caps; - -+ /* at this point we need to ensure that we have ui created */ -+ rd_create_ui(); -+ - in_uint32_le(s, g_rdp_shareid); - in_uint16_le(s, len_src_descriptor); - in_uint16_le(s, len_combined_caps); diff --git a/source/xap/rdesktop/rdesktop.SlackBuild b/source/xap/rdesktop/rdesktop.SlackBuild index e1687e782..068573ddf 100755 --- a/source/xap/rdesktop/rdesktop.SlackBuild +++ b/source/xap/rdesktop/rdesktop.SlackBuild @@ -1,6 +1,6 @@ #!/bin/sh -# Copyright 2006, 2008, 2009, 2011, 2012, 2013 Patrick J. Volkerding, Sebeka, MN, USA +# Copyright 2006, 2008, 2009, 2011, 2012, 2013, 2014 Patrick J. Volkerding, Sebeka, MN, USA # All rights reserved. # # Redistribution and use of this script, with or without modification, is @@ -23,7 +23,7 @@ PKGNAM=rdesktop VERSION=${VERSION:-$(echo $PKGNAM-*.tar.?z* | rev | cut -f 3- -d . | cut -f 1 -d - | rev)} -BUILD=${BUILD:-2} +BUILD=${BUILD:-1} # Automatically determine the architecture we're building on: if [ -z "$ARCH" ]; then @@ -59,8 +59,6 @@ rm -rf ${PKGNAM}-${VERSION} tar xvf $CWD/${PKGNAM}-$VERSION.tar.?z* || exit 1 cd ${PKGNAM}-$VERSION || exit 1 -zcat $CWD/rdesktop-1.8.0-fix-missing-ui.diff.gz | patch -p1 --verbose || exit 1 - # Make sure ownerships and permissions are sane: chown -R root:root . find . \ diff --git a/source/xap/rxvt/rxvt.SlackBuild b/source/xap/rxvt/rxvt.SlackBuild index defc62b59..6f72fd69b 100755 --- a/source/xap/rxvt/rxvt.SlackBuild +++ b/source/xap/rxvt/rxvt.SlackBuild @@ -29,7 +29,7 @@ BUILD=${BUILD:-4} if [ -z "$ARCH" ]; then case "$(uname -m)" in i?86) ARCH=i486 ;; - arm*) readelf /usr/bin/file -A | egrep -q "Tag_CPU.*[4,5]" && ARCH=arm || ARCH=armv7lh ;; + arm*) readelf /usr/bin/file -A | egrep -q "Tag_CPU.*[4,5]" && ARCH=arm || ARCH=armv7hl ;; # Unless $ARCH is already set, use uname -m for all other archs: *) ARCH=$(uname -m) ;; esac diff --git a/source/xap/sane/sane.SlackBuild b/source/xap/sane/sane.SlackBuild index 39b0dfa25..7a43a1a5c 100755 --- a/source/xap/sane/sane.SlackBuild +++ b/source/xap/sane/sane.SlackBuild @@ -20,15 +20,15 @@ # OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -VERSION=1.0.24 -BACKVER=1.0.24 +VERSION=1.0.25 +BACKVER=1.0.25 FRONTVER=1.0.14 -BUILD=${BUILD:-1} +BUILD=${BUILD:-2} # Automatically determine the architecture we're building on: if [ -z "$ARCH" ]; then case "$( uname -m )" in - i?86) export ARCH=i486 ;; + i?86) export ARCH=i586 ;; arm*) export ARCH=arm ;; # Unless $ARCH is already set, use uname -m for all other archs: *) export ARCH=$( uname -m ) ;; @@ -37,8 +37,8 @@ fi NUMJOBS=${NUMJOBS:-" -j7 "} -if [ "$ARCH" = "i486" ]; then - SLKCFLAGS="-O2 -march=i486 -mtune=i686" +if [ "$ARCH" = "i586" ]; then + SLKCFLAGS="-O2 -march=i586 -mtune=i686" LIBDIRSUFFIX="" elif [ "$ARCH" = "s390" ]; then SLKCFLAGS="-O2" diff --git a/source/xap/seamonkey/gold/gold b/source/xap/seamonkey/gold/gold new file mode 100755 index 000000000..8c86d3b06 --- /dev/null +++ b/source/xap/seamonkey/gold/gold @@ -0,0 +1,2 @@ +#!/bin/bash +/usr/bin/ld.gold "$@" diff --git a/source/xap/seamonkey/gold/ld b/source/xap/seamonkey/gold/ld new file mode 120000 index 000000000..78a06a2a1 --- /dev/null +++ b/source/xap/seamonkey/gold/ld @@ -0,0 +1 @@ +gold
\ No newline at end of file diff --git a/source/xap/seamonkey/seamonkey.SlackBuild b/source/xap/seamonkey/seamonkey.SlackBuild index fa0921e42..454122020 100755 --- a/source/xap/seamonkey/seamonkey.SlackBuild +++ b/source/xap/seamonkey/seamonkey.SlackBuild @@ -1,6 +1,6 @@ #!/bin/sh -# Copyright 2008, 2009, 2010, 2011, 2012, 2013 Patrick J. Volkerding, Sebeka, MN, USA +# Copyright 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016 Patrick J. Volkerding, Sebeka, MN, USA # All rights reserved. # # Redistribution and use of this script, with or without modification, is @@ -23,29 +23,46 @@ TARBALLVER=${VERSION:-$(basename $(ls seamonkey-*.tar.* | cut -d - -f 2 | rev | cut -f 3- -d . | rev) .source)} # Strip the end from beta versions: VERSION=$(echo $TARBALLVER | cut -f 1 -d b) -COMM=${COMM:-release} BUILD=${BUILD:-1} # Automatically determine the architecture we're building on: if [ -z "$ARCH" ]; then case "$( uname -m )" in - i?86) export ARCH=i486 ;; + i?86) export ARCH=i586 ;; arm*) export ARCH=arm ;; # Unless $ARCH is already set, use uname -m for all other archs: *) export ARCH=$( uname -m ) ;; esac fi -if [ "$ARCH" = "x86_64" ]; then +if [ "$ARCH" = "i586" ]; then + LIBDIRSUFFIX="" + OPTIMIZE_FLAG="-O2" + # On IA32, use gold since GNU ld runs out of memory linking libxul.so: + PATH="$(pwd)/gold:$PATH" + export CC="gcc -B$(pwd)/gold" + export CXX="g++ -B$(pwd)/gold" +elif [ "$ARCH" = "x86_64" ]; then LIBDIRSUFFIX="64" OPTIMIZE_FLAG="-O2" else LIBDIRSUFFIX="" - OPTIMIZE_FLAG="-Os" + OPTIMIZE_FLAG="-O2" fi NUMJOBS=${NUMJOBS:-" -j7 "} +# Workaround to prevent unidentified crashes when compiling with recent gcc. +# Presumably a newer version will fix this (as it did with Firefox), so only +# enable the workaround for known crashing versions. +# Test page to check for crash: http://onet.pl +if [ $VERSION = 2.39 -o \ + $VERSION = 2.40 ]; then + OPTIMIZE_FLAG="$(echo "$OPTIMIZE_FLAG" | sed 's/O2/Os/g')" + echo "Detected Seamonkey $VERSION... enabling crash workaround O2 -> Os." + sleep 1 +fi + CWD=$(pwd) TMP=${TMP:-/tmp} PKG=$TMP/package-seamonkey @@ -53,9 +70,9 @@ rm -rf $PKG mkdir -p $TMP $PKG/usr cd $TMP -rm -rf comm-$COMM +rm -rf seamonkey-${TARBALLVER} tar xvf $CWD/seamonkey-${TARBALLVER}.source.tar.?z* || exit 1 -cd comm-$COMM || exit 1 +cd seamonkey-${TARBALLVER} || exit 1 # Make sure the perms/ownerships are sane: chown -R root:root . @@ -65,44 +82,10 @@ find . \ \( -perm 666 -o -perm 664 -o -perm 600 -o -perm 444 -o -perm 440 -o -perm 400 \) \ -exec chmod 644 {} \; -# Fix a long standing bug that's prevented staying current on GTK+. -# Thanks to the BLFS folks. :-) -cat >> mozilla/layout/build/Makefile.in << EOF - -ifdef MOZ_ENABLE_CANVAS -EXTRA_DSO_LDOPTS += \$(XLDFLAGS) -lX11 -lXrender -endif - -EOF - -if gcc --version | grep -q "gcc (GCC) 4.7.0" ; then - # Enable compiling with gcc-4.7.0: - sed -i '/fcntl.h/a#include <unistd.h>' \ - mozilla/ipc/chromium/src/base/{file_util_linux,message_pump_libevent,process_util_posix}.cc && - sed -i '/sys\/time\.h/a#include <unistd.h>' mozilla/ipc/chromium/src/base/time_posix.cc && - sed -i 's#\"PRIxPTR#\" PRIxPTR#g' mozilla/layout/base/tests/TestPoisonArea.cpp && - sed -i 's#\"CRLF#\" CRLF#g' mailnews/base/search/src/nsMsgSearchAdapter.cpp && - sed -i 's#\"CRLF#\" CRLF#g' mailnews/base/src/nsMsgFolderCompactor.cpp && - sed -i 's#\"CRLF#\" CRLF#g' mailnews/compose/src/nsSmtpProtocol.cpp && - sed -i 's#\"CRLF#\" CRLF#g' mailnews/imap/src/nsImapMailFolder.cpp && - sed -i 's#\"CRLF#\" CRLF#g' mailnews/imap/src/nsImapProtocol.cpp && - sed -i 's#\"CRLF#\" CRLF#g' mailnews/imap/src/nsImapServerResponseParser.cpp && - sed -i 's#\"CRLF#\" CRLF#g' mailnews/local/src/nsPop3Protocol.cpp && - sed -i 's#\"CRLF#\" CRLF#g' mailnews/mime/src/mimedrft.cpp && - sed -i 's#\"MSG_LINEBREAK#\" MSG_LINEBREAK#g' mailnews/mime/src/mimemult.cpp && - sed -i 's#\"MSG_LINEBREAK#\" MSG_LINEBREAK#g' mailnews/base/src/nsMsgFolderCompactor.cpp && - sed -i 's# ""##' mozilla/browser/base/Makefile.in -fi - chown -R root:root . -# Mozilla devs enforce using an objdir for building -# and launching configure with the absolute path -# https://developer.mozilla.org/en/Configuring_Build_Options#Building_with_an_objdir -mkdir obj -cd obj -BUILD_OFFICIAL=1 MOZILLA_OFFICIAL=1 \ -$TMP/comm-$COMM/configure \ +# Our building options, in a configure-like display ;) +OPTIONS="\ --prefix=/usr \ --libdir=/usr/lib${LIBDIRSUFFIX} \ --enable-optimize=$OPTIMIZE_FLAG \ @@ -116,6 +99,7 @@ $TMP/comm-$COMM/configure \ --disable-crashreporter \ --enable-svg \ --enable-canvas \ + --enable-gstreamer=1.0 \ --disable-short-wchar \ --enable-nspr-autoconf \ --enable-extensions=default,irc \ @@ -129,12 +113,35 @@ $TMP/comm-$COMM/configure \ --enable-xft \ --host=$ARCH-slackware-linux \ --target=$ARCH-slackware-linux \ - --build=$ARCH-slackware-linux + --build=$ARCH-slackware-linux" # --enable-system-cairo \ # --with-system-png -make $NUMJOBS || exit 1 -DESTDIR=$PKG make install || exit 1 + +export BUILD_OFFICIAL=1 +export MOZILLA_OFFICIAL=1 +export MOZ_MAKE_FLAGS="$NUMJOBS" + +# Clear some variables that could break the build +unset DBUS_SESSION_BUS_ADDRESS ORBIT_SOCKETDIR SESSION_MANAGER \ + XDG_SESSION_COOKIE XAUTHORITY MAKEFLAGS + +# Assemble our .mozconfig: +echo > .mozconfig + +# Mozilla devs enforce using an objdir for building +# https://developer.mozilla.org/en/Configuring_Build_Options#Building_with_an_objdir +mkdir obj +echo "mk_add_options MOZ_OBJDIR=$(pwd)/obj" >> .mozconfig +# This directory is also needed or the build will fail: +mkdir -p mozilla/obj + +# Write in it the options above +for option in $OPTIONS; do echo "ac_add_options $option" >> .mozconfig; done + +echo "ac_add_options --disable-tests" >> .mozconfig +make -f client.mk build || exit 1 +make -f client.mk install DESTDIR=$PKG || exit 1 # Install nspr/nss headers. for includedir in nspr nspr/obsolete nspr/private ; do @@ -157,9 +164,6 @@ cp -aL mozilla/dist/sdk/include/* $PKG/usr/include/seamonkey-${VERSION} ln -sf . xpcom ) -# Exit obj directory: -cd .. - # We don't need this stuff in the package: rm -rf $PKG/usr/lib${LIBDIRSUFFIX}/seamonkey-devel-$VERSION diff --git a/source/xap/seyon/seyon.SlackBuild b/source/xap/seyon/seyon.SlackBuild index f2435b193..b040a3601 100755 --- a/source/xap/seyon/seyon.SlackBuild +++ b/source/xap/seyon/seyon.SlackBuild @@ -29,7 +29,7 @@ BUILD=${BUILD:-3} if [ -z "$ARCH" ]; then case "$(uname -m)" in i?86) ARCH=i486 ;; - arm*) readelf /usr/bin/file -A | egrep -q "Tag_CPU.*[4,5]" && ARCH=arm || ARCH=armv7lh ;; + arm*) readelf /usr/bin/file -A | egrep -q "Tag_CPU.*[4,5]" && ARCH=arm || ARCH=armv7hl ;; # Unless $ARCH is already set, use uname -m for all other archs: *) ARCH=$(uname -m) ;; esac diff --git a/source/xap/windowmaker/windowmaker.SlackBuild b/source/xap/windowmaker/windowmaker.SlackBuild index e1e8b2bb8..4a541b456 100755 --- a/source/xap/windowmaker/windowmaker.SlackBuild +++ b/source/xap/windowmaker/windowmaker.SlackBuild @@ -1,6 +1,6 @@ #!/bin/sh -# Copyright 2008, 2009, 2010 Patrick J. Volkerding, Sebeka, MN, USA +# Copyright 2008, 2009, 2010, 2015 Patrick J. Volkerding, Sebeka, MN, USA # All rights reserved. # # Redistribution and use of this script, with or without modification, is @@ -21,22 +21,22 @@ # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. VERSION=${VERSION:-$(echo WindowMaker-0*.tar.?z* | rev | cut -f 3- -d . | cut -f 1 -d - | rev)} -BUILD=${BUILD:-1} +BUILD=${BUILD:-2} NUMJOBS=${NUMJOBS:-" -j7 "} # Automatically determine the architecture we're building on: if [ -z "$ARCH" ]; then case "$( uname -m )" in - i?86) export ARCH=i486 ;; + i?86) export ARCH=i586 ;; arm*) export ARCH=arm ;; # Unless $ARCH is already set, use uname -m for all other archs: *) export ARCH=$( uname -m ) ;; esac fi -if [ "$ARCH" = "i486" ]; then - SLKCFLAGS="-O2 -march=i486 -mtune=i686" +if [ "$ARCH" = "i586" ]; then + SLKCFLAGS="-O2 -march=i586 -mtune=i686" LIBDIRSUFFIX="" elif [ "$ARCH" = "s390" ]; then SLKCFLAGS="-O2" @@ -68,13 +68,16 @@ find . \ \( -perm 666 -o -perm 664 -o -perm 600 -o -perm 444 -o -perm 440 -o -perm 400 \) \ -exec chmod 644 {} \; +# Fix a segfault in wmmenugen.c: +zcat $CWD/wmmenugen.c.diff.gz | patch -p1 --verbose || exit 1 + # This should be non-interactive where possible. zcat $CWD/wmaker.inst.diff.gz | patch -p1 --verbose || exit 1 # Get rid of OpenSUSE menu: zcat $CWD/WindowMaker.noopensusemenu.diff.gz | patch -p1 --verbose || exit 1 -LINGUAS="$(cd po ; /bin/ls *.po | sed 's/.po//g')" \ +LINGUAS="$(ls po/*.po | sed 's:po/\(.*\)\.po$:\1:' | tr '\012' '\040')" \ GNUSTEP_LOCAL_ROOT=/usr/lib${LIBDIRSUFFIX}/GNUstep \ CFLAGS="$SLKCFLAGS" \ NLSDIR=/usr/share/locale \ @@ -85,13 +88,16 @@ NLSDIR=/usr/share/locale \ --sysconfdir=/etc/X11 \ --docdir=/usr/doc/WindowMaker-$VERSION \ --enable-usermenu \ - --enable-xrandr \ + --enable-randr \ --enable-xinerama \ --disable-static \ - --build=$ARCH-slackware-linux + --disable-magick \ + --build=$ARCH-slackware-linux || exit 1 + +# Disabling magick per this LQ thread: +# http://www.linuxquestions.org/questions/showthread.php?p=5284319#post5284319 -# NLS bugs like -i -make $NUMJOBS || make -i || exit 1 +make $NUMJOBS || make || exit 1 # Change /usr/local/GNUstep to /usr/lib/GNUstep in the WMRootMenu: sed -i -e "s#/usr/local/GNUstep/Applications/WPrefs.app/#/usr/lib${LIBDIRSUFFIX}/GNUstep/Applications/WPrefs.app/#" \ @@ -104,8 +110,8 @@ sed -i -e "s#/usr/local/GNUstep/Applications/WPrefs.app/#/usr/lib${LIBDIRSUFFIX} sed -i -e "s#WMCreatePLString(\"WPrefs\")#WMCreatePLString(\"/usr/lib${LIBDIRSUFFIX}/GNUstep/Applications/WPrefs.app/WPrefs\")#" \ -e "s#/usr/local/share#/usr/share/#" util/wmgenmenu.c +make install DESTDIR=$PKG || exit 1 -make -i install DESTDIR=$PKG mkdir -p $PKG/usr/doc/WindowMaker-$VERSION cp -a \ AUTHORS BUGFORM BUGS COPYING* FAQ* INSTALL* MIRRORS NEWS README* TODO \ @@ -128,7 +134,7 @@ CFLAGS="$SLKCFLAGS" \ --prefix=/usr \ --libdir=/usr/lib${LIBDIRSUFFIX} \ --with-iconsdir=/usr/share/pixmaps \ - --build=$ARCH-slackware-linux + --build=$ARCH-slackware-linux || exit 1 make $NUMJOBS || make || exit 1 make install DESTDIR=$PKG || exit 1 @@ -140,20 +146,12 @@ mkdir -p $PKG/etc/X11/xinit zcat $CWD/xinitrc.wmaker.gz > $PKG/etc/X11/xinit/xinitrc.wmaker chmod 0755 $PKG/etc/X11/xinit/xinitrc.wmaker -# Compress and link manpages, if any: -if [ -d $PKG/usr/man ]; then - ( cd $PKG/usr/man - for manpagedir in $(find . -type d -name "man*") ; do - ( cd $manpagedir - for eachpage in $( find . -type l -maxdepth 1) ; do - ln -s $( readlink $eachpage ).gz $eachpage.gz - rm $eachpage - done - gzip -9 *.? - ) - done - ) -fi +# Compress manual pages: +find $PKG/usr/man -type f -exec gzip -9 {} \; +for i in $( find $PKG/usr/man -type l ) ; do + ln -s $( readlink $i ).gz $i.gz + rm $i +done mkdir -p $PKG/install cat $CWD/slack-desc > $PKG/install/slack-desc diff --git a/source/xap/windowmaker/wmmenugen.c.diff b/source/xap/windowmaker/wmmenugen.c.diff new file mode 100644 index 000000000..3c605c405 --- /dev/null +++ b/source/xap/windowmaker/wmmenugen.c.diff @@ -0,0 +1,12 @@ +diff -Nur WindowMaker-0.95.7.orig/util/wmmenugen.c WindowMaker-0.95.7/util/wmmenugen.c +--- WindowMaker-0.95.7.orig/util/wmmenugen.c 2015-08-11 13:41:14.000000000 -0500 ++++ WindowMaker-0.95.7/util/wmmenugen.c 2015-11-22 18:23:32.773922263 -0600 +@@ -106,7 +106,7 @@ + parse_locale(NULL, &env_lang, &env_ctry, &env_enc, &env_mod); + terminal = find_terminal_emulator(); + +- for (i = 1; i <= argc; i++) ++ for (i = 1; i < argc; i++) + { + if (strncmp(argv[i], "-parser", 7) == 0 && + (argv[i][7] == '=' || diff --git a/source/xap/x3270/x3270.SlackBuild b/source/xap/x3270/x3270.SlackBuild index fd2f53fa7..c2937379f 100755 --- a/source/xap/x3270/x3270.SlackBuild +++ b/source/xap/x3270/x3270.SlackBuild @@ -30,7 +30,7 @@ BUILD=${BUILD:-2} if [ -z "$ARCH" ]; then case "$(uname -m)" in i?86) ARCH=i486 ;; - arm*) readelf /usr/bin/file -A | egrep -q "Tag_CPU.*[4,5]" && ARCH=arm || ARCH=armv7lh ;; + arm*) readelf /usr/bin/file -A | egrep -q "Tag_CPU.*[4,5]" && ARCH=arm || ARCH=armv7hl ;; # Unless $ARCH is already set, use uname -m for all other archs: *) ARCH=$(uname -m) ;; esac diff --git a/source/xap/xaos/xaos.SlackBuild b/source/xap/xaos/xaos.SlackBuild index c562b6810..0b9789495 100755 --- a/source/xap/xaos/xaos.SlackBuild +++ b/source/xap/xaos/xaos.SlackBuild @@ -1,7 +1,7 @@ #!/bin/sh # Copyright 2010 B. Watson (yalhcru@gmail.com) -# Copyright 2010 Patrick J. Volkerding, Sebeka, Minnesota, USA +# Copyright 2010, 2015 Patrick J. Volkerding, Sebeka, Minnesota, USA # All rights reserved. # # Redistribution and use of this script, with or without modification, is @@ -97,6 +97,9 @@ cd $TMP rm -rf $PKGNAM-$VERSION tar xvf $CWD/$PKGNAM-$VERSION.tar.?z* || exit 1 cd $PKGNAM-$VERSION || exit 1 + +zcat $CWD/xaos.x86.registers.diff.gz | patch -p1 --verbose || exit 1 + chown -R root:root . chmod -R a-s,u+w,go+r-w . diff --git a/source/xap/xaos/xaos.x86.registers.diff b/source/xap/xaos/xaos.x86.registers.diff new file mode 100644 index 000000000..12d11aba6 --- /dev/null +++ b/source/xap/xaos/xaos.x86.registers.diff @@ -0,0 +1,22 @@ +--- ./src/engine/zoom.c.orig 2013-11-01 02:54:21.000000000 -0500 ++++ ./src/engine/zoom.c 2015-04-05 00:38:10.332028884 -0500 +@@ -933,6 +933,7 @@ + } + + #ifndef USE_i386ASM ++REGISTERS(0) + static /*INLINE */ void + moveoldpoints(void /*@unused@ */ *data1, + struct taskinfo /*@unused@ */ *task, +--- ./src/engine/zoomd.c.orig 2013-11-01 02:54:21.000000000 -0500 ++++ ./src/engine/zoomd.c 2015-04-05 00:38:55.436032139 -0500 +@@ -280,7 +280,8 @@ + #endif + #undef bpp1 + +-static INLINE void fillline(int line) ++REGISTERS(0) ++static void fillline(int line) + { + register unsigned char *RESTRICT vbuff = cimage.currlines[line]; + const struct filltable *RESTRICT table = (struct filltable *) tmpdata; diff --git a/source/xap/xchat/slack-desc b/source/xap/xchat/slack-desc deleted file mode 100644 index 70c75e67c..000000000 --- a/source/xap/xchat/slack-desc +++ /dev/null @@ -1,19 +0,0 @@ -# HOW TO EDIT THIS FILE: -# The "handy ruler" below makes it easier to edit a package description. Line -# up the first '|' above the ':' following the base package name, and the '|' -# on the right side marks the last column you can put a character in. You must -# make exactly 11 lines for the formatting to be correct. It's also -# customary to leave one space after the ':'. - - |-----handy-ruler------------------------------------------------------| -xchat: xchat (GTK+-based IRC client) -xchat: -xchat: X-Chat is a GTK+-based IRC (Internet Relay Chat) client. -xchat: -xchat: -xchat: -xchat: -xchat: -xchat: -xchat: -xchat: diff --git a/source/xap/xchat/xchat.SlackBuild b/source/xap/xchat/xchat.SlackBuild deleted file mode 100755 index bef11065a..000000000 --- a/source/xap/xchat/xchat.SlackBuild +++ /dev/null @@ -1,129 +0,0 @@ -#!/bin/sh - -# Copyright 2008, 2009, 2010, 2011, 2013 Patrick J. Volkerding, Sebeka, MN, USA -# All rights reserved. -# -# Redistribution and use of this script, with or without modification, is -# permitted provided that the following conditions are met: -# -# 1. Redistributions of this script must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# -# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED -# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO -# EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; -# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, -# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR -# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF -# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -VERSION=2.8.8 -BUILD=${BUILD:-8} - -# Automatically determine the architecture we're building on: -if [ -z "$ARCH" ]; then - case "$( uname -m )" in - i?86) export ARCH=i486 ;; - arm*) export ARCH=arm ;; - # Unless $ARCH is already set, use uname -m for all other archs: - *) export ARCH=$( uname -m ) ;; - esac -fi - -NUMJOBS=${NUMJOBS:-" -j7 "} - -if [ "$ARCH" = "i486" ]; then - SLKCFLAGS="-O2 -march=i486 -mtune=i686" - LIBDIRSUFFIX="" -elif [ "$ARCH" = "s390" ]; then - SLKCFLAGS="-O2" - LIBDIRSUFFIX="" -elif [ "$ARCH" = "x86_64" ]; then - SLKCFLAGS="-O2 -fPIC" - LIBDIRSUFFIX="64" -else - SLKCFLAGS="-O2" - LIBDIRSUFFIX="" -fi - -CWD=$(pwd) -TMP=${TMP:-/tmp} -PKG=$TMP/package-xchat -rm -rf $PKG -mkdir -p $TMP $PKG/usr - -cd $TMP -rm -rf xchat-$VERSION -tar xvf $CWD/xchat-$VERSION.tar.xz || exit 1 -cd xchat-$VERSION || exit 1 -if [ -d $CWD/patches ]; then - for file in $CWD/patches/*.diff.gz ; do - zcat $file | patch -p1 --verbose || exit 1 - done -fi - -zcat $CWD/xchat.glib.g.diff.gz | patch -p1 --verbose || exit 1 - -chown -R root:root . -find . \ - \( -perm 777 -o -perm 775 -o -perm 711 -o -perm 555 -o -perm 511 \) \ - -exec chmod 755 {} \; -o \ - \( -perm 666 -o -perm 664 -o -perm 600 -o -perm 444 -o -perm 440 -o -perm 400 \) \ - -exec chmod 644 {} \; - -CFLAGS="$SLKCFLAGS" \ -./configure \ - --prefix=/usr \ - --libdir=/usr/lib${LIBDIRSUFFIX} \ - --mandir=/usr/man \ - --localstatedir=/var/lib \ - --enable-tcl=/usr/lib${LIBDIRSUFFIX} \ - --enable-ipv6 \ - --build=$ARCH-slackware-linux - -make $NUMJOBS || make || exit 1 -make install DESTDIR=$PKG || exit 1 - -find $PKG | xargs file | grep -e "executable" -e "shared object" \ - | grep ELF | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null - -mkdir -p $PKG/usr/doc/xchat-$VERSION -cp -a \ - AUTHORS COPYING HACKING INSTALL README \ - $PKG/usr/doc/xchat-$VERSION - -# In case they ever add this stuff: - -# Compress and if needed symlink the man pages: -if [ -d $PKG/usr/man ]; then - ( cd $PKG/usr/man - for manpagedir in $(find . -type d -name "man*") ; do - ( cd $manpagedir - for eachpage in $( find . -type l -maxdepth 1) ; do - ln -s $( readlink $eachpage ).gz $eachpage.gz - rm $eachpage - done - gzip -9 *.? - ) - done - ) -fi - -# Compress info pages and purge "dir" file from the package: -if [ -d $PKG/usr/info ]; then - ( cd $PKG/usr/info - rm -f dir - gzip -9 * - ) -fi - -mkdir -p $PKG/install -cat $CWD/slack-desc > $PKG/install/slack-desc - -cd $TMP/package-xchat -/sbin/makepkg -l y -c n $TMP/xchat-$VERSION-$ARCH-$BUILD.txz - diff --git a/source/xap/xchat/xchat.glib.g.diff b/source/xap/xchat/xchat.glib.g.diff deleted file mode 100644 index 143d3448d..000000000 --- a/source/xap/xchat/xchat.glib.g.diff +++ /dev/null @@ -1,47 +0,0 @@ ---- ./src/common/util.c.orig 2009-08-16 04:40:16.000000000 -0500 -+++ ./src/common/util.c 2013-05-13 22:18:22.364370023 -0500 -@@ -39,7 +39,7 @@ - #include <errno.h> - #include "xchat.h" - #include "xchatc.h" --#include <glib/gmarkup.h> -+#include <glib.h> - #include <ctype.h> - #include "util.h" - #include "../../config.h" ---- ./src/common/text.c.orig 2010-05-29 21:14:41.000000000 -0500 -+++ ./src/common/text.c 2013-05-13 22:17:58.028371777 -0500 -@@ -28,7 +28,7 @@ - #include <sys/mman.h> - - #include "xchat.h" --#include <glib/ghash.h> -+#include <glib.h> - #include "cfgfiles.h" - #include "chanopt.h" - #include "plugin.h" ---- ./src/common/xchat.h.orig 2009-08-16 04:40:16.000000000 -0500 -+++ ./src/common/xchat.h 2013-05-13 22:16:41.332377305 -0500 -@@ -1,10 +1,6 @@ - #include "../../config.h" - --#include <glib/gslist.h> --#include <glib/glist.h> --#include <glib/gutils.h> --#include <glib/giochannel.h> --#include <glib/gstrfuncs.h> -+#include <glib.h> - #include <time.h> /* need time_t */ - - #ifndef XCHAT_H ---- ./src/common/servlist.c.orig 2010-05-16 02:24:26.000000000 -0500 -+++ ./src/common/servlist.c 2013-05-13 22:17:29.900373805 -0500 -@@ -24,7 +24,7 @@ - #include <unistd.h> - - #include "xchat.h" --#include <glib/ghash.h> -+#include <glib.h> - - #include "cfgfiles.h" - #include "fe.h" diff --git a/source/xap/xfractint/xfractint.SlackBuild b/source/xap/xfractint/xfractint.SlackBuild index e6b8bb4d3..a10db9cf4 100755 --- a/source/xap/xfractint/xfractint.SlackBuild +++ b/source/xap/xfractint/xfractint.SlackBuild @@ -22,14 +22,14 @@ PKGNAM=xfractint -VERSION=${VERSION:-20.04p11} +VERSION=${VERSION:-20.04p13} BUILD=${BUILD:-1} # Automatically determine the architecture we're building on: if [ -z "$ARCH" ]; then case "$(uname -m)" in i?86) ARCH=i486 ;; - arm*) readelf /usr/bin/file -A | egrep -q "Tag_CPU.*[4,5]" && ARCH=arm || ARCH=armv7lh ;; + arm*) readelf /usr/bin/file -A | egrep -q "Tag_CPU.*[4,5]" && ARCH=arm || ARCH=armv7hl ;; # Unless $ARCH is already set, use uname -m for all other archs: *) ARCH=$(uname -m) ;; esac diff --git a/source/xap/xine-lib/xine-lib.SlackBuild b/source/xap/xine-lib/xine-lib.SlackBuild index 510b83513..bc3e5eb7d 100755 --- a/source/xap/xine-lib/xine-lib.SlackBuild +++ b/source/xap/xine-lib/xine-lib.SlackBuild @@ -1,6 +1,8 @@ #!/bin/sh # Copyright 2008, 2009, 2012 Patrick J. Volkerding, Sebeka, MN, USA +# Copyright 2011, 2012 Eric Hameleers, Eindhoven, NL +# Copyright 2015 Heinz Wiesinger, Amsterdam, NL # All rights reserved. # # Redistribution and use of this script, with or without modification, is @@ -22,52 +24,103 @@ # Version on the tarball -VERSION=1.1.21 +VERSION=1.2.6 # Version used in the source directory to cd into -DIRVER=1.1.21 +DIRVER=1.2.6 # Version used for the Slackware package -PKGVER=1.1.21 +PKGVER=1.2.6 -BUILD=${BUILD:-2} +# Version used for statically linked ffmpeg +FFMPEG_VERSION=${FFMPEG_VERSION:-$(echo ../MPlayer/ffmpeg-*.tar.xz | rev | cut -f 3- -d . | cut -f 1 -d- | rev)} + +BUILD=${BUILD:-8} # Automatically determine the architecture we're building on: if [ -z "$ARCH" ]; then case "$( uname -m )" in - i?86) export ARCH=i686 ;; + i?86) export ARCH=i586 ;; arm*) export ARCH=arm ;; # Unless $ARCH is already set, use uname -m for all other archs: *) export ARCH=$( uname -m ) ;; esac fi -# I would use "-march=i486 -mtune=i686" here as usual, but with XINE it's all or nothing. -# I'd rather have it work well for the i686/Athlon crowd than suck for everyone. TARGET=${TARGET:-$ARCH-pc-linux-gnu} NUMJOBS=${NUMJOBS:-" -j7 "} if [ "$ARCH" = "x86_64" ]; then LIBDIRSUFFIX="64" + FFARCHOPTS="--arch=x86_64 --enable-pic" +elif [ "$ARCH" = "i586" ]; then + LIBDIRSUFFIX="" + # 32bit x86 fails without this... let me know if you have a fix + FFARCHOPTS="--disable-asm" else LIBDIRSUFFIX="" + FFARCHOPTS="" fi CWD=$(pwd) TMP=${TMP:-/tmp} PKG=$TMP/package-xine-lib -rm -rf $PKG -mkdir -p $TMP $PKG/usr +FFMPEG_PKG=$TMP/package-ffmpeg +rm -rf $PKG $FFMPEG_PKG +mkdir -p $TMP $PKG/usr $FFMPEG_PKG cd $TMP +rm -rf ffmpeg* +tar xvf $CWD/../MPlayer/ffmpeg-$FFMPEG_VERSION.tar.xz || exit 1 +cd ffmpeg* || exit 1 + + chown -R root:root . + find . \ + \( -perm 777 -o -perm 775 -o -perm 711 -o -perm 555 -o -perm 511 \) \ + -exec chmod 755 {} \; -o \ + \( -perm 666 -o -perm 664 -o -perm 600 -o -perm 444 -o -perm 440 -o -perm 400 \) \ + -exec chmod 644 {} \; + + echo Building static ffmpeg libs ... + + FFMPEGDIR=/tmp/ff-$(mcookie) + + CFLAGS="$SLKCFLAGS -fvisibility=hidden -I/usr/include/openmj2-2.1" \ + CXXFLAGS="$SLKCFLAGS -fvisibility=hidden -I/usr/include/openmj2-2.1" \ + ./configure \ + --prefix=$FFMPEGDIR/usr \ + --libdir=$FFMPEGDIR/usr/lib${LIBDIRSUFFIX} \ + --shlibdir=$FFMPEGDIR/usr/lib${LIBDIRSUFFIX} \ + --enable-gpl \ + --enable-version3 \ + --enable-libtheora \ + --enable-postproc \ + --disable-doc \ + --disable-avfilter \ + --disable-avdevice \ + --disable-swresample \ + --disable-ffserver \ + --disable-ffplay \ + --disable-ffmpeg \ + --disable-ffprobe \ + --enable-pthreads \ + --disable-debug \ + --disable-shared \ + --enable-static \ + --enable-hardcoded-tables \ + --enable-memalign-hack \ + --enable-bzlib \ + --enable-zlib \ + --enable-libopenjpeg \ + ${FFARCHOPTS} + + make $NUMJOBS V=1 || exit 1 + make install # Note: no DESTDIR !! +cd - + rm -rf xine-lib-$VERSION tar xvf $CWD/xine-lib-$VERSION.tar.xz || exit 1 cd xine-lib-$DIRVER || exit 1 -zcat $CWD/xine-lib.XvMClib.h.diff.gz | patch -p1 --verbose || exit 1 - -# Fix for zlib-1.2.6 (or higher): -sed -i 's#gzgetc(#gzgetc_(#' src/xine-engine/osd.c - chown -R root:root . find . \ \( -perm 777 -o -perm 775 -o -perm 711 -o -perm 555 -o -perm 511 \) \ @@ -75,6 +128,11 @@ find . \ \( -perm 666 -o -perm 664 -o -perm 600 -o -perm 444 -o -perm 440 -o -perm 400 \) \ -exec chmod 644 {} \; +export PKG_CONFIG_PATH="${FFMPEGDIR}/usr/lib${LIBDIRSUFFIX}/pkgconfig" +export CFLAGS="-I${FFMPEGDIR}/usr/include $SLKCFLAGS" +export CXXFLAGS="-I${FFMPEGDIR}/usr/include $SLKCFLAGS" +export LDFLAGS="-L${FFMPEGDIR}/usr/lib${LIBDIRSUFFIX} $SLKLDFLAGS" + XINE_BUILD=$TARGET \ ./configure \ --prefix=/usr \ @@ -82,13 +140,18 @@ XINE_BUILD=$TARGET \ --docdir=/usr/doc/xine-lib-$VERSION \ --mandir=/usr/man \ --with-w32-path=/usr/lib${LIBDIRSUFFIX}/codecs \ - --with-arts \ + --with-wavpack \ --disable-nosefart \ - --without-speex + --disable-vcd \ + --without-speex \ + --with-external-dvdnav make $NUMJOBS || make || exit 1 make install DESTDIR=$PKG || exit 1 +# Remove .la files: +rm -f $PKG//usr/lib${LIBDIRSUFFIX}/*.la + mkdir -p $PKG/usr/lib${LIBDIRSUFFIX}/codecs find $PKG | xargs file | grep -e "executable" -e "shared object" \ diff --git a/source/xap/xine-lib/xine-lib.XvMClib.h.diff b/source/xap/xine-lib/xine-lib.XvMClib.h.diff deleted file mode 100644 index 663e7a769..000000000 --- a/source/xap/xine-lib/xine-lib.XvMClib.h.diff +++ /dev/null @@ -1,22 +0,0 @@ -diff -u -r --new-file xine-lib-1.1.19.orig/src/video_out/video_out_xxmc.c xine-lib-1.1.19/src/video_out/video_out_xxmc.c ---- xine-lib-1.1.19.orig/src/video_out/video_out_xxmc.c 2010-04-08 09:52:43.000000000 -0500 -+++ xine-lib-1.1.19/src/video_out/video_out_xxmc.c 2010-11-06 16:01:34.278017097 -0500 -@@ -35,6 +35,7 @@ - - - #include "xxmc.h" -+#include <X11/extensions/XvMClib.h> - #include <unistd.h> - #include "xv_common.h" - -diff -u -r --new-file xine-lib-1.1.19.orig/src/video_out/xvmc_mocomp.c xine-lib-1.1.19/src/video_out/xvmc_mocomp.c ---- xine-lib-1.1.19.orig/src/video_out/xvmc_mocomp.c 2010-03-09 16:17:05.000000000 -0600 -+++ xine-lib-1.1.19/src/video_out/xvmc_mocomp.c 2010-11-06 16:01:34.272017924 -0500 -@@ -21,6 +21,7 @@ - */ - - #include "xxmc.h" -+#include <X11/extensions/XvMClib.h> - - - static void calc_DMV(int DMV[][2], int *dmvector, diff --git a/source/xap/xine-ui/xine-ui-0.99.7-upstream_fix-1.patch b/source/xap/xine-ui/xine-ui-0.99.7-upstream_fix-1.patch deleted file mode 100644 index 448c9d3e4..000000000 --- a/source/xap/xine-ui/xine-ui-0.99.7-upstream_fix-1.patch +++ /dev/null @@ -1,27 +0,0 @@ -Submitted By: Ken Moffat <ken at linuxfromscratch dot org> -Date: 2013-04-17 -Initial Package Version: 0.99.7 -Upstream Status: Applied -Origin: Upstream (Torsten Jager) -Description: The change to use a png logo before 0.99.7 overlooked -that static graphics have a different status in xine-lib (they never -stop). That broke opening a file from the 'Open' menu (opening from -the MRL Browser, or from a file passed on the command lein were OK). - -Upstream revision r3135: - -open user file immediately when only logo is playing - -diff -r 653d3359d87a -r edb37ede1ab2 src/xitk/actions.c ---- a/src/xitk/actions.c Tue Mar 19 22:29:33 2013 +0200 -+++ b/src/xitk/actions.c Mon Apr 15 19:56:17 2013 +0300 -@@ -2148,7 +2148,8 @@ - - /* If an MRL is not being played, select the first file appended. If in "smart mode" start - playing the entry. If a an MRL is currently being played, let it continue normally */ -- if((first != gGui->playlist.num) && (xine_get_status(gGui->stream) == XINE_STATUS_STOP)) { -+ if((first != gGui->playlist.num) && -+ (gGui->logo_mode || (xine_get_status(gGui->stream) == XINE_STATUS_STOP))) { - gGui->playlist.cur = first; - if(gGui->smart_mode) { - gui_set_current_mmk(mediamark_get_current_mmk()); diff --git a/source/xap/xine-ui/xine-ui.SlackBuild b/source/xap/xine-ui/xine-ui.SlackBuild index 228936c0b..2cef59a52 100755 --- a/source/xap/xine-ui/xine-ui.SlackBuild +++ b/source/xap/xine-ui/xine-ui.SlackBuild @@ -57,8 +57,6 @@ find . \ \( -perm 666 -o -perm 664 -o -perm 600 -o -perm 444 -o -perm 440 -o -perm 400 \) \ -exec chmod 644 {} \; -zcat $CWD/xine-ui-0.99.7-upstream_fix-1.patch.gz | patch -p1 --verbose || exit 1 - XINE_BUILD=$TARGET \ ./configure \ --prefix=/usr \ @@ -71,9 +69,6 @@ XINE_BUILD=$TARGET \ make $NUMJOBS || make || exit 1 make install DESTDIR=$PKG || exit 1 -mkdir -p $PKG/usr/share/applications -zcat $CWD/xine.desktop.gz > $PKG/usr/share/applications/xine.desktop - find $PKG | xargs file | grep -e "executable" -e "shared object" \ | grep ELF | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null diff --git a/source/xap/xine-ui/xine.desktop b/source/xap/xine-ui/xine.desktop deleted file mode 100644 index 0936a4e99..000000000 --- a/source/xap/xine-ui/xine.desktop +++ /dev/null @@ -1,14 +0,0 @@ -[Desktop Entry] -Encoding=UTF-8 -Name=Xine -Name[pl]=Odtwarzacz xine -GenericName=Media Player -Comment=Xine Media Player -Comment[pl]=Odtwarzacz filmów -Icon=xine.xpm -Exec=xine -Terminal=0 -Type=Application -Categories=Application;AudioVideo;Player; -MimeType=video/mpeg;video/quicktime;video/x-msvideo;video/x-anim;audio/x-mp3;audio/x-mp2; -# vi: encoding=utf-8 diff --git a/source/xap/xlockmore/xlockmore.SlackBuild b/source/xap/xlockmore/xlockmore.SlackBuild index 4da13fe66..3516c567e 100755 --- a/source/xap/xlockmore/xlockmore.SlackBuild +++ b/source/xap/xlockmore/xlockmore.SlackBuild @@ -1,6 +1,6 @@ #!/bin/sh -# Copyright 2008, 2009, 2011, 2012, 2013 Patrick J. Volkerding, Sebeka, MN, USA +# Copyright 2008, 2009, 2011, 2012, 2013, 2015 Patrick J. Volkerding, Sebeka, MN, USA # All rights reserved. # # Redistribution and use of this script, with or without modification, is @@ -22,7 +22,7 @@ PKGNAM=xlockmore -VERSION=${VERSION:-$(echo $PKGNAM-*.tar.?z* | rev | cut -f 3- -d . | cut -f 1 -d - | rev)} +VERSION=${VERSION:-$(echo $PKGNAM-*.tar.xz | rev | cut -f 3- -d . | cut -f 1 -d - | rev)} BUILD=${BUILD:-1} # Automatically determine the architecture we're building on: @@ -57,13 +57,9 @@ PKG=$TMP/package-xlockmore rm -rf $PKG mkdir -p $TMP $PKG -## Explode the package framework: -#cd $PKG -#tar xzvf $CWD/_xlockmore.tar.gz - cd $TMP rm -rf xlockmore-$VERSION -tar xvf $CWD/xlockmore-$VERSION.tar.?z* || exit 1 +tar xvf $CWD/xlockmore-$VERSION.tar.xz || exit 1 cd xlockmore-$VERSION || exit 1 chown -R root:root . find . \ diff --git a/source/xap/xpaint/xpaint.SlackBuild b/source/xap/xpaint/xpaint.SlackBuild index 367df5ee0..e174ca62a 100755 --- a/source/xap/xpaint/xpaint.SlackBuild +++ b/source/xap/xpaint/xpaint.SlackBuild @@ -1,6 +1,6 @@ #!/bin/sh -# Copyright 2008, 2009, 2010 Patrick J. Volkerding, Sebeka, MN, USA +# Copyright 2008, 2009, 2010, 2015 Patrick J. Volkerding, Sebeka, MN, USA # All rights reserved. # # Redistribution and use of this script, with or without modification, is @@ -22,7 +22,7 @@ PKGNAM=xpaint -VERSION=${VERSION:-2.8.16} +VERSION=${VERSION:-$(echo $PKGNAM-*.tar.xz | rev | cut -f 3- -d . | cut -f 1 -d - | rev)} BUILD=${BUILD:-1} # Automatically determine the architecture we're building on: @@ -37,7 +37,6 @@ fi NUMJOBS=${NUMJOBS:-" -j7 "} - CWD=$(pwd) TMP=${TMP:-/tmp} PKG=$TMP/package-${PKGNAM} @@ -60,13 +59,13 @@ fi cd $TMP rm -rf ${PKGNAM}-${VERSION} -tar xvf $CWD/${PKGNAM}-$VERSION.tar.bz2 || exit 1 +tar xvf $CWD/${PKGNAM}-$VERSION.tar.xz || exit 1 cd ${PKGNAM}-$VERSION || exit 1 -if [ "$ARCH" = "x86_64" ]; then - # Make it detect Xaw3d: - sed -i -e "s#usr/lib/#usr/lib${LIBDIRSUFFIX}/#g" $( grep -lr 'usr/lib/' * ) -fi +#if [ "$ARCH" = "x86_64" ]; then +# # Make it detect Xaw3d: +# sed -i -e "s#usr/lib/#usr/lib${LIBDIRSUFFIX}/#g" $( grep -lr 'usr/lib/' * ) +#fi # Make sure ownerships and permissions are sane: chown -R root:root . @@ -76,11 +75,23 @@ find . \ \( -perm 666 -o -perm 664 -o -perm 600 -o -perm 444 -o -perm 440 -o -perm 400 \) \ -exec chmod 644 {} \; -./configure +CFLAGS="$SLKCFLAGS" \ +./configure \ + --prefix=/usr \ + --sysconfdir=/etc \ + --libdir=/usr/lib${LIBDIRSUFFIX} \ + --mandir=/usr/man \ + --infodir=/usr/info \ + --enable-static=no \ + --build=$ARCH-slackware-linux make $NUMJOBS || make || exit 1 make install DESTDIR=$PKG -make install.man DESTDIR=$PKG + +# Since this won't listen: +mv $PKG/usr/share/man/man1/* $PKG/usr/man/man1 +rmdir $PKG/usr/share/man/man1 $PKG/usr/share/man +rm $PKG/usr/lib${LIBDIRSUFFIX}/*.a ( cd bitmaps mkdir -p ${PKG}/usr/include/X11/bitmaps @@ -120,8 +131,9 @@ fi # Add a documentation directory: mkdir -p ${PKG}/usr/doc/xpaint-$VERSION cp -a \ - GPL* INSTALL README* TODO* \ + AUTHORS COPYING INSTALL NEWS README* TODO* \ ${PKG}/usr/doc/xpaint-$VERSION +chmod 644 ${PKG}/usr/doc/xpaint-$VERSION/* # If there's a ChangeLog, installing at least part of the recent history # is useful, but don't let it get totally out of control: diff --git a/source/xap/xpdf/patches/xpdf-3.03-CVE-2012-2142.diff b/source/xap/xpdf/patches/xpdf-3.03-CVE-2012-2142.diff deleted file mode 100644 index 891c41fd3..000000000 --- a/source/xap/xpdf/patches/xpdf-3.03-CVE-2012-2142.diff +++ /dev/null @@ -1,55 +0,0 @@ -From 3945969e0072217c143fefa3044512a31ac2afa8 Mon Sep 17 00:00:00 2001 -From: mancha <mancha1@hush.com> -Date: Sun, 11 Aug 2013 -Subject: CVE-2012-2142 - -Filter stuff that might end up in the shell to address CVE-2012-2142. -This code was adapted from the Poppler project. ---- - Error.cc | 21 ++++++++++++++++----- - 1 file changed, 16 insertions(+), 5 deletions(-) - ---- a/xpdf/Error.cc 2013-08-11 -+++ b/xpdf/Error.cc 2013-08-11 -@@ -43,7 +43,7 @@ void setErrorCallback(void (*cbk)(void * - - void CDECL error(ErrorCategory category, int pos, const char *msg, ...) { - va_list args; -- GString *s; -+ GString *s, *sanitized; - - // NB: this can be called before the globalParams object is created - if (!errorCbk && globalParams && globalParams->getErrQuiet()) { -@@ -52,17 +52,28 @@ void CDECL error(ErrorCategory category, - va_start(args, msg); - s = GString::formatv(msg, args); - va_end(args); -+ -+ sanitized = new GString (); -+ for (int i = 0; i < s->getLength(); ++i) { -+ const char c = s->getChar(i); -+ if (c < (char)0x20 || c >= (char)0x7f) { -+ sanitized->appendf("<{0:02x}>", c & 0xff); -+ } else { -+ sanitized->append(c); -+ } -+ } -+ - if (errorCbk) { -- (*errorCbk)(errorCbkData, category, pos, s->getCString()); -+ (*errorCbk)(errorCbkData, category, pos, sanitized->getCString()); - } else { - if (pos >= 0) { - fprintf(stderr, "%s (%d): %s\n", -- errorCategoryNames[category], pos, s->getCString()); -+ errorCategoryNames[category], pos, sanitized->getCString()); - } else { - fprintf(stderr, "%s: %s\n", -- errorCategoryNames[category], s->getCString()); -+ errorCategoryNames[category], sanitized->getCString()); - } - fflush(stderr); - } -- delete s; -+ delete sanitized; - } diff --git a/source/xap/xpdf/patches/xpdf.XPDFViewer.diff b/source/xap/xpdf/patches/xpdf.XPDFViewer.diff deleted file mode 100644 index 0aa4455d5..000000000 --- a/source/xap/xpdf/patches/xpdf.XPDFViewer.diff +++ /dev/null @@ -1,11 +0,0 @@ ---- ./xpdf/XPDFViewer.cc.orig 2011-08-15 16:08:53.000000000 -0500 -+++ ./xpdf/XPDFViewer.cc 2013-03-28 15:35:31.589432279 -0500 -@@ -1803,7 +1803,7 @@ - menuPane = XmCreatePulldownMenu(toolBar, "zoomMenuPane", args, n); - for (i = 0; i < nZoomMenuItems; ++i) { - n = 0; -- s = XmStringCreateLocalized(zoomMenuInfo[i].label); -+ s = XmStringCreateLocalized((char *)zoomMenuInfo[i].label); - XtSetArg(args[n], XmNlabelString, s); ++n; - XtSetArg(args[n], XmNuserData, (XtPointer)i); ++n; - sprintf(buf, "zoom%d", i); diff --git a/source/xap/xpdf/xpdf.SlackBuild b/source/xap/xpdf/xpdf.SlackBuild index 6aa5e1b45..aa3af9604 100755 --- a/source/xap/xpdf/xpdf.SlackBuild +++ b/source/xap/xpdf/xpdf.SlackBuild @@ -1,6 +1,6 @@ #!/bin/sh -# Copyright 2008, 2009, 2010, 2011, 2012, 2013 Patrick J. Volkerding, Sebeka, MN, USA +# Copyright 2008, 2009, 2010, 2011, 2012, 2013, 2014 Patrick J. Volkerding, Sebeka, MN, USA # All rights reserved. # # Redistribution and use of this script, with or without modification, is @@ -21,24 +21,24 @@ # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -VERSION=3.03 +VERSION=3.04 PATCHLEVEL= -BUILD=${BUILD:-3} +BUILD=${BUILD:-2} NUMJOBS=${NUMJOBS:-" -j7 "} # Automatically determine the architecture we're building on: if [ -z "$ARCH" ]; then case "$( uname -m )" in - i?86) export ARCH=i486 ;; + i?86) export ARCH=i586 ;; arm*) export ARCH=arm ;; # Unless $ARCH is already set, use uname -m for all other archs: *) export ARCH=$( uname -m ) ;; esac fi -if [ "$ARCH" = "i486" ]; then - SLKCFLAGS="-O2 -march=i486 -mtune=i686" +if [ "$ARCH" = "i586" ]; then + SLKCFLAGS="-O2 -march=i586 -mtune=i686" LIBDIRSUFFIX="" elif [ "$ARCH" = "s390" ]; then SLKCFLAGS="-O2" @@ -71,8 +71,6 @@ find . \ -exec chmod 644 {} \; zcat $CWD/patches/xpdfrc.diff.gz | patch -p1 --verbose || exit 1 -zcat $CWD/patches/xpdf.XPDFViewer.diff.gz | patch -p1 --verbose || exit 1 -zcat $CWD/patches/xpdf-3.03-CVE-2012-2142.diff.gz | patch -p1 --verbose || exit 1 CFLAGS="$SLKCFLAGS" \ CXXFLAGS="$SLKCFLAGS" \ diff --git a/source/xap/xsane/xsane-0.995-close-fds.patch b/source/xap/xsane/xsane-0.995-close-fds.patch new file mode 100644 index 000000000..917b075b3 --- /dev/null +++ b/source/xap/xsane/xsane-0.995-close-fds.patch @@ -0,0 +1,101 @@ +From 6dee7eadd1b7352ec503ea04fa1639d4a93f370b Mon Sep 17 00:00:00 2001 +From: Nils Philippsen <nils@redhat.com> +Date: Thu, 16 Aug 2012 11:18:31 +0200 +Subject: [PATCH] patch: close-fds + +Squashed commit of the following: + +commit 4fdedd3a8b66fb42b2d4dde62df28c78571c1c5d +Author: Nils Philippsen <nils@redhat.com> +Date: Fri Nov 19 12:15:58 2010 +0100 + + don't leak file descriptors to help browser process (#455450) +--- + src/xsane.c | 43 +++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 43 insertions(+) + +diff --git a/src/xsane.c b/src/xsane.c +index 775610e..1c5d61d 100644 +--- a/src/xsane.c ++++ b/src/xsane.c +@@ -48,6 +48,8 @@ + + #include <sys/wait.h> + ++#include <stdarg.h> ++ + /* ---------------------------------------------------------------------------------------------------------------------- */ + + struct option long_options[] = +@@ -3684,6 +3686,41 @@ static void xsane_show_gpl(GtkWidget *widget, gpointer data) + + /* ---------------------------------------------------------------------------------------------------------------------- */ + ++static void xsane_close_fds_for_exec(signed int first_fd_to_leave_open, ...) ++{ ++ int open_max; ++ signed int i; ++ ++ va_list ap; ++ unsigned char *close_fds; ++ ++ open_max = (int) sysconf (_SC_OPEN_MAX); ++ ++ close_fds = malloc (open_max); ++ ++ memset (close_fds, 1, open_max); ++ ++ va_start (ap, first_fd_to_leave_open); ++ ++ for (i = first_fd_to_leave_open; i >= 0; i = va_arg (ap, signed int)) { ++ if (i < open_max) ++ close_fds[i] = 0; ++ } ++ ++ va_end (ap); ++ ++ DBG(DBG_info, "closing unneeded file descriptors\n"); ++ ++ for (i = 0; i < open_max; i++) { ++ if (close_fds[i]) ++ close (i); ++ } ++ ++ free (close_fds); ++} ++ ++/* ---------------------------------------------------------------------------------------------------------------------- */ ++ + static void xsane_show_doc_via_nsr(GtkWidget *widget, gpointer data) /* show via netscape remote */ + { + char *name = (char *) data; +@@ -3736,6 +3773,8 @@ static void xsane_show_doc_via_nsr(GtkWidget *widget, gpointer data) /* show via + ipc_file = fdopen(xsane.ipc_pipefd[1], "w"); + } + ++ xsane_close_fds_for_exec (1, 2, xsane.ipc_pipefd[1], -1); ++ + DBG(DBG_info, "trying to change user id for new subprocess:\n"); + DBG(DBG_info, "old effective uid = %d\n", (int) geteuid()); + setuid(getuid()); +@@ -3778,6 +3817,8 @@ static void xsane_show_doc_via_nsr(GtkWidget *widget, gpointer data) /* show via + ipc_file = fdopen(xsane.ipc_pipefd[1], "w"); + } + ++ xsane_close_fds_for_exec (1, 2, xsane.ipc_pipefd[1], -1); ++ + DBG(DBG_info, "trying to change user id for new subprocess:\n"); + DBG(DBG_info, "old effective uid = %d\n", (int) geteuid()); + setuid(getuid()); +@@ -3899,6 +3940,8 @@ static void xsane_show_doc(GtkWidget *widget, gpointer data) + ipc_file = fdopen(xsane.ipc_pipefd[1], "w"); + } + ++ xsane_close_fds_for_exec (1, 2, xsane.ipc_pipefd[1], -1); ++ + DBG(DBG_info, "trying to change user id for new subprocess:\n"); + DBG(DBG_info, "old effective uid = %d\n", (int) geteuid()); + setuid(getuid()); +-- +1.7.11.4 + diff --git a/source/xap/xsane/xsane-0.995-xdg-open.patch b/source/xap/xsane/xsane-0.995-xdg-open.patch new file mode 100644 index 000000000..c27693878 --- /dev/null +++ b/source/xap/xsane/xsane-0.995-xdg-open.patch @@ -0,0 +1,32 @@ +From 813d7063e3d265ba7e625766a040b8ba9bb130a9 Mon Sep 17 00:00:00 2001 +From: Nils Philippsen <nils@redhat.com> +Date: Thu, 16 Aug 2012 11:18:00 +0200 +Subject: [PATCH] patch: xdg-open + +Squashed commit of the following: + +commit 55380b90cece459e20d14e6da552abcf5ca54621 +Author: Nils Philippsen <nils@redhat.com> +Date: Fri Nov 19 12:14:17 2010 +0100 + + use "xdg-open" instead of "netscape" to launch help browser +--- + src/xsane.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/xsane.h b/src/xsane.h +index cf6111f..3d8caaa 100644 +--- a/src/xsane.h ++++ b/src/xsane.h +@@ -251,7 +251,7 @@ + # elif defined(HAVE_OS2_H) + # define DEFAULT_BROWSER "netscape" + # else +-# define DEFAULT_BROWSER "netscape" ++# define DEFAULT_BROWSER "xdg-open" + # endif + #endif + +-- +1.7.11.4 + diff --git a/source/xap/xsane/xsane-0.996-no-eula.patch b/source/xap/xsane/xsane-0.996-no-eula.patch new file mode 100644 index 000000000..66cd68429 --- /dev/null +++ b/source/xap/xsane/xsane-0.996-no-eula.patch @@ -0,0 +1,94 @@ +From 7018206ea45db2e8bdfeb67d33f3387c9678a407 Mon Sep 17 00:00:00 2001 +From: Nils Philippsen <nils@redhat.com> +Date: Thu, 16 Aug 2012 11:19:16 +0200 +Subject: [PATCH] patch: no-eula + +Squashed commit of the following: + +commit d13f1ccfdf4c150cab91105e9b8542ecbb048a9b +Author: Nils Philippsen <nils@redhat.com> +Date: Fri Nov 19 12:20:52 2010 +0100 + + don't show EULA, mention bugzilla in about dialog (#504344) +--- + src/xsane-text.h | 2 ++ + src/xsane.c | 16 ++++++---------- + src/xsane.h | 3 +++ + 3 files changed, 11 insertions(+), 10 deletions(-) + +diff --git a/src/xsane-text.h b/src/xsane-text.h +index fc6bbeb..ee4a222 100644 +--- a/src/xsane-text.h ++++ b/src/xsane-text.h +@@ -230,6 +230,8 @@ + "This program is distributed in the hope that it will be useful, but\n" \ + "WITHOUT ANY WARRANTY; without even the implied warranty of\n" \ + "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n") ++#define TEXT_MODIFIED_BLURB _("This package is modified from the original version.\n" \ ++ "Please contact your vendor or report problems at") + #define TEXT_EMAIL_ADR _("E-mail:") + #define TEXT_HOMEPAGE _("Homepage:") + #define TEXT_FILE _("File:") +diff --git a/src/xsane.c b/src/xsane.c +index 1c5d61d..8b24b0c 100644 +--- a/src/xsane.c ++++ b/src/xsane.c +@@ -3533,10 +3533,13 @@ static void xsane_about_dialog(GtkWidget *widget, gpointer data) + snprintf(buf, sizeof(buf), "XSane %s %s\n" + "%s %s\n" + "\n" ++ "%s\n%s" ++ "\n\n" + "%s %s\n" + "%s %s\n", + TEXT_VERSION, XSANE_VERSION, + XSANE_COPYRIGHT_SIGN, XSANE_COPYRIGHT_TXT, ++ TEXT_MODIFIED_BLURB, XSANE_BUGTRACKER_URL, + TEXT_HOMEPAGE, XSANE_HOMEPAGE, + TEXT_EMAIL_ADR, XSANE_EMAIL_ADR); + +@@ -5733,6 +5736,7 @@ static int xsane_init(int argc, char **argv) + + case 'v': /* --version */ + g_print("%s-%s %s %s\n", xsane.prog_name, XSANE_VERSION, XSANE_COPYRIGHT_SIGN, XSANE_COPYRIGHT_TXT); ++ g_print("\n%s\n%s\n\n", TEXT_MODIFIED_BLURB, XSANE_BUGTRACKER_URL); + g_print(" %s %s\n", TEXT_EMAIL_ADR, XSANE_EMAIL_ADR); + g_print(" %s %s\n", TEXT_PACKAGE, XSANE_PACKAGE_VERSION); + g_print(" %s%d.%d.%d\n", TEXT_GTK_VERSION, GTK_MAJOR_VERSION, GTK_MINOR_VERSION, GTK_MICRO_VERSION); +@@ -5859,17 +5863,9 @@ static int xsane_init(int argc, char **argv) + } + + +- if (xsane_pref_restore()) /* restore preferences, returns TRUE if license is not accpted yet */ ++ if (xsane_pref_restore()) /* restore preferences, returns TRUE if the version is different from the last run */ + { +- if (xsane_display_eula(1)) /* show license and ask for accept/not accept */ +- { +- DBG(DBG_info, "user did not accept eula, we abort\n"); +- return 1; /* User did not accept eula */ +- } +- else /* User did accept eula */ +- { +- xsane_pref_save(); +- } ++ xsane_pref_save(); + } + + xsane_pref_restore_media(); +diff --git a/src/xsane.h b/src/xsane.h +index 3d8caaa..6c7568e 100644 +--- a/src/xsane.h ++++ b/src/xsane.h +@@ -98,6 +98,9 @@ + #define XSANE_EMAIL_ADR "Oliver.Rauch@xsane.org" + #define XSANE_HOMEPAGE "http://www.xsane.org" + #define XSANE_COPYRIGHT_TXT XSANE_DATE " " XSANE_COPYRIGHT ++#ifndef XSANE_BUGTRACKER_URL ++#define XSANE_BUGTRACKER_URL "(no bug tracker configured)" ++#endif + + /* ---------------------------------------------------------------------------------------------------------------------- */ + +-- +1.7.11.4 + diff --git a/source/xap/xsane/xsane-0.997-ipv6.patch b/source/xap/xsane/xsane-0.997-ipv6.patch new file mode 100644 index 000000000..43f7af6d1 --- /dev/null +++ b/source/xap/xsane/xsane-0.997-ipv6.patch @@ -0,0 +1,148 @@ +From a2ef22d59904d5e53c3d58093b561fa1ab7127a6 Mon Sep 17 00:00:00 2001 +From: Nils Philippsen <nils@redhat.com> +Date: Thu, 16 Aug 2012 10:58:54 +0200 +Subject: [PATCH] patch: ipv6 + +Squashed commit of the following: + +commit 9f9d5c46fdef5ba7baccb81ab8170cfc24797de6 +Author: Nils Philippsen <nils@redhat.com> +Date: Fri Nov 19 12:27:42 2010 +0100 + + support IPv6 (#198422) +--- + src/xsane-save.c | 96 ++++++++++++++++++++++++++++++++++++-------------------- + 1 file changed, 62 insertions(+), 34 deletions(-) + +diff --git a/src/xsane-save.c b/src/xsane-save.c +index 84f5d59..87ef685 100644 +--- a/src/xsane-save.c ++++ b/src/xsane-save.c +@@ -29,6 +29,8 @@ + #include <time.h> + #include <sys/wait.h> + ++#include <glib.h> ++ + /* the following test is always false */ + #ifdef _native_WIN32 + # include <winsock.h> +@@ -7488,55 +7490,81 @@ void write_email_attach_file(int fd_socket, char *boundary, FILE *infile, char * + /* returns fd_socket if sucessfull, < 0 when error occured */ + int open_socket(char *server, int port) + { +- int fd_socket; +- struct sockaddr_in sin; +- struct hostent *he; ++ int fd_socket, e; ++ ++ struct addrinfo *ai_list, *ai; ++ struct addrinfo hints; ++ gchar *port_s; ++ gint connected; ++ ++ memset(&hints, '\0', sizeof(hints)); ++ hints.ai_flags = AI_ADDRCONFIG; ++ hints.ai_socktype = SOCK_STREAM; ++ ++ port_s = g_strdup_printf("%d", port); ++ e = getaddrinfo(server, port_s, &hints, &ai_list); ++ g_free(port_s); + +- he = gethostbyname(server); +- if (!he) ++ if (e != 0) + { +- DBG(DBG_error, "open_socket: Could not get hostname of \"%s\"\n", server); ++ DBG(DBG_error, "open_socket: Could not lookup \"%s\"\n", server); + return -1; + } +- else ++ ++ connected = 0; ++ for (ai = ai_list; ai != NULL && !connected; ai = ai->ai_next) + { +- DBG(DBG_info, "open_socket: connecting to \"%s\" = %d.%d.%d.%d\n", +- he->h_name, +- (unsigned char) he->h_addr_list[0][0], +- (unsigned char) he->h_addr_list[0][1], +- (unsigned char) he->h_addr_list[0][2], +- (unsigned char) he->h_addr_list[0][3]); +- } ++ gchar hostname[NI_MAXHOST]; ++ gchar hostaddr[NI_MAXHOST]; ++ ++ /* If all else fails */ ++ strncpy(hostname, "(unknown name)", NI_MAXHOST-1); ++ strncpy(hostaddr, "(unknown address)", NI_MAXHOST-1); ++ ++ /* Determine canonical name and IPv4/IPv6 address */ ++ (void) getnameinfo(ai->ai_addr, ai->ai_addrlen, hostname, sizeof(hostname), ++ NULL, 0, 0); ++ (void) getnameinfo(ai->ai_addr, ai->ai_addrlen, hostaddr, sizeof(hostaddr), ++ NULL, 0, NI_NUMERICHOST); ++ ++ DBG(DBG_info, "open_socket: connecting to \"%s\" (\"%s\"): %s\n", ++ server, hostname, hostaddr); + +- if (he->h_addrtype != AF_INET) +- { +- DBG(DBG_error, "open_socket: Unknown address family: %d\n", he->h_addrtype); +- return -1; +- } ++ if ((ai->ai_family != AF_INET) && (ai->ai_family != AF_INET6)) ++ { ++ DBG(DBG_error, "open_socket: Unknown address family: %d\n", ai->ai_family); ++ continue; ++ } + +- fd_socket = socket(AF_INET, SOCK_STREAM, 0); ++ fd_socket = socket(ai->ai_family, ai->ai_socktype, ai->ai_protocol); + +- if (fd_socket < 0) +- { +- DBG(DBG_error, "open_socket: Could not create socket: %s\n", strerror(errno)); +- return -1; +- } ++ if (fd_socket < 0) ++ { ++ DBG(DBG_error, "open_socket: Could not create socket: %s\n", strerror(errno)); ++ continue; ++ } + +-/* setsockopt (dev->ctl, level, TCP_NODELAY, &on, sizeof (on)); */ ++ /* setsockopt (dev->ctl, level, TCP_NODELAY, &on, sizeof (on)); */ + +- sin.sin_port = htons(port); +- sin.sin_family = AF_INET; +- memcpy(&sin.sin_addr, he->h_addr_list[0], he->h_length); ++ if (connect(fd_socket, ai->ai_addr, ai->ai_addrlen) != 0) ++ { ++ DBG(DBG_error, "open_socket: Could not connect with port %d of socket: %s\n", port, strerror(errno)); ++ continue; ++ } ++ ++ /* All went well */ ++ connected = 1; ++ } + +- if (connect(fd_socket, &sin, sizeof(sin))) ++ if (!connected) + { +- DBG(DBG_error, "open_socket: Could not connect with port %d of socket: %s\n", ntohs(sin.sin_port), strerror(errno)); +- return -1; ++ DBG(DBG_info, "open_socket: Could not connect to any address"); ++ return -1; + } + +- DBG(DBG_info, "open_socket: Connected with port %d\n", ntohs(sin.sin_port)); ++ DBG(DBG_info, "open_socket: Connected with port %d\n", port); + +- return fd_socket; ++ return fd_socket; + } + + /* ---------------------------------------------------------------------------------------------------------------------- */ +-- +1.7.11.4 + diff --git a/source/xap/xsane/xsane-0.997-off-root-build.patch b/source/xap/xsane/xsane-0.997-off-root-build.patch new file mode 100644 index 000000000..02155f8f8 --- /dev/null +++ b/source/xap/xsane/xsane-0.997-off-root-build.patch @@ -0,0 +1,127 @@ +From 7f43255972b741ff178f94233ffff67c9779c247 Mon Sep 17 00:00:00 2001 +From: Nils Philippsen <nils@redhat.com> +Date: Thu, 16 Aug 2012 10:57:38 +0200 +Subject: [PATCH] patch: off-root-build + +Squashed commit of the following: + +commit f88d28c807667f618b3b1cf91c12b823f3853983 +Author: Nils Philippsen <nils@redhat.com> +Date: Fri Nov 19 12:23:57 2010 +0100 + + enable off-root builds +--- + configure.in | 2 +- + doc/Makefile.in | 12 ++++++------ + lib/Makefile.in | 4 ++-- + src/Makefile.in | 8 ++++---- + 4 files changed, 13 insertions(+), 13 deletions(-) + +diff --git a/configure.in b/configure.in +index a770253..770077b 100644 +--- a/configure.in ++++ b/configure.in +@@ -312,4 +312,4 @@ echo "* ------------------------------------------------------------ *" + echo "* ... PLEASE READ SANE DOCUMENTATION BEFORE STARTING XSANE ... *" + echo "* ------------------------------------------------------------ *" + echo "****************************************************************" +-cat xsane.NEWS ++cat ${srcdir}/xsane.NEWS +diff --git a/doc/Makefile.in b/doc/Makefile.in +index 59b022b..4038a6b 100644 +--- a/doc/Makefile.in ++++ b/doc/Makefile.in +@@ -57,14 +57,14 @@ install: $(MANPAGES) + $(MKINSTALLDIRS) $(DESTDIR)$(datadir) + + $(MKINSTALLDIRS) $(DESTDIR)$(xsanedocdir) +- @for page in *.html; do\ ++ @for page in $(notdir $(wildcard $(srcdir)/*.html)); do \ + echo installing $${page} in $(DESTDIR)$(xsanedocdir)/$${page}...; \ +- $(INSTALL_DATA) $${page} $(DESTDIR)$(xsanedocdir)/$${page} || exit 1; \ ++ $(INSTALL_DATA) $(srcdir)/$${page} $(DESTDIR)$(xsanedocdir)/$${page} || exit 1; \ + done + +- @for image in *.jpg; do\ ++ @for image in $(notdir $(wildcard $(srcdir)/*.jpg)); do \ + echo installing $${image} in $(DESTDIR)$(xsanedocdir)/$${image}...; \ +- $(INSTALL_DATA) $${image} $(DESTDIR)$(xsanedocdir)/$${image} || exit 1; \ ++ $(INSTALL_DATA) $(srcdir)/$${image} $(DESTDIR)$(xsanedocdir)/$${image} || exit 1; \ + done + + uninstall: +@@ -73,12 +73,12 @@ uninstall: + rm -f $(DESTDIR)$(mandir)/man1/$${page} || exit 1; \ + done + +- @for page in *.html; do\ ++ @for page in $(notdir $(wildcard $(srcdir)/*.html)); do \ + echo uninstalling $(DESTDIR)$(xsanedocdir)/$${page}...; \ + rm -f $(DESTDIR)$(xsanedocdir)/$${page} || exit 1; \ + done + +- @for image in *.jpg; do\ ++ @for image in $(notdir $(wildcard $(srcdir)/*.jpg)); do \ + echo uninstalling $${image} in $(DESTDIR)$(xsanedocdir)/$${image}...; \ + rm -f $(DESTDIR)$(xsanedocdir)/$${image} || exit 1; \ + done +diff --git a/lib/Makefile.in b/lib/Makefile.in +index 7567d54..6be1eeb 100644 +--- a/lib/Makefile.in ++++ b/lib/Makefile.in +@@ -30,7 +30,7 @@ RANLIB = @RANLIB@ + + CC = @CC@ + INCLUDES = -I. -I$(srcdir) \ +- -I$(top_builddir)/include/sane -I$(top_srcdir)/include ++ -I$(top_builddir)/include/sane -I$(top_builddir)/include -I$(top_srcdir)/include + CPPFLAGS = @CPPFLAGS@ + CFLAGS = @CFLAGS@ + LDFLAGS = @LDFLAGS@ +@@ -68,7 +68,7 @@ uninstall: + check: + + depend: +- makedepend -I. -I../include *.c ++ makedepend -I. -I../include $(srcdir)/*.c + + clean: + rm -f *.out *.o *.lo *~ *.a *.bak $(TESTPROGRAMS) +diff --git a/src/Makefile.in b/src/Makefile.in +index 905ef93..2b246db 100644 +--- a/src/Makefile.in ++++ b/src/Makefile.in +@@ -77,10 +77,10 @@ install: $(PROGRAMS) + $(INSTALL_DATA) $(srcdir)/xsane-eula.txt $(DESTDIR)$(sanedatadir)/xsane/xsane-eula.txt + $(INSTALL_DATA) $(srcdir)/xsane.desktop $(DESTDIR)$(desktopappdir)/xsane.desktop + $(INSTALL_DATA) $(srcdir)/xsane.xpm $(DESTDIR)$(pixmapdir)/xsane.xpm +- @for logo in *-logo.xpm; do \ ++ @for logo in $(notdir $(wildcard $(srcdir)/*-logo.xpm)); do \ + echo installing $(DESTDIR)$(sanedatadir)/xsane/$${logo}; \ + $(INSTALL_DATA) $(srcdir)/$${logo} $(DESTDIR)$(sanedatadir)/xsane/$${logo}; \ +- done ++ done + + uninstall: + @for program in $(BINPROGS); do \ +@@ -99,7 +99,7 @@ uninstall: + rm -f $(DESTDIR)$(desktopappdir)/xsane.desktop + echo uninstalling $(DESTDIR)$(pixmapdir)/xsane.xpm + rm -f $(DESTDIR)$(pixmapdir)/xsane.xpm +- @for logo in *-logo.xpm; do \ ++ @for logo in $(notdir $(wildcard $(srcdir)/*-logo.xpm)); do \ + echo uninstalling $(DESTDIR)$(sanedatadir)/xsane/$${logo}; \ + rm -f $(DESTDIR)$(sanedatadir)/xsane/$${logo}; \ + done +@@ -119,7 +119,7 @@ distclean: clean + rm -f Makefile $(PROGRAMS) + + depend: +- makedepend $(INCLUDES) *.c ++ makedepend $(INCLUDES) $(srcdir)/*.c + + .PHONY: all install depend clean distclean + +-- +1.7.11.4 + diff --git a/source/xap/xsane/xsane-0.998-desktop-file.patch b/source/xap/xsane/xsane-0.998-desktop-file.patch new file mode 100644 index 000000000..396be6716 --- /dev/null +++ b/source/xap/xsane/xsane-0.998-desktop-file.patch @@ -0,0 +1,53 @@ +From e3f3e266249f77ff655299daeab3128347d6cb17 Mon Sep 17 00:00:00 2001 +From: Nils Philippsen <nils@redhat.com> +Date: Wed, 30 Jan 2013 15:59:40 +0100 +Subject: [PATCH] patch: desktop-file + +Squashed commit of the following: + +commit e472b870c4490f41b9257c835d4c8c72a575e9e9 +Author: Nils Philippsen <nils@redhat.com> +Date: Wed Jan 30 15:57:57 2013 +0100 + + desktop file: use Name, GenericName, X-GNOME-FullName + +commit 9f7f6a039193f91473ded79780bd72e29d7b94fb +Author: Nils Philippsen <nils@redhat.com> +Date: Wed Jan 30 15:57:14 2013 +0100 + + desktop file: remove obsolete encoding key + +commit 79a444793a60bd729c72283ad1920f0ce9c65dc2 +Author: Nils Philippsen <nils@redhat.com> +Date: Fri Nov 19 12:41:23 2010 +0100 + + customize desktop file +--- + src/xsane.desktop | 11 ++++++++--- + 1 file changed, 8 insertions(+), 3 deletions(-) + +diff --git a/src/xsane.desktop b/src/xsane.desktop +index d5161e5..a2a4a61 100644 +--- a/src/xsane.desktop ++++ b/src/xsane.desktop +@@ -1,9 +1,14 @@ + [Desktop Entry] +-Encoding=UTF-8 +-Name=XSane - Scanning ++Version=1.0 ++#Name=XSane - Scanning ++Name=XSane ++GenericName=Scanner Tool ++X-GNOME-FullName=XSane (Scanner Tool) + Comment=Acquire images from a scanner + Exec=xsane ++TryExec=xsane + Icon=xsane + Terminal=false + Type=Application +-Categories=Application;Graphics ++Categories=Graphics;2DGraphics;RasterGraphics;Scanning;GTK; ++StartupNotify=true +-- +1.8.1 + diff --git a/source/xap/xsane/xsane-0.998-libpng.patch b/source/xap/xsane/xsane-0.998-libpng.patch new file mode 100644 index 000000000..c792c5a18 --- /dev/null +++ b/source/xap/xsane/xsane-0.998-libpng.patch @@ -0,0 +1,41 @@ +From bd29bb933cf80f397dd28286635da2aec58e6e6c Mon Sep 17 00:00:00 2001 +From: Nils Philippsen <nils@redhat.com> +Date: Thu, 16 Aug 2012 11:26:54 +0200 +Subject: [PATCH] patch: libpng + +Squashed commit of the following: + +commit 9df6d60274c95b5081faf5b398aa27cde969c649 +Author: Nils Philippsen <nils@redhat.com> +Date: Mon Nov 21 13:50:38 2011 +0100 + + support libpng-1.5 +--- + src/xsane-save.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/src/xsane-save.c b/src/xsane-save.c +index 87ef685..5461bf1 100644 +--- a/src/xsane-save.c ++++ b/src/xsane-save.c +@@ -4912,7 +4912,7 @@ int xsane_save_png(FILE *outfile, int compression, FILE *imagefile, Image_info * + return -1; /* error */ + } + +- if (setjmp(png_ptr->jmpbuf)) ++ if (setjmp(png_jmpbuf(png_ptr))) + { + snprintf(buf, sizeof(buf), "%s %s", ERR_DURING_SAVE, ERR_LIBPNG); + xsane_back_gtk_error(buf, TRUE); +@@ -5102,7 +5102,7 @@ int xsane_save_png_16(FILE *outfile, int compression, FILE *imagefile, Image_inf + return -1; /* error */ + } + +- if (setjmp(png_ptr->jmpbuf)) ++ if (setjmp(png_jmpbuf(png_ptr))) + { + snprintf(buf, sizeof(buf), "%s %s", ERR_DURING_SAVE, ERR_LIBPNG); + xsane_back_gtk_error(buf, TRUE); +-- +1.7.11.4 + diff --git a/source/xap/xsane/xsane-0.998-preview-selection.patch b/source/xap/xsane/xsane-0.998-preview-selection.patch new file mode 100644 index 000000000..293981819 --- /dev/null +++ b/source/xap/xsane/xsane-0.998-preview-selection.patch @@ -0,0 +1,60 @@ +From d8bf0d3f0af16e208b52084f19a9a1287acbcea0 Mon Sep 17 00:00:00 2001 +From: Nils Philippsen <nils@redhat.com> +Date: Fri, 2 Sep 2011 11:56:26 +0200 +Subject: [PATCH] patch: preview-selection +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Squashed commit of the following: + +commit e7c03a6de0c76256810b6340e0a954e88c3448e9 +Author: Reinhard Fössmeier <info@ais-sanmarino.org> +Date: Wed May 12 20:23:18 2010 +0200 + + fixed a problem in mouse event processing + + Fixed a problem in mouse event processing that interfered with selecting + the scan rectangle in the preview window. +--- + src/xsane-preview.c | 9 ++++----- + 1 file changed, 4 insertions(+), 5 deletions(-) + +diff --git a/src/xsane-preview.c b/src/xsane-preview.c +index f089dd1..264c775 100644 +--- a/src/xsane-preview.c ++++ b/src/xsane-preview.c +@@ -80,7 +80,6 @@ + #include "xsane-preview.h" + #include "xsane-preferences.h" + #include "xsane-gamma.h" +-#include <gdk/gdkkeysyms.h> + + + #ifndef PATH_MAX +@@ -3023,9 +3022,9 @@ static gint preview_motion_event_handler(GtkWidget *window, GdkEvent *event, gpo + preview_display_color_components(p, event->motion.x, event->motion.y); + + switch (((GdkEventMotion *)event)->state & +- GDK_Num_Lock & GDK_Caps_Lock & GDK_Shift_Lock & GDK_Scroll_Lock) /* mask all Locks */ ++ (GDK_BUTTON1_MASK | GDK_BUTTON2_MASK | GDK_BUTTON3_MASK)) /* only check for mouse buttons */ + { +- case 256: /* left button */ ++ case GDK_BUTTON1_MASK: /* left button */ + + DBG(DBG_info2, "left button\n"); + +@@ -3292,8 +3291,8 @@ static gint preview_motion_event_handler(GtkWidget *window, GdkEvent *event, gpo + } + break; + +- case 512: /* middle button */ +- case 1024: /* right button */ ++ case GDK_BUTTON2_MASK: /* middle button */ ++ case GDK_BUTTON3_MASK: /* right button */ + DBG(DBG_info2, "middle or right button\n"); + + if (p->selection_drag) +-- +1.7.11.4 + diff --git a/source/xap/xsane/xsane-0.998-wmclass.patch b/source/xap/xsane/xsane-0.998-wmclass.patch new file mode 100644 index 000000000..4fd84ba0b --- /dev/null +++ b/source/xap/xsane/xsane-0.998-wmclass.patch @@ -0,0 +1,33 @@ +From a0b23d7e1991b23e2b9ab78bf382c55b9e24cfb9 Mon Sep 17 00:00:00 2001 +From: Nils Philippsen <nils@redhat.com> +Date: Fri, 25 May 2012 11:47:39 +0200 +Subject: [PATCH] patch: wmclass + +Squashed commit of the following: + +commit d42b7a9dbe397a301373e3cbaa589540a1475a0b +Author: Nils Philippsen <nils@redhat.com> +Date: Fri May 25 11:45:48 2012 +0200 + + set program name -> wmclass to match desktop file name +--- + src/xsane.c | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/src/xsane.c b/src/xsane.c +index 8b24b0c..eee76ff 100644 +--- a/src/xsane.c ++++ b/src/xsane.c +@@ -6208,6 +6208,9 @@ int main(int argc, char **argv) + xsane.ipc_pipefd[1] = 0; + } + ++ /* Set program name -> wmclass to match desktop file name */ ++ g_set_prgname("xsane"); ++ + #if 0 + bindtextdomain(PACKAGE, STRINGIFY(LOCALEDIR)); + textdomain(PACKAGE); +-- +1.7.11.4 + diff --git a/source/xap/xsane/xsane-0.999-7-autoconf.patch b/source/xap/xsane/xsane-0.999-7-autoconf.patch new file mode 100644 index 000000000..55415c83e --- /dev/null +++ b/source/xap/xsane/xsane-0.999-7-autoconf.patch @@ -0,0 +1,738 @@ +diff -up xsane-0.999/configure.autoconf xsane-0.999/configure +--- xsane-0.999/configure.autoconf 2013-05-22 23:50:40.000000000 +0200 ++++ xsane-0.999/configure 2013-09-23 16:14:45.245517908 +0200 +@@ -1,11 +1,9 @@ + #! /bin/sh + # Guess values for system-dependent variables and create Makefiles. +-# Generated by GNU Autoconf 2.68. ++# Generated by GNU Autoconf 2.69. + # + # +-# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, +-# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software +-# Foundation, Inc. ++# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. + # + # + # This configure script is free software; the Free Software Foundation +@@ -134,6 +132,31 @@ export LANGUAGE + # CDPATH. + (unset CDPATH) >/dev/null 2>&1 && unset CDPATH + ++# Use a proper internal environment variable to ensure we don't fall ++ # into an infinite loop, continuously re-executing ourselves. ++ if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then ++ _as_can_reexec=no; export _as_can_reexec; ++ # We cannot yet assume a decent shell, so we have to provide a ++# neutralization value for shells without unset; and this also ++# works around shells that cannot unset nonexistent variables. ++# Preserve -v and -x to the replacement shell. ++BASH_ENV=/dev/null ++ENV=/dev/null ++(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV ++case $- in # (((( ++ *v*x* | *x*v* ) as_opts=-vx ;; ++ *v* ) as_opts=-v ;; ++ *x* ) as_opts=-x ;; ++ * ) as_opts= ;; ++esac ++exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} ++# Admittedly, this is quite paranoid, since all the known shells bail ++# out after a failed `exec'. ++$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 ++as_fn_exit 255 ++ fi ++ # We don't want this to propagate to other subprocesses. ++ { _as_can_reexec=; unset _as_can_reexec;} + if test "x$CONFIG_SHELL" = x; then + as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : + emulate sh +@@ -167,7 +190,8 @@ if ( set x; as_fn_ret_success y && test + else + exitcode=1; echo positional parameters were not saved. + fi +-test x\$exitcode = x0 || exit 1" ++test x\$exitcode = x0 || exit 1 ++test -x / || exit 1" + as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO + as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO + eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && +@@ -212,6 +236,7 @@ IFS=$as_save_IFS + + + if test "x$CONFIG_SHELL" != x; then : ++ export CONFIG_SHELL + # We cannot yet assume a decent shell, so we have to provide a + # neutralization value for shells without unset; and this also + # works around shells that cannot unset nonexistent variables. +@@ -219,14 +244,17 @@ IFS=$as_save_IFS + BASH_ENV=/dev/null + ENV=/dev/null + (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV +- export CONFIG_SHELL + case $- in # (((( + *v*x* | *x*v* ) as_opts=-vx ;; + *v* ) as_opts=-v ;; + *x* ) as_opts=-x ;; + * ) as_opts= ;; + esac +- exec "$CONFIG_SHELL" $as_opts "$as_myself" ${1+"$@"} ++exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} ++# Admittedly, this is quite paranoid, since all the known shells bail ++# out after a failed `exec'. ++$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 ++exit 255 + fi + + if test x$as_have_required = xno; then : +@@ -328,6 +356,14 @@ $as_echo X"$as_dir" | + + + } # as_fn_mkdir_p ++ ++# as_fn_executable_p FILE ++# ----------------------- ++# Test if FILE is an executable regular file. ++as_fn_executable_p () ++{ ++ test -f "$1" && test -x "$1" ++} # as_fn_executable_p + # as_fn_append VAR VALUE + # ---------------------- + # Append the text in VALUE to the end of the definition contained in VAR. Take +@@ -449,6 +485,10 @@ as_cr_alnum=$as_cr_Letters$as_cr_digits + chmod +x "$as_me.lineno" || + { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } + ++ # If we had to re-execute with $CONFIG_SHELL, we're ensured to have ++ # already done that, so ensure we don't try to do so again and fall ++ # in an infinite loop. This has already happened in practice. ++ _as_can_reexec=no; export _as_can_reexec + # Don't try to exec as it changes $[0], causing all sort of problems + # (the dirname of $[0] is not the place where we might find the + # original and so on. Autoconf is especially sensitive to this). +@@ -483,16 +523,16 @@ if (echo >conf$$.file) 2>/dev/null; then + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. +- # In both cases, we have to default to `cp -p'. ++ # In both cases, we have to default to `cp -pR'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || +- as_ln_s='cp -p' ++ as_ln_s='cp -pR' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else +- as_ln_s='cp -p' ++ as_ln_s='cp -pR' + fi + else +- as_ln_s='cp -p' ++ as_ln_s='cp -pR' + fi + rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file + rmdir conf$$.dir 2>/dev/null +@@ -504,28 +544,8 @@ else + as_mkdir_p=false + fi + +-if test -x / >/dev/null 2>&1; then + as_test_x='test -x' +-else +- if ls -dL / >/dev/null 2>&1; then +- as_ls_L_option=L +- else +- as_ls_L_option= +- fi +- as_test_x=' +- eval sh -c '\'' +- if test -d "$1"; then +- test -d "$1/."; +- else +- case $1 in #( +- -*)set "./$1";; +- esac; +- case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( +- ???[sx]*):;;*)false;;esac;fi +- '\'' sh +- ' +-fi +-as_executable_p=$as_test_x ++as_executable_p=as_fn_executable_p + + # Sed expression to map a string onto a valid CPP name. + as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" +@@ -1192,8 +1212,6 @@ target=$target_alias + if test "x$host_alias" != x; then + if test "x$build_alias" = x; then + cross_compiling=maybe +- $as_echo "$as_me: WARNING: if you wanted to set the --build type, don't use --host. +- If a cross compiler is detected then cross compile mode will be used" >&2 + elif test "x$build_alias" != "x$host_alias"; then + cross_compiling=yes + fi +@@ -1451,9 +1469,9 @@ test -n "$ac_init_help" && exit $ac_stat + if $ac_init_version; then + cat <<\_ACEOF + configure +-generated by GNU Autoconf 2.68 ++generated by GNU Autoconf 2.69 + +-Copyright (C) 2010 Free Software Foundation, Inc. ++Copyright (C) 2012 Free Software Foundation, Inc. + This configure script is free software; the Free Software Foundation + gives unlimited permission to copy, distribute and modify it. + _ACEOF +@@ -1726,7 +1744,7 @@ $as_echo "$ac_try_echo"; } >&5 + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || +- $as_test_x conftest$ac_exeext ++ test -x conftest$ac_exeext + }; then : + ac_retval=0 + else +@@ -1870,7 +1888,7 @@ This file contains any messages produced + running configure, to aid debugging if configure makes a mistake. + + It was created by $as_me, which was +-generated by GNU Autoconf 2.68. Invocation command line was ++generated by GNU Autoconf 2.69. Invocation command line was + + $ $0 $@ + +@@ -2377,7 +2395,7 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ++ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}gcc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 +@@ -2417,7 +2435,7 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ++ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="gcc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 +@@ -2470,7 +2488,7 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ++ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}cc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 +@@ -2511,7 +2529,7 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ++ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then + ac_prog_rejected=yes + continue +@@ -2569,7 +2587,7 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ++ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 +@@ -2613,7 +2631,7 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ++ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 +@@ -3059,8 +3077,7 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ + /* end confdefs.h. */ + #include <stdarg.h> + #include <stdio.h> +-#include <sys/types.h> +-#include <sys/stat.h> ++struct stat; + /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ + struct buf { int x; }; + FILE * (*rcsopen) (struct buf *, struct stat *, int); +@@ -3300,7 +3317,7 @@ do + for ac_prog in grep ggrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" +- { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue ++ as_fn_executable_p "$ac_path_GREP" || continue + # Check for GNU ac_path_GREP and select it if it is found. + # Check for GNU $ac_path_GREP + case `"$ac_path_GREP" --version 2>&1` in +@@ -3366,7 +3383,7 @@ do + for ac_prog in egrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" +- { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue ++ as_fn_executable_p "$ac_path_EGREP" || continue + # Check for GNU ac_path_EGREP and select it if it is found. + # Check for GNU $ac_path_EGREP + case `"$ac_path_EGREP" --version 2>&1` in +@@ -3684,7 +3701,7 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ++ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}gcc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 +@@ -3724,7 +3741,7 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ++ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="gcc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 +@@ -3777,7 +3794,7 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ++ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}cc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 +@@ -3818,7 +3835,7 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ++ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then + ac_prog_rejected=yes + continue +@@ -3876,7 +3893,7 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ++ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 +@@ -3920,7 +3937,7 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ++ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 +@@ -4116,8 +4133,7 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ + /* end confdefs.h. */ + #include <stdarg.h> + #include <stdio.h> +-#include <sys/types.h> +-#include <sys/stat.h> ++struct stat; + /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ + struct buf { int x; }; + FILE * (*rcsopen) (struct buf *, struct stat *, int); +@@ -4271,7 +4287,7 @@ case $as_dir/ in #(( + # by default. + for ac_prog in ginstall scoinst install; do + for ac_exec_ext in '' $ac_executable_extensions; do +- if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then ++ if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then + if test $ac_prog = install && + grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # AIX install. It has an incompatible calling convention. +@@ -4732,11 +4748,11 @@ else + int + main () + { +-/* FIXME: Include the comments suggested by Paul. */ ++ + #ifndef __cplusplus +- /* Ultrix mips cc rejects this. */ ++ /* Ultrix mips cc rejects this sort of thing. */ + typedef int charset[2]; +- const charset cs; ++ const charset cs = { 0, 0 }; + /* SunOS 4.1.1 cc rejects this. */ + char const *const *pcpcc; + char **ppc; +@@ -4753,8 +4769,9 @@ main () + ++pcpcc; + ppc = (char**) pcpcc; + pcpcc = (char const *const *) ppc; +- { /* SCO 3.2v4 cc rejects this. */ +- char *t; ++ { /* SCO 3.2v4 cc rejects this sort of thing. */ ++ char tx; ++ char *t = &tx; + char const *s = 0 ? (char *) 0 : (char const *) 0; + + *t++ = 0; +@@ -4770,10 +4787,10 @@ main () + iptr p = 0; + ++p; + } +- { /* AIX XL C 1.02.0.0 rejects this saying ++ { /* AIX XL C 1.02.0.0 rejects this sort of thing, saying + "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */ +- struct s { int j; const int *ap[3]; }; +- struct s *b; b->j = 5; ++ struct s { int j; const int *ap[3]; } bx; ++ struct s *b = &bx; b->j = 5; + } + { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ + const int foo = 10; +@@ -5132,13 +5149,12 @@ fi + fi + + if test "${USE_LCMS}" = "yes"; then +- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cmsOpenProfileFromFile in -llcms" >&5 +-$as_echo_n "checking for cmsOpenProfileFromFile in -llcms... " >&6; } +-if ${ac_cv_lib_lcms_cmsOpenProfileFromFile+:} false; then : ++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing cmsOpenProfileFromFile" >&5 ++$as_echo_n "checking for library containing cmsOpenProfileFromFile... " >&6; } ++if ${ac_cv_search_cmsOpenProfileFromFile+:} false; then : + $as_echo_n "(cached) " >&6 + else +- ac_check_lib_save_LIBS=$LIBS +-LIBS="-llcms $LIBS" ++ ac_func_search_save_LIBS=$LIBS + cat confdefs.h - <<_ACEOF >conftest.$ac_ext + /* end confdefs.h. */ + +@@ -5157,26 +5173,54 @@ return cmsOpenProfileFromFile (); + return 0; + } + _ACEOF +-if ac_fn_c_try_link "$LINENO"; then : +- ac_cv_lib_lcms_cmsOpenProfileFromFile=yes ++for ac_lib in '' lcms2 lcms; do ++ if test -z "$ac_lib"; then ++ ac_res="none required" + else +- ac_cv_lib_lcms_cmsOpenProfileFromFile=no ++ ac_res=-l$ac_lib ++ LIBS="-l$ac_lib $ac_func_search_save_LIBS" ++ fi ++ if ac_fn_c_try_link "$LINENO"; then : ++ ac_cv_search_cmsOpenProfileFromFile=$ac_res + fi + rm -f core conftest.err conftest.$ac_objext \ +- conftest$ac_exeext conftest.$ac_ext +-LIBS=$ac_check_lib_save_LIBS ++ conftest$ac_exeext ++ if ${ac_cv_search_cmsOpenProfileFromFile+:} false; then : ++ break + fi +-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_lcms_cmsOpenProfileFromFile" >&5 +-$as_echo "$ac_cv_lib_lcms_cmsOpenProfileFromFile" >&6; } +-if test "x$ac_cv_lib_lcms_cmsOpenProfileFromFile" = xyes; then : +- cat >>confdefs.h <<_ACEOF +-#define HAVE_LIBLCMS 1 +-_ACEOF ++done ++if ${ac_cv_search_cmsOpenProfileFromFile+:} false; then : ++ ++else ++ ac_cv_search_cmsOpenProfileFromFile=no ++fi ++rm conftest.$ac_ext ++LIBS=$ac_func_search_save_LIBS ++fi ++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_cmsOpenProfileFromFile" >&5 ++$as_echo "$ac_cv_search_cmsOpenProfileFromFile" >&6; } ++ac_res=$ac_cv_search_cmsOpenProfileFromFile ++if test "$ac_res" != no; then : ++ test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" + +- LIBS="-llcms $LIBS" ++fi ++ ++ if test "${ac_cv_search_cmsOpenProfileFromFile}" != "no"; then ++ ++$as_echo "#define HAVE_LIBLCMS 1" >>confdefs.h + + fi ++ if test "${ac_cv_search_cmsOpenProfileFromFile}" == "-llcms2"; then + ++$as_echo "#define HAVE_LIBLCMS2 1" >>confdefs.h ++ ++ else ++ if test "${ac_cv_search_cmsOpenProfileFromFile}" == "-llcms"; then ++ ++$as_echo "#define HAVE_LIBLCMS1 1" >>confdefs.h ++ ++fi ++ fi + fi + + # The Ultrix 4.2 mips builtin alloca declared by alloca.h only works +@@ -5330,23 +5374,20 @@ else + /* end confdefs.h. */ + $ac_includes_default + int +-find_stack_direction () +-{ +- static char *addr = 0; +- auto char dummy; +- if (addr == 0) ++find_stack_direction (int *addr, int depth) + { ++ int dir, dummy = 0; ++ if (! addr) + addr = &dummy; +- return find_stack_direction (); +- } +- else +- return (&dummy > addr) ? 1 : -1; ++ *addr = addr < &dummy ? 1 : addr == &dummy ? 0 : -1; ++ dir = depth ? find_stack_direction (addr, depth - 1) : 0; ++ return dir + dummy; + } + + int +-main () ++main (int argc, char **argv) + { +- return find_stack_direction () < 0; ++ return find_stack_direction (0, argc + !argv + 20) < 0; + } + _ACEOF + if ac_fn_c_try_run "$LINENO"; then : +@@ -5599,7 +5640,7 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ++ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 +@@ -5639,7 +5680,7 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ++ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_RANLIB="ranlib" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 +@@ -5971,7 +6012,7 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ++ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_GMSGFMT="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 +@@ -6136,7 +6177,7 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ++ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_GENCAT="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 +@@ -6177,7 +6218,7 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ++ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_GMSGFMT="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 +@@ -6350,7 +6391,7 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ++ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_GMSGFMT="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 +@@ -6574,7 +6615,7 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ++ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_SANE_CONFIG="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 +@@ -6795,7 +6836,7 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ++ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 +@@ -7058,7 +7099,7 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ++ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 +@@ -7346,7 +7387,7 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ++ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_GTK_CONFIG="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 +@@ -7616,7 +7657,7 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ++ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_GIMP_CONFIG="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 +@@ -7670,7 +7711,7 @@ do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ++ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_GIMP_TOOL="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 +@@ -8496,16 +8537,16 @@ if (echo >conf$$.file) 2>/dev/null; then + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. +- # In both cases, we have to default to `cp -p'. ++ # In both cases, we have to default to `cp -pR'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || +- as_ln_s='cp -p' ++ as_ln_s='cp -pR' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else +- as_ln_s='cp -p' ++ as_ln_s='cp -pR' + fi + else +- as_ln_s='cp -p' ++ as_ln_s='cp -pR' + fi + rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file + rmdir conf$$.dir 2>/dev/null +@@ -8565,28 +8606,16 @@ else + as_mkdir_p=false + fi + +-if test -x / >/dev/null 2>&1; then ++ ++# as_fn_executable_p FILE ++# ----------------------- ++# Test if FILE is an executable regular file. ++as_fn_executable_p () ++{ ++ test -f "$1" && test -x "$1" ++} # as_fn_executable_p + as_test_x='test -x' +-else +- if ls -dL / >/dev/null 2>&1; then +- as_ls_L_option=L +- else +- as_ls_L_option= +- fi +- as_test_x=' +- eval sh -c '\'' +- if test -d "$1"; then +- test -d "$1/."; +- else +- case $1 in #( +- -*)set "./$1";; +- esac; +- case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( +- ???[sx]*):;;*)false;;esac;fi +- '\'' sh +- ' +-fi +-as_executable_p=$as_test_x ++as_executable_p=as_fn_executable_p + + # Sed expression to map a string onto a valid CPP name. + as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" +@@ -8608,7 +8637,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_wri + # values after options handling. + ac_log=" + This file was extended by $as_me, which was +-generated by GNU Autoconf 2.68. Invocation command line was ++generated by GNU Autoconf 2.69. Invocation command line was + + CONFIG_FILES = $CONFIG_FILES + CONFIG_HEADERS = $CONFIG_HEADERS +@@ -8674,10 +8703,10 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_writ + ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" + ac_cs_version="\\ + config.status +-configured by $0, generated by GNU Autoconf 2.68, ++configured by $0, generated by GNU Autoconf 2.69, + with options \\"\$ac_cs_config\\" + +-Copyright (C) 2010 Free Software Foundation, Inc. ++Copyright (C) 2012 Free Software Foundation, Inc. + This config.status script is free software; the Free Software Foundation + gives unlimited permission to copy, distribute and modify it." + +@@ -8766,7 +8795,7 @@ fi + _ACEOF + cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + if \$ac_cs_recheck; then +- set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion ++ set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion + shift + \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 + CONFIG_SHELL='$SHELL' +@@ -9463,11 +9492,15 @@ else + echo "* - PNG support deactivated *" + fi + +-if test "${ac_cv_lib_lcms_cmsOpenProfileFromFile}" = "yes"; then +- echo "* - LCMS (color management) support activated *" ++if test "${ac_cv_search_cmsOpenProfileFromFile}" = "-llcms2"; then ++ echo "* - LCMS (color management) support activated (lcms2) *" ++else ++ if test "${ac_cv_search_cmsOpenProfileFromFile}" = "-llcms"; then ++ echo "* - LCMS (color management) support activated (lcms) *" + else + echo "* - LCMS (color management) support deactivated *" + fi ++fi + + echo "* *" + echo "****************************************************************" +@@ -9481,4 +9514,4 @@ echo "* -------------------------------- + echo "* ... PLEASE READ SANE DOCUMENTATION BEFORE STARTING XSANE ... *" + echo "* ------------------------------------------------------------ *" + echo "****************************************************************" +-cat xsane.NEWS ++cat ${srcdir}/xsane.NEWS diff --git a/source/xap/xsane/xsane-0.999-coverity.patch b/source/xap/xsane/xsane-0.999-coverity.patch new file mode 100644 index 000000000..f6350fe98 --- /dev/null +++ b/source/xap/xsane/xsane-0.999-coverity.patch @@ -0,0 +1,2679 @@ +From 9fe09c0e0746067f9e9774229b3d0beb35c5766b Mon Sep 17 00:00:00 2001 +From: Nils Philippsen <nils@redhat.com> +Date: Wed, 2 Apr 2014 14:54:05 +0200 +Subject: [PATCH] patch: coverity + +Squashed commit of the following: + +commit e26d784a5217d1609e774678d8abaeb2e1ecdadc +Author: Nils Philippsen <nils@redhat.com> +Date: Tue Mar 11 10:28:02 2014 +0100 + + ensure loop is run at least once while scaling + +commit e5bf8c8a659a7b03ae3eb130ebfaad292e16816d +Author: Nils Philippsen <nils@redhat.com> +Date: Thu Feb 27 15:07:42 2014 +0100 + + remove stray semicolon + +commit ad928333ba038051ca0a405470dadeaa0f365b95 +Author: Nils Philippsen <nils@redhat.com> +Date: Thu Feb 27 15:06:17 2014 +0100 + + use actual pointer type in realloc() + +commit 11dfb289d03555218318ce1a284c1165bbc58b22 +Author: Nils Philippsen <nils@redhat.com> +Date: Tue Feb 25 17:42:54 2014 +0100 + + don't overflow size expression for allocation + +commit 5daccfc14f129c632f8409a89903d21c5495dd2f +Author: Nils Philippsen <nils@redhat.com> +Date: Tue Feb 25 17:18:58 2014 +0100 + + don't leak file descriptors and other resources + +commit 034023d7aaac378b8ab02051d11392c639154842 +Author: Nils Philippsen <nils@redhat.com> +Date: Tue Feb 25 16:04:28 2014 +0100 + + don't overrun buffers + +commit f7454d62b5206e2100e8569e04ff4a6868cbd909 +Author: Nils Philippsen <nils@redhat.com> +Date: Tue Feb 25 15:56:40 2014 +0100 + + check if files actually could be opened + +commit de30cacd285c02382a32dc48cf9fe015223a57f7 +Author: Nils Philippsen <nils@redhat.com> +Date: Tue Feb 25 15:47:51 2014 +0100 + + handle negative return values of some calls + +commit b46a520ba85bda776b1a91de9f842ed96d97fa73 +Author: Nils Philippsen <nils@redhat.com> +Date: Tue Feb 25 11:54:31 2014 +0100 + + only attempt to close successfully opened files + +commit bb6a8ccab418f89fa6fb367874f84aa56195cca0 +Author: Nils Philippsen <nils@redhat.com> +Date: Tue Feb 25 11:54:15 2014 +0100 + + bail out early if memory can't be allocated + +commit 9b1e34c1d099c0a7acf7bd5aec8e3f0c2d2eafa8 +Author: Nils Philippsen <nils@redhat.com> +Date: Tue Feb 25 11:53:11 2014 +0100 + + gtk_entry_get_text() isn't supposed to return NULL + +commit bc7553caaea1955e7fa48f3a2f4c0773d40204c3 +Author: Nils Philippsen <nils@redhat.com> +Date: Tue Feb 25 11:00:11 2014 +0100 + + negate comparison instead of operand + +commit d1d4675a416383d808def730ade4f6b5b1a493b8 +Author: Nils Philippsen <nils@redhat.com> +Date: Tue Feb 25 10:55:42 2014 +0100 + + use int types for fgetc() results + +commit cbdc2df85367c27ff56fb9cdd77a61c6d82be0e1 +Author: Nils Philippsen <nils@redhat.com> +Date: Tue Feb 25 10:36:53 2014 +0100 + + avoid freeing static strings + +commit 0c377b9658daa5dcdbc6c260baa4e31237202f3e +Author: Nils Philippsen <nils@redhat.com> +Date: Wed Feb 19 16:10:35 2014 +0100 + + use guchar* for PNG profile buffer + +commit 70152131771b891fe04b3087e3b73c42e6d5ebbe +Author: Nils Philippsen <nils@redhat.com> +Date: Wed Feb 19 16:09:46 2014 +0100 + + cast time_t into long instead of int + +commit 0ac0683bcba7d8cf4e786abc3abe9c3e3c7d60a0 +Author: Nils Philippsen <nils@redhat.com> +Date: Tue Feb 18 17:55:02 2014 +0100 + + use glib macros where ints are transported in pointers + +commit 8e85947fe5a592a3f938ab5bb2dc79488b638515 +Author: Nils Philippsen <nils@redhat.com> +Date: Mon Feb 17 13:42:13 2014 +0100 + + handle return values of some file related system calls + +commit f4ba79f720a9a1e4a3caddc77d0de19a7d2fb75c +Author: Nils Philippsen <nils@redhat.com> +Date: Mon Feb 17 12:07:09 2014 +0100 + + avoid leaking resources +--- + src/xsane-back-gtk.c | 75 +++++++++++++--- + src/xsane-batch-scan.c | 41 ++++----- + src/xsane-email-project.c | 83 +++++++++--------- + src/xsane-fax-project.c | 14 ++- + src/xsane-front-gtk.c | 42 ++++----- + src/xsane-multipage-project.c | 5 ++ + src/xsane-preview.c | 34 ++++---- + src/xsane-save.c | 166 ++++++++++++++++++++++------------- + src/xsane-scan.c | 17 ++-- + src/xsane-setup.c | 70 +++++++-------- + src/xsane-text.h | 1 + + src/xsane-viewer.c | 199 +++++++++++++++++++++++------------------- + src/xsane.c | 65 ++++++++------ + 13 files changed, 478 insertions(+), 334 deletions(-) + +diff --git a/src/xsane-back-gtk.c b/src/xsane-back-gtk.c +index 6ef1506..6452f4b 100644 +--- a/src/xsane-back-gtk.c ++++ b/src/xsane-back-gtk.c +@@ -40,6 +40,7 @@ SANE_Status xsane_control_option(SANE_Handle handle, SANE_Int option, SANE_Actio + const SANE_Option_Descriptor *xsane_get_option_descriptor(SANE_Handle handle, SANE_Int option); + const char *xsane_back_gtk_unit_string(SANE_Unit unit); + void xsane_back_gtk_set_tooltip(GtkTooltips *tooltips, GtkWidget *widget, const gchar *desc); ++static int xsane_back_gtk_ensure_dir(const char *path); + int xsane_back_gtk_make_path(size_t buf_size, char *buf, const char *prog_name, const char *dir_name, + const char *prefix, const char *dev_name, const char *postfix, int location); + void xsane_back_gtk_set_option(int opt_num, void *val, SANE_Action action); +@@ -245,11 +246,47 @@ void xsane_back_gtk_set_tooltip(GtkTooltips *tooltips, GtkWidget *widget, const + + /* ----------------------------------------------------------------------------------------------------------------- */ + ++static int xsane_back_gtk_ensure_dir(const char *path) ++{ ++ struct stat statbuf; ++ ++ if (stat(path, &statbuf) < 0) ++ { ++ if (errno != ENOENT) ++ { ++ /* stat() failed and it wasn't because the file doesn't exist */ ++ return -1; ++ } ++ else ++ { ++ /* if path doesn't exist, create directory */ ++ if (mkdir(path, 0777) < 0) ++ { ++ /* mkdir() failed */ ++ return -2; ++ } ++ else ++ { ++ return 0; ++ } ++ } ++ } ++ ++ if (S_ISDIR(statbuf.st_mode)) ++ { ++ return 0; ++ } ++ ++ /* path exists and isn't a directory */ ++ return -3; ++} ++ + int xsane_back_gtk_make_path(size_t buf_size, char *buf, const char *prog_name, const char *dir_name, + const char *prefix, const char *dev_name, const char *postfix, int location) + { + size_t len, extra; + int i; ++ char msgbuf[TEXTBUFSIZE]; + + DBG(DBG_proc, "xsane_back_gtk_make_path\n"); + +@@ -263,7 +300,10 @@ int xsane_back_gtk_make_path(size_t buf_size, char *buf, const char *prog_name, + { + snprintf(buf, buf_size-2, "%s", STRINGIFY(XSANE_FIXED_APPDATA_DIR)); + } +- mkdir(buf, 0777); /* ensure ~/.sane directory exists */ ++ if (xsane_back_gtk_ensure_dir(buf)) ++ { ++ goto dir_failed; ++ } + } + else if (location == XSANE_PATH_SYSTEM) /* make path to system file */ + { +@@ -290,7 +330,10 @@ int xsane_back_gtk_make_path(size_t buf_size, char *buf, const char *prog_name, + len += extra; + + buf[len] = '\0'; +- mkdir(buf, 0777); /* ensure ~/.sane/PROG_NAME directory exists */ ++ if (xsane_back_gtk_ensure_dir(buf)) ++ { ++ goto dir_failed; ++ } + + buf[len++] = SLASH; /* OS/2 does not like slash at end of mktemp-path */ + } +@@ -314,7 +357,10 @@ int xsane_back_gtk_make_path(size_t buf_size, char *buf, const char *prog_name, + buf[len++] = SLASH; + + buf[len] = '\0'; +- mkdir(buf, 0777); /* ensure DIR_NAME directory exists */ ++ if (xsane_back_gtk_ensure_dir(buf)) ++ { ++ goto dir_failed; ++ } + } + + if (len >= buf_size) +@@ -454,6 +500,12 @@ filename_too_long: + xsane_back_gtk_error(ERR_FILENAME_TOO_LONG, FALSE); + errno = E2BIG; + return -1; ++ ++dir_failed: ++ snprintf(msgbuf, sizeof(msgbuf), "%s %s.", ERR_FAILED_CREATE_ENSURE_DIR, ++ strerror(errno)); ++ xsane_back_gtk_error(msgbuf, FALSE); ++ return -1; + } + + /* ----------------------------------------------------------------------------------------------------------------- */ +@@ -784,11 +836,15 @@ gint xsane_back_gtk_decision(gchar *title, gchar **xpm_d, gchar *message, gchar + void xsane_back_gtk_ipc_dialog_callback(gpointer data, gint source, GdkInputCondition cond) + { + char message[TEXTBUFSIZE]; +- size_t bytes; ++ ssize_t bytes; + + DBG(DBG_proc, "xsane_back_gtk_message\n"); + +- bytes = read(xsane.ipc_pipefd[0], message, sizeof(message)-1); ++ if ((bytes = read(xsane.ipc_pipefd[0], message, sizeof(message)-1)) < 0) ++ { ++ DBG(DBG_error, "xsane_back_gtk_message(): can't read from pipe\n"); ++ return; ++ } + message[bytes] = 0; + + xsane_back_gtk_decision(ERR_HEADER_CHILD_PROCESS_ERROR, (gchar **) error_xpm, message, BUTTON_CLOSE, 0 /* no reject text */, FALSE); +@@ -1980,7 +2036,7 @@ static void xsane_back_gtk_value_update(GtkAdjustment *adj_data, DialogElement * + static void xsane_back_gtk_range_display_value_right_callback(GtkAdjustment *adjust, gpointer data) + { + gchar buf[TEXTBUFSIZE]; +- int digits = (int) data; ++ int digits = GPOINTER_TO_INT(data); + GtkLabel *label; + + snprintf(buf, sizeof(buf), "%1.*f", digits, adjust->value); +@@ -2028,7 +2084,7 @@ void xsane_back_gtk_range_new(GtkWidget *parent, const char *name, gfloat val, + gtk_widget_set_size_request(value_label, 45, -1); + gtk_box_pack_end(GTK_BOX(hbox), value_label, FALSE, FALSE, 1); + +- g_signal_connect(elem->data, "value_changed", (GtkSignalFunc) xsane_back_gtk_range_display_value_right_callback, (void *) digits); ++ g_signal_connect(elem->data, "value_changed", (GtkSignalFunc) xsane_back_gtk_range_display_value_right_callback, GINT_TO_POINTER(digits)); + gtk_object_set_data(GTK_OBJECT(elem->data), "value-label", value_label); + g_signal_emit_by_name(GTK_OBJECT(elem->data), "value_changed"); /* update value */ + gtk_widget_show(value_label); +@@ -2318,10 +2374,7 @@ static void xsane_back_gtk_text_entry_callback(GtkWidget *w, gpointer data) + buf[0] = '\0'; + + text = gtk_entry_get_text(GTK_ENTRY(elem->widget)); +- if (text) +- { +- strncpy(buf, text, opt->size); +- } ++ strncpy(buf, text, opt->size); + buf[opt->size - 1] = '\0'; + + xsane_back_gtk_set_option(opt_num, buf, SANE_ACTION_SET_VALUE); +diff --git a/src/xsane-batch-scan.c b/src/xsane-batch-scan.c +index 90cc0e0..12eb1b2 100644 +--- a/src/xsane-batch-scan.c ++++ b/src/xsane-batch-scan.c +@@ -291,7 +291,7 @@ int xsane_batch_scan_load_list_from_file(char *filename) + + fd = open(filename, O_RDONLY); + +- if (fd > 0) ++ if (fd >= 0) + { + w.io.fd = fd; + w.io.read = read; +@@ -396,11 +396,11 @@ static void xsane_batch_scan_save_list(void) + sprintf(windowname, "%s %s %s", xsane.prog_name, WINDOW_SAVE_BATCH_LIST, xsane.device_text); + xsane_back_gtk_make_path(sizeof(filename), filename, "xsane", "batch-lists", 0, "default", ".xbl", XSANE_PATH_LOCAL_SANE); + +- if (!xsane_back_gtk_get_filename(windowname, filename, sizeof(filename), filename, NULL, NULL, XSANE_FILE_CHOOSER_ACTION_SAVE, XSANE_GET_FILENAME_SHOW_NOTHING, XSANE_FILE_FILTER_ALL | XSANE_FILE_FILTER_BATCHLIST, XSANE_FILE_FILTER_BATCHLIST)); ++ if (!xsane_back_gtk_get_filename(windowname, filename, sizeof(filename), filename, NULL, NULL, XSANE_FILE_CHOOSER_ACTION_SAVE, XSANE_GET_FILENAME_SHOW_NOTHING, XSANE_FILE_FILTER_ALL | XSANE_FILE_FILTER_BATCHLIST, XSANE_FILE_FILTER_BATCHLIST)) + { + fd = open(filename, O_WRONLY | O_CREAT | O_TRUNC, 0600); + +- if (fd > 0) ++ if (fd >= 0) + { + w.io.fd = fd; + w.io.read = read; +@@ -680,7 +680,6 @@ static GtkWidget *xsane_batch_scan_create_list_entry(Batch_Scan_Parameters *para + GtkWidget *list_item; + GtkWidget *hbox; + int size = 120; +- char *data; + + list_item = gtk_list_item_new(); + +@@ -688,8 +687,6 @@ static GtkWidget *xsane_batch_scan_create_list_entry(Batch_Scan_Parameters *para + gtk_container_add(GTK_CONTAINER(list_item), hbox); + gtk_widget_show(hbox); + +- data = calloc(size, size); +- + parameters->gtk_preview = gtk_preview_new(GTK_PREVIEW_COLOR); + gtk_preview_size(GTK_PREVIEW(parameters->gtk_preview), size, size); + gtk_box_pack_start(GTK_BOX(hbox), parameters->gtk_preview, FALSE, FALSE, 0); +@@ -725,13 +722,17 @@ void xsane_batch_scan_add() + + parameters = calloc(1, sizeof(Batch_Scan_Parameters)); + +- if (parameters) ++ if (!parameters) + { +- xsane_batch_scan_get_parameters(parameters); +- +- parameters->name = strdup(TEXT_BATCH_AREA_DEFAULT_NAME); ++ DBG(DBG_error, "xsane_batch_scan_add(): couldn't allocate memory for " ++ "parameters\n"); ++ return; + } + ++ xsane_batch_scan_get_parameters(parameters); ++ ++ parameters->name = strdup(TEXT_BATCH_AREA_DEFAULT_NAME); ++ + list_item = xsane_batch_scan_create_list_entry(parameters); + + /* scroll list to end */ +@@ -796,7 +797,7 @@ static void xsane_batch_scan_rotate_mirror(GtkWidget *widget, gpointer data) + GList *select; + GtkObject *list_item; + Batch_Scan_Parameters *parameters = NULL; +- int rotate_info = (int) data; ++ int rotate_info = GPOINTER_TO_INT(data); + int rotate, mirror; + + DBG(DBG_proc, "xsane_batch_scan_rotate_mirror\n"); +@@ -834,7 +835,7 @@ static void xsane_batch_scan_rename_button_callback(GtkWidget *widget, gpointer + { + DBG(DBG_proc, "xsane_batch_scan_rename\n"); + +- xsane_batch_scan_rename = (int) data; ++ xsane_batch_scan_rename = GPOINTER_TO_INT(data); + } + + +@@ -881,7 +882,7 @@ static void xsane_batch_scan_rename_callback(GtkWidget *widget, gpointer data) + gtk_window_set_resizable(GTK_WINDOW(rename_dialog), FALSE); + snprintf(buf, sizeof(buf), "%s %s", xsane.prog_name, WINDOW_BATCH_RENAME); + gtk_window_set_title(GTK_WINDOW(rename_dialog), buf); +- g_signal_connect(GTK_OBJECT(rename_dialog), "delete_event", (GtkSignalFunc) xsane_batch_scan_rename_button_callback,(void *) -1); ++ g_signal_connect(GTK_OBJECT(rename_dialog), "delete_event", (GtkSignalFunc) xsane_batch_scan_rename_button_callback, GINT_TO_POINTER(-1)); + gtk_widget_show(rename_dialog); + + text = gtk_entry_new(); +@@ -898,7 +899,7 @@ static void xsane_batch_scan_rename_callback(GtkWidget *widget, gpointer data) + #else + button = gtk_button_new_with_label(BUTTON_CANCEL); + #endif +- g_signal_connect(GTK_OBJECT(button), "clicked", (GtkSignalFunc) xsane_batch_scan_rename_button_callback, (void *) -1); ++ g_signal_connect(GTK_OBJECT(button), "clicked", (GtkSignalFunc) xsane_batch_scan_rename_button_callback, GINT_TO_POINTER(-1)); + gtk_box_pack_start(GTK_BOX(hbox), button, TRUE, TRUE, 0); + gtk_widget_show(button); + +@@ -909,7 +910,7 @@ static void xsane_batch_scan_rename_callback(GtkWidget *widget, gpointer data) + button = gtk_button_new_with_label(BUTTON_OK); + #endif + GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); +- g_signal_connect(GTK_OBJECT(button), "clicked", (GtkSignalFunc) xsane_batch_scan_rename_button_callback, (void *) 1); ++ g_signal_connect(GTK_OBJECT(button), "clicked", (GtkSignalFunc) xsane_batch_scan_rename_button_callback, GINT_TO_POINTER(1)); + gtk_box_pack_start(GTK_BOX(hbox), button, TRUE, TRUE, 0); + gtk_widget_grab_default(button); + gtk_widget_show(button); +@@ -1000,11 +1001,11 @@ void xsane_create_batch_scan_dialog(const char *devicetext) + xsane_button_new_with_pixmap(xsane.batch_scan_dialog->window, xsane.batch_scan_button_box, del_batch_xpm, DESC_BATCH_DEL, (GtkSignalFunc) xsane_batch_scan_delete, NULL); + + xsane_button_new_with_pixmap(xsane.batch_scan_dialog->window, xsane.batch_scan_button_box, ascii_xpm, DESC_BATCH_RENAME, (GtkSignalFunc) xsane_batch_scan_rename_callback, NULL); +- xsane_button_new_with_pixmap(xsane.batch_scan_dialog->window, xsane.batch_scan_button_box, rotate90_xpm, DESC_ROTATE90, (GtkSignalFunc) xsane_batch_scan_rotate_mirror, (void *) 1); +- xsane_button_new_with_pixmap(xsane.batch_scan_dialog->window, xsane.batch_scan_button_box, rotate180_xpm, DESC_ROTATE180, (GtkSignalFunc) xsane_batch_scan_rotate_mirror, (void *) 2); +- xsane_button_new_with_pixmap(xsane.batch_scan_dialog->window, xsane.batch_scan_button_box, rotate270_xpm, DESC_ROTATE270, (GtkSignalFunc) xsane_batch_scan_rotate_mirror, (void *) 3); +- xsane_button_new_with_pixmap(xsane.batch_scan_dialog->window, xsane.batch_scan_button_box, mirror_x_xpm, DESC_MIRROR_X, (GtkSignalFunc) xsane_batch_scan_rotate_mirror, (void *) 4); +- xsane_button_new_with_pixmap(xsane.batch_scan_dialog->window, xsane.batch_scan_button_box, mirror_y_xpm, DESC_MIRROR_Y, (GtkSignalFunc) xsane_batch_scan_rotate_mirror, (void *) 6); ++ xsane_button_new_with_pixmap(xsane.batch_scan_dialog->window, xsane.batch_scan_button_box, rotate90_xpm, DESC_ROTATE90, (GtkSignalFunc) xsane_batch_scan_rotate_mirror, GINT_TO_POINTER(1)); ++ xsane_button_new_with_pixmap(xsane.batch_scan_dialog->window, xsane.batch_scan_button_box, rotate180_xpm, DESC_ROTATE180, (GtkSignalFunc) xsane_batch_scan_rotate_mirror, GINT_TO_POINTER(2)); ++ xsane_button_new_with_pixmap(xsane.batch_scan_dialog->window, xsane.batch_scan_button_box, rotate270_xpm, DESC_ROTATE270, (GtkSignalFunc) xsane_batch_scan_rotate_mirror, GINT_TO_POINTER(3)); ++ xsane_button_new_with_pixmap(xsane.batch_scan_dialog->window, xsane.batch_scan_button_box, mirror_x_xpm, DESC_MIRROR_X, (GtkSignalFunc) xsane_batch_scan_rotate_mirror, GINT_TO_POINTER(4)); ++ xsane_button_new_with_pixmap(xsane.batch_scan_dialog->window, xsane.batch_scan_button_box, mirror_y_xpm, DESC_MIRROR_Y, (GtkSignalFunc) xsane_batch_scan_rotate_mirror, GINT_TO_POINTER(6)); + + + /* the scolled window with the list */ +diff --git a/src/xsane-email-project.c b/src/xsane-email-project.c +index 23fc942..413e3f7 100644 +--- a/src/xsane-email-project.c ++++ b/src/xsane-email-project.c +@@ -895,6 +895,11 @@ static void xsane_email_project_update_project_status() + + snprintf(filename, sizeof(filename), "%s/xsane-mail-list", preferences.email_project); + projectfile = fopen(filename, "r+b"); /* r+ = read and write, position = start of file */ ++ if (!projectfile) ++ { ++ DBG(DBG_error, "Could not open project file '%s'.\n", filename); ++ return; ++ } + + snprintf(buf, 32, "%s@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@", xsane.email_status); /* fill 32 characters status line */ + fprintf(projectfile, "%s\n", buf); /* first line is status of email */ +@@ -931,6 +936,11 @@ void xsane_email_project_save() + } + + projectfile = fopen(filename, "wb"); /* write binary (b for win32) */ ++ if (! projectfile) ++ { ++ DBG(DBG_error, "Could not open project file '%s'.\n", filename); ++ return; ++ } + + if (xsane.email_status) + { +@@ -1271,7 +1281,7 @@ static void xsane_email_entry_rename_button_callback(GtkWidget *widget, gpointer + { + DBG(DBG_proc, "xsane_email_entry_rename\n"); + +- xsane_email_entry_rename = (int) data; ++ xsane_email_entry_rename = GPOINTER_TO_INT(data); + } + + /* ---------------------------------------------------------------------------------------------------------------------- */ +@@ -1322,7 +1332,7 @@ static void xsane_email_entry_rename_callback(GtkWidget *widget, gpointer list) + gtk_window_set_resizable(GTK_WINDOW(rename_dialog), FALSE); + snprintf(filename, sizeof(filename), "%s %s", xsane.prog_name, WINDOW_EMAIL_RENAME); + gtk_window_set_title(GTK_WINDOW(rename_dialog), filename); +- g_signal_connect(GTK_OBJECT(rename_dialog), "delete_event", (GtkSignalFunc) xsane_email_entry_rename_button_callback, (void *) -1); ++ g_signal_connect(GTK_OBJECT(rename_dialog), "delete_event", (GtkSignalFunc) xsane_email_entry_rename_button_callback, GINT_TO_POINTER(-1)); + gtk_widget_show(rename_dialog); + + text = gtk_entry_new(); +@@ -1339,7 +1349,7 @@ static void xsane_email_entry_rename_callback(GtkWidget *widget, gpointer list) + #else + button = gtk_button_new_with_label(BUTTON_CANCEL); + #endif +- g_signal_connect(GTK_OBJECT(button), "clicked", (GtkSignalFunc) xsane_email_entry_rename_button_callback,(void *) -1); ++ g_signal_connect(GTK_OBJECT(button), "clicked", (GtkSignalFunc) xsane_email_entry_rename_button_callback, GINT_TO_POINTER(-1)); + gtk_box_pack_start(GTK_BOX(hbox), button, TRUE, TRUE, 0); + gtk_widget_show(button); + +@@ -1348,7 +1358,7 @@ static void xsane_email_entry_rename_callback(GtkWidget *widget, gpointer list) + #else + button = gtk_button_new_with_label(BUTTON_OK); + #endif +- g_signal_connect(GTK_OBJECT(button), "clicked", (GtkSignalFunc) xsane_email_entry_rename_button_callback, (void *) 1); ++ g_signal_connect(GTK_OBJECT(button), "clicked", (GtkSignalFunc) xsane_email_entry_rename_button_callback, GINT_TO_POINTER(1)); + gtk_box_pack_start(GTK_BOX(hbox), button, TRUE, TRUE, 0); + gtk_widget_show(button); + +@@ -1526,6 +1536,11 @@ static void xsane_create_email(int fd) + { + DBG(DBG_error, "could not open email project file %s\n", filename); + ++ if (projectfile) ++ { ++ fclose(projectfile); ++ } ++ + if (xsane.email_status) + { + free(xsane.email_status); +@@ -1766,7 +1781,7 @@ static void xsane_create_email(int fd) + + static void xsane_email_send_process() + { +- int fd_socket; ++ int fd_socket = -1; + int status; + char *password; + int i; +@@ -1787,36 +1802,20 @@ static void xsane_email_send_process() + + if (fd_socket < 0) /* could not open socket */ + { +- if (xsane.email_status) +- { +- free(xsane.email_status); +- } + xsane.email_status = strdup(TEXT_EMAIL_STATUS_POP3_CONNECTION_FAILED); +- xsane.email_progress_val = 0.0; +- xsane_front_gtk_email_project_update_lockfile_status(); +- +- free(password); +- +- return; ++ status = -1; ++ goto out; + } + + status = pop3_login(fd_socket, preferences.email_auth_user, password); + + close(fd_socket); ++ fd_socket = -1; + + if (status == -1) + { +- if (xsane.email_status) +- { +- free(xsane.email_status); +- } + xsane.email_status = strdup(TEXT_EMAIL_STATUS_POP3_LOGIN_FAILED); +- xsane.email_progress_val = 0.0; +- xsane_front_gtk_email_project_update_lockfile_status(); +- +- free(password); +- +- return; ++ goto out; + } + + DBG(DBG_info, "POP3 authentication done\n"); +@@ -1829,17 +1828,9 @@ static void xsane_email_send_process() + + if (fd_socket < 0) /* could not open socket */ + { +- if (xsane.email_status) +- { +- free(xsane.email_status); +- } + xsane.email_status = strdup(TEXT_EMAIL_STATUS_SMTP_CONNECTION_FAILED); +- xsane.email_progress_val = 0.0; +- xsane_front_gtk_email_project_update_lockfile_status(); +- +- free(password); +- +- return; ++ status = -1; ++ goto out; + } + + +@@ -1847,7 +1838,8 @@ static void xsane_email_send_process() + preferences.email_authentication, preferences.email_auth_user, password); + if (status == -1) + { +- return; ++ xsane.email_status = strdup(TEXT_EMAIL_STATUS_SMTP_ERR_DATA); ++ goto out; + } + + +@@ -1855,19 +1847,30 @@ static void xsane_email_send_process() + + write_smtp_footer(fd_socket); + +- close(fd_socket); ++out: ++ if (fd_socket >= 0) ++ { ++ close(fd_socket); ++ } + + if (xsane.email_status) + { + free(xsane.email_status); + } +- xsane.email_status = strdup(TEXT_EMAIL_STATUS_SENT); +- xsane.email_progress_val = 1.0; ++ if (status != -1) ++ { ++ xsane.email_status = strdup(TEXT_EMAIL_STATUS_SENT); ++ xsane.email_progress_val = 1.0; ++ } ++ else ++ { ++ xsane.email_progress_val = 0.0; ++ } + xsane_front_gtk_email_project_update_lockfile_status(); + + free(password); + +- _exit(0); ++ _exit(status); + } + + /* ---------------------------------------------------------------------------------------------------------------------- */ +diff --git a/src/xsane-fax-project.c b/src/xsane-fax-project.c +index 5750b55..c08af59 100644 +--- a/src/xsane-fax-project.c ++++ b/src/xsane-fax-project.c +@@ -452,6 +452,12 @@ static void xsane_fax_project_update_project_status() + snprintf(filename, sizeof(filename), "%s/xsane-fax-list", preferences.fax_project); + projectfile = fopen(filename, "r+b"); /* r+ = read and write, position = start of file */ + ++ if (! projectfile) ++ { ++ DBG(DBG_error, "Could not open project file '%s'.\n", filename); ++ return; ++ } ++ + snprintf(buf, 32, "%s@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@", xsane.fax_status); /* fill 32 characters status line */ + fprintf(projectfile, "%s\n", buf); /* first line is status of mail */ + +@@ -754,7 +760,7 @@ static void xsane_fax_entry_rename_button_callback(GtkWidget *widget, gpointer d + { + DBG(DBG_proc, "xsane_fax_entry_rename\n"); + +- xsane_fax_entry_rename = (int) data; ++ xsane_fax_entry_rename = GPOINTER_TO_INT(data); + } + + /* ---------------------------------------------------------------------------------------------------------------------- */ +@@ -805,7 +811,7 @@ static void xsane_fax_entry_rename_callback(GtkWidget *widget, gpointer list) + gtk_window_set_resizable(GTK_WINDOW(rename_dialog), FALSE); + snprintf(filename, sizeof(filename), "%s %s", xsane.prog_name, WINDOW_FAX_RENAME); + gtk_window_set_title(GTK_WINDOW(rename_dialog), filename); +- g_signal_connect(GTK_OBJECT(rename_dialog), "delete_event", (GtkSignalFunc) xsane_fax_entry_rename_button_callback,(void *) -1); ++ g_signal_connect(GTK_OBJECT(rename_dialog), "delete_event", (GtkSignalFunc) xsane_fax_entry_rename_button_callback, GINT_TO_POINTER(-1)); + gtk_widget_show(rename_dialog); + + text = gtk_entry_new(); +@@ -822,7 +828,7 @@ static void xsane_fax_entry_rename_callback(GtkWidget *widget, gpointer list) + #else + button = gtk_button_new_with_label(BUTTON_CANCEL); + #endif +- g_signal_connect(GTK_OBJECT(button), "clicked", (GtkSignalFunc) xsane_fax_entry_rename_button_callback, (void *) -1); ++ g_signal_connect(GTK_OBJECT(button), "clicked", (GtkSignalFunc) xsane_fax_entry_rename_button_callback, GINT_TO_POINTER(-1)); + gtk_box_pack_start(GTK_BOX(hbox), button, TRUE, TRUE, 0); + gtk_widget_show(button); + +@@ -832,7 +838,7 @@ static void xsane_fax_entry_rename_callback(GtkWidget *widget, gpointer list) + #else + button = gtk_button_new_with_label(BUTTON_OK); + #endif +- g_signal_connect(GTK_OBJECT(button), "clicked", (GtkSignalFunc) xsane_fax_entry_rename_button_callback, (void *) 1); ++ g_signal_connect(GTK_OBJECT(button), "clicked", (GtkSignalFunc) xsane_fax_entry_rename_button_callback, GINT_TO_POINTER(1)); + gtk_box_pack_start(GTK_BOX(hbox), button, TRUE, TRUE, 0); + gtk_widget_show(button); + +diff --git a/src/xsane-front-gtk.c b/src/xsane-front-gtk.c +index 7bb49b0..84452f2 100644 +--- a/src/xsane-front-gtk.c ++++ b/src/xsane-front-gtk.c +@@ -598,7 +598,7 @@ gint xsane_authorization_callback(SANE_String_Const resource, + authorize_dialog = gtk_window_new(GTK_WINDOW_TOPLEVEL); + gtk_window_set_position(GTK_WINDOW(authorize_dialog), GTK_WIN_POS_CENTER); + gtk_window_set_resizable(GTK_WINDOW(authorize_dialog), FALSE); +- g_signal_connect(GTK_OBJECT(authorize_dialog), "delete_event", GTK_SIGNAL_FUNC(xsane_authorization_button_callback), (void *) -1); /* -1 = cancel */ ++ g_signal_connect(GTK_OBJECT(authorize_dialog), "delete_event", GTK_SIGNAL_FUNC(xsane_authorization_button_callback), GINT_TO_POINTER(-1)); /* -1 = cancel */ + snprintf(buf, sizeof(buf), "%s %s", xsane.prog_name, WINDOW_AUTHORIZE); + gtk_window_set_title(GTK_WINDOW(authorize_dialog), buf); + xsane_set_window_icon(authorize_dialog, 0); +@@ -667,7 +667,7 @@ gint xsane_authorization_callback(SANE_String_Const resource, + #else + button = gtk_button_new_with_label(BUTTON_CANCEL); + #endif +- g_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(xsane_authorization_button_callback), (void *) -1); ++ g_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(xsane_authorization_button_callback), GINT_TO_POINTER(-1)); + gtk_box_pack_start(GTK_BOX(hbox), button, TRUE, TRUE, 10); /* x-space around cancel-button */ + gtk_widget_show(button); + +@@ -677,7 +677,7 @@ gint xsane_authorization_callback(SANE_String_Const resource, + button = gtk_button_new_with_label(BUTTON_OK); + #endif + GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); +- g_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(xsane_authorization_button_callback), (void *) 1); ++ g_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(xsane_authorization_button_callback), GINT_TO_POINTER(1)); + gtk_box_pack_start(GTK_BOX(hbox), button, TRUE, TRUE, 10); /* x-space around OK-button */ + gtk_widget_grab_default(button); + gtk_widget_show(button); +@@ -1107,7 +1107,7 @@ void xsane_option_menu_new_with_pixmap(GdkWindow *window, GtkBox *parent, const + static void xsane_range_display_value_right_callback(GtkAdjustment *adjust, gpointer data) + { + gchar buf[TEXTBUFSIZE]; +- int digits = (int) data; ++ int digits = GPOINTER_TO_INT(data); + GtkLabel *label; + + snprintf(buf, sizeof(buf), "%1.*f", digits, adjust->value); +@@ -1144,7 +1144,7 @@ void xsane_range_new(GtkBox *parent, char *labeltext, const char *desc, + gtk_widget_set_size_request(value_label, 35, -1); + gtk_box_pack_end(GTK_BOX(hbox), value_label, FALSE, FALSE, 1); + +- g_signal_connect(*data, "value_changed", (GtkSignalFunc) xsane_range_display_value_right_callback, (void *) digits); ++ g_signal_connect(*data, "value_changed", (GtkSignalFunc) xsane_range_display_value_right_callback, GINT_TO_POINTER(digits)); + gtk_object_set_data(GTK_OBJECT(*data), "value-label", value_label); + g_signal_emit_by_name(GTK_OBJECT(*data), "value_changed"); /* update value */ + gtk_widget_show(value_label); +@@ -1236,7 +1236,7 @@ void xsane_range_new_with_pixmap(GdkWindow *window, GtkBox *parent, const char * + gtk_widget_set_size_request(value_label, 35, -1); + gtk_box_pack_end(GTK_BOX(hbox), value_label, FALSE, FALSE, 1); + +- g_signal_connect(*data, "value_changed", (GtkSignalFunc) xsane_range_display_value_right_callback, (void *) digits); ++ g_signal_connect(*data, "value_changed", (GtkSignalFunc) xsane_range_display_value_right_callback, GINT_TO_POINTER(digits)); + gtk_object_set_data(GTK_OBJECT(*data), "value-label", value_label); + g_signal_emit_by_name(GTK_OBJECT(*data), "value_changed"); /* update value */ + gtk_widget_show(value_label); +@@ -1383,7 +1383,7 @@ static void xsane_filename_counter_step_callback(GtkWidget *widget, gpointer dat + { + DBG(DBG_proc, "xsane_filename_counter_step_callback\n"); + +- preferences.filename_counter_step = (int) data; ++ preferences.filename_counter_step = GPOINTER_TO_INT(data); + } + + /* ---------------------------------------------------------------------------------------------------------------------- */ +@@ -1528,7 +1528,7 @@ void xsane_outputfilename_new(GtkWidget *vbox) + snprintf(buf, sizeof(buf), "%+d", j); + xsane_filename_counter_step_item = gtk_menu_item_new_with_label(buf); + gtk_container_add(GTK_CONTAINER(xsane_filename_counter_step_menu), xsane_filename_counter_step_item); +- g_signal_connect(GTK_OBJECT(xsane_filename_counter_step_item), "activate", (GtkSignalFunc) xsane_filename_counter_step_callback, (void *) j); ++ g_signal_connect(GTK_OBJECT(xsane_filename_counter_step_item), "activate", (GtkSignalFunc) xsane_filename_counter_step_callback, GINT_TO_POINTER(j)); + gtk_widget_show(xsane_filename_counter_step_item); + if (preferences.filename_counter_step == j++) + { +@@ -1895,7 +1895,7 @@ static GtkWidget *eula_dialog = NULL; + + static gboolean xsane_eula_delete_event(GtkWidget *widget, GdkEvent *event, gpointer data) + { +- eula_accept_flag = (int) data; ++ eula_accept_flag = GPOINTER_TO_INT(data); + + DBG(DBG_proc ,"xsane_eula_delete_event(%d)\n", eula_accept_flag); + eula_dialog = NULL; +@@ -1907,7 +1907,7 @@ static gboolean xsane_eula_delete_event(GtkWidget *widget, GdkEvent *event, gpoi + + static void xsane_eula_button_callback(GtkWidget *widget, gpointer data) + { +- eula_accept_flag = (int) data; ++ eula_accept_flag = GPOINTER_TO_INT(data); + + DBG(DBG_proc ,"xsane_eula_button_callback(%d)\n", eula_accept_flag); + +@@ -1937,7 +1937,7 @@ int xsane_display_eula(int ask_for_accept) + gtk_widget_set_size_request(eula_dialog, 550, 580); + gtk_window_set_position(GTK_WINDOW(eula_dialog), GTK_WIN_POS_CENTER); + gtk_window_set_resizable(GTK_WINDOW(eula_dialog), TRUE); +- g_signal_connect(GTK_OBJECT(eula_dialog), "delete_event", GTK_SIGNAL_FUNC(xsane_eula_delete_event), (void *) -1); /* -1 = cancel */ ++ g_signal_connect(GTK_OBJECT(eula_dialog), "delete_event", GTK_SIGNAL_FUNC(xsane_eula_delete_event), GINT_TO_POINTER(-1)); /* -1 = cancel */ + snprintf(buf, sizeof(buf), "%s %s", xsane.prog_name, WINDOW_EULA); + gtk_window_set_title(GTK_WINDOW(eula_dialog), buf); + accelerator_group = gtk_accel_group_new(); +@@ -2090,13 +2090,13 @@ int xsane_display_eula(int ask_for_accept) + button = gtk_button_new_with_label(BUTTON_NOT_ACCEPT); + gtk_widget_add_accelerator(button, "clicked", accelerator_group, GDK_Escape, 0, DEF_GTK_ACCEL_LOCKED); + GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); +- g_signal_connect(GTK_OBJECT(button), "clicked", (GtkSignalFunc) xsane_eula_button_callback, (void *) 1 /* not accept */); ++ g_signal_connect(GTK_OBJECT(button), "clicked", (GtkSignalFunc) xsane_eula_button_callback, GINT_TO_POINTER(1) /* not accept */); + gtk_container_add(GTK_CONTAINER(hbox), button); + gtk_widget_grab_default(button); + gtk_widget_show(button); + + button = gtk_button_new_with_label(BUTTON_ACCEPT); +- g_signal_connect(GTK_OBJECT(button), "clicked", (GtkSignalFunc) xsane_eula_button_callback, (void *) 0 /* accept */); ++ g_signal_connect(GTK_OBJECT(button), "clicked", (GtkSignalFunc) xsane_eula_button_callback, GINT_TO_POINTER(0) /* accept */); + gtk_container_add(GTK_CONTAINER(hbox), button); + gtk_widget_show(button); + } +@@ -2109,7 +2109,7 @@ int xsane_display_eula(int ask_for_accept) + #endif + gtk_widget_add_accelerator(button, "clicked", accelerator_group, GDK_Escape, 0, DEF_GTK_ACCEL_LOCKED); + GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); +- g_signal_connect(GTK_OBJECT(button), "clicked", (GtkSignalFunc) xsane_eula_button_callback, (void *) 0 /* ok = accept */); ++ g_signal_connect(GTK_OBJECT(button), "clicked", (GtkSignalFunc) xsane_eula_button_callback, GINT_TO_POINTER(0) /* ok = accept */); + gtk_container_add(GTK_CONTAINER(hbox), button); + gtk_widget_grab_default(button); + gtk_widget_show(button); +@@ -2336,7 +2336,7 @@ void xsane_display_gpl(void) + #endif + gtk_widget_add_accelerator(button, "clicked", accelerator_group, GDK_Escape, 0, DEF_GTK_ACCEL_LOCKED); + GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); +- g_signal_connect(GTK_OBJECT(button), "clicked", (GtkSignalFunc) xsane_close_license_dialog_callback, (void *) 0 /* ok = accept */); ++ g_signal_connect(GTK_OBJECT(button), "clicked", (GtkSignalFunc) xsane_close_license_dialog_callback, GINT_TO_POINTER(0) /* ok = accept */); + gtk_container_add(GTK_CONTAINER(hbox), button); + gtk_widget_grab_default(button); + gtk_widget_show(button); +@@ -2414,7 +2414,7 @@ static void xsane_front_gtk_getname_button_callback(GtkWidget *widget, gpointer + { + DBG(DBG_proc, "xsane_front_gtk_getname_button_callback\n"); + +- xsane_front_gtk_getname_button = (int) data; ++ xsane_front_gtk_getname_button = GPOINTER_TO_INT(data); + } + + /* ---------------------------------------------------------------------------------------------------------------------- */ +@@ -2438,7 +2438,7 @@ int xsane_front_gtk_getname_dialog(const char *dialog_title, const char *desc_te + gtk_window_set_resizable(GTK_WINDOW(getname_dialog), FALSE); + snprintf(buf, sizeof(buf), "%s %s", xsane.prog_name, dialog_title); + gtk_window_set_title(GTK_WINDOW(getname_dialog), buf); +- g_signal_connect(GTK_OBJECT(getname_dialog), "delete_event", (GtkSignalFunc) xsane_front_gtk_getname_button_callback, (void *) -1); ++ g_signal_connect(GTK_OBJECT(getname_dialog), "delete_event", (GtkSignalFunc) xsane_front_gtk_getname_button_callback, GINT_TO_POINTER(-1)); + gtk_widget_show(getname_dialog); + + /* set the main vbox */ +@@ -2469,7 +2469,7 @@ int xsane_front_gtk_getname_dialog(const char *dialog_title, const char *desc_te + #else + button = gtk_button_new_with_label(BUTTON_CANCEL); + #endif +- g_signal_connect(GTK_OBJECT(button), "clicked", (GtkSignalFunc) xsane_front_gtk_getname_button_callback, (void *) -1); ++ g_signal_connect(GTK_OBJECT(button), "clicked", (GtkSignalFunc) xsane_front_gtk_getname_button_callback, GINT_TO_POINTER(-1)); + gtk_widget_add_accelerator(button, "clicked", accelerator_group, GDK_Escape, 0, DEF_GTK_ACCEL_LOCKED); /* ESC */ + gtk_box_pack_start(GTK_BOX(hbox), button, TRUE, TRUE, 0); + gtk_widget_show(button); +@@ -2479,7 +2479,7 @@ int xsane_front_gtk_getname_dialog(const char *dialog_title, const char *desc_te + #else + button = gtk_button_new_with_label(BUTTON_OK); + #endif +- g_signal_connect(GTK_OBJECT(button), "clicked", (GtkSignalFunc) xsane_front_gtk_getname_button_callback, (void *) 1); ++ g_signal_connect(GTK_OBJECT(button), "clicked", (GtkSignalFunc) xsane_front_gtk_getname_button_callback, GINT_TO_POINTER(1)); + GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); + gtk_box_pack_start(GTK_BOX(hbox), button, TRUE, TRUE, 0); + gtk_widget_show(button); +@@ -2580,9 +2580,9 @@ void xsane_front_gtk_email_project_update_lockfile_status() + { + fprintf(lockfile, "%s\n", xsane.email_status); /* first line is status of mail */ + fprintf(lockfile, "%3d\n", (int) (xsane.email_progress_val * 100)); +- } + +- fclose(lockfile); ++ fclose(lockfile); ++ } + } + #endif + /* ---------------------------------------------------------------------------------------------------------------------- */ +diff --git a/src/xsane-multipage-project.c b/src/xsane-multipage-project.c +index f23e5f8..af3c6cc 100644 +--- a/src/xsane-multipage-project.c ++++ b/src/xsane-multipage-project.c +@@ -517,6 +517,11 @@ void xsane_multipage_project_save() + } + + projectfile = fopen(filename, "wb"); /* write binary (b for win32) */ ++ if (!projectfile) ++ { ++ DBG(DBG_error, "Could not open project file '%s'.\n", filename); ++ return; ++ } + + if (xsane.multipage_status) + { +diff --git a/src/xsane-preview.c b/src/xsane-preview.c +index 6eaf687..ef26098 100644 +--- a/src/xsane-preview.c ++++ b/src/xsane-preview.c +@@ -4112,7 +4112,7 @@ static void preview_create_preset_area_menu(Preview *p, int selection) + gtk_container_add(GTK_CONTAINER(preset_area_menu), preset_area_item); + g_signal_connect(GTK_OBJECT(preset_area_item), "button_press_event", (GtkSignalFunc) preview_preset_area_context_menu_callback, p); + g_signal_connect(GTK_OBJECT(preset_area_item), "activate", (GtkSignalFunc) preview_preset_area_callback, p); +- gtk_object_set_data(GTK_OBJECT(preset_area_item), "Selection", (void *) i); ++ gtk_object_set_data(GTK_OBJECT(preset_area_item), "Selection", GINT_TO_POINTER(i)); + gtk_object_set_data(GTK_OBJECT(preset_area_item), "Preview", (void *) p); + + gtk_widget_show(preset_area_item); +@@ -4468,7 +4468,7 @@ Preview *preview_new(void) + rotation_item = gtk_menu_item_new_with_label(buf); + gtk_container_add(GTK_CONTAINER(rotation_menu), rotation_item); + g_signal_connect(GTK_OBJECT(rotation_item), "activate", (GtkSignalFunc) preview_rotation_callback, p); +- gtk_object_set_data(GTK_OBJECT(rotation_item), "Selection", (void *) rot); ++ gtk_object_set_data(GTK_OBJECT(rotation_item), "Selection", GINT_TO_POINTER(rot)); + + gtk_widget_show(rotation_item); + } +@@ -5145,11 +5145,11 @@ static void preview_save_image_file(Preview *p, FILE *out) + /* always save it as a 16 bit PPM image: */ + fprintf(out, "P6\n" + "# surface: %g %g %g %g %u %u\n" +- "# time: %d\n" ++ "# time: %ld\n" + "%d %d\n65535\n", + dsurface[0], dsurface[1], dsurface[2], dsurface[3], + p->surface_type, p->surface_unit, +- (int) time(NULL), ++ (long) time(NULL), + p->image_width, p->image_height); + + fwrite(p->image_data_raw, 6, p->image_width*p->image_height, out); +@@ -5711,14 +5711,14 @@ static gint preview_preset_area_rename_callback(GtkWidget *widget, GtkWidget *pr + + DBG(DBG_proc, "preview_preset_area_rename_callback\n"); + +- selection = (int) gtk_object_get_data(GTK_OBJECT(preset_area_widget), "Selection"); ++ selection = GPOINTER_TO_INT(gtk_object_get_data(GTK_OBJECT(preset_area_widget), "Selection")); + p = (Preview *) gtk_object_get_data(GTK_OBJECT(preset_area_widget), "Preview"); + + DBG(DBG_info ,"rename %s\n", preferences.preset_area[selection]->name); + + /* set menu in correct state, is a bit strange this way but I do not have a better idea */ + old_preset_area_menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(p->preset_area_option_menu)); +- old_selection = (int) gtk_object_get_data(GTK_OBJECT(gtk_menu_get_active(GTK_MENU(old_preset_area_menu))), "Selection"); ++ old_selection = GPOINTER_TO_INT(gtk_object_get_data(GTK_OBJECT(gtk_menu_get_active(GTK_MENU(old_preset_area_menu))), "Selection")); + gtk_menu_popdown(GTK_MENU(old_preset_area_menu)); + gtk_option_menu_set_history(GTK_OPTION_MENU(p->preset_area_option_menu), old_selection); + +@@ -5761,12 +5761,12 @@ static gint preview_preset_area_add_callback(GtkWidget *widget, GtkWidget *prese + + DBG(DBG_proc, "preview_preset_area_add_callback\n"); + +- selection = (int) gtk_object_get_data(GTK_OBJECT(preset_area_widget), "Selection"); ++ selection = GPOINTER_TO_INT(gtk_object_get_data(GTK_OBJECT(preset_area_widget), "Selection")); + p = (Preview *) gtk_object_get_data(GTK_OBJECT(preset_area_widget), "Preview"); + + /* set menu in correct state, is a bit strange this way but I do not have a better idea */ + old_preset_area_menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(p->preset_area_option_menu)); +- old_selection = (int) gtk_object_get_data(GTK_OBJECT(gtk_menu_get_active(GTK_MENU(old_preset_area_menu))), "Selection"); ++ old_selection = GPOINTER_TO_INT(gtk_object_get_data(GTK_OBJECT(gtk_menu_get_active(GTK_MENU(old_preset_area_menu))), "Selection")); + gtk_menu_popdown(GTK_MENU(old_preset_area_menu)); + gtk_option_menu_set_history(GTK_OPTION_MENU(p->preset_area_option_menu), old_selection); + +@@ -5812,7 +5812,7 @@ static gint preview_preset_area_delete_callback(GtkWidget *widget, GtkWidget *pr + + DBG(DBG_proc, "preview_preset_area_delete_callback\n"); + +- selection = (int) gtk_object_get_data(GTK_OBJECT(preset_area_widget), "Selection"); ++ selection = GPOINTER_TO_INT(gtk_object_get_data(GTK_OBJECT(preset_area_widget), "Selection")); + p = (Preview *) gtk_object_get_data(GTK_OBJECT(preset_area_widget), "Preview"); + + +@@ -5832,7 +5832,7 @@ static gint preview_preset_area_delete_callback(GtkWidget *widget, GtkWidget *pr + old_preset_area_menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(p->preset_area_option_menu)); + + gtk_option_menu_remove_menu(GTK_OPTION_MENU(p->preset_area_option_menu)); +- old_selection = (int) gtk_object_get_data(GTK_OBJECT(gtk_menu_get_active(GTK_MENU(old_preset_area_menu))), "Selection"); ++ old_selection = GPOINTER_TO_INT(gtk_object_get_data(GTK_OBJECT(gtk_menu_get_active(GTK_MENU(old_preset_area_menu))), "Selection")); + + if (old_selection == selection) /* we are deleting the selected surface */ + { +@@ -5861,7 +5861,7 @@ static gint preview_preset_area_move_up_callback(GtkWidget *widget, GtkWidget *p + + DBG(DBG_proc, "preview_preset_area_move_up_callback\n"); + +- selection = (int) gtk_object_get_data(GTK_OBJECT(preset_area_widget), "Selection"); ++ selection = GPOINTER_TO_INT(gtk_object_get_data(GTK_OBJECT(preset_area_widget), "Selection")); + p = (Preview *) gtk_object_get_data(GTK_OBJECT(preset_area_widget), "Preview"); + + if (selection > 1) /* make sure "full area" stays at top */ +@@ -5877,7 +5877,7 @@ static gint preview_preset_area_move_up_callback(GtkWidget *widget, GtkWidget *p + old_preset_area_menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(p->preset_area_option_menu)); + + gtk_option_menu_remove_menu(GTK_OPTION_MENU(p->preset_area_option_menu)); +- old_selection = (int) gtk_object_get_data(GTK_OBJECT(gtk_menu_get_active(GTK_MENU(old_preset_area_menu))), "Selection"); ++ old_selection = GPOINTER_TO_INT(gtk_object_get_data(GTK_OBJECT(gtk_menu_get_active(GTK_MENU(old_preset_area_menu))), "Selection")); + + if (old_selection == selection) + { +@@ -5906,7 +5906,7 @@ static gint preview_preset_area_move_down_callback(GtkWidget *widget, GtkWidget + + DBG(DBG_proc, "preview_preset_area_move_down_callback\n"); + +- selection = (int) gtk_object_get_data(GTK_OBJECT(preset_area_widget), "Selection"); ++ selection = GPOINTER_TO_INT(gtk_object_get_data(GTK_OBJECT(preset_area_widget), "Selection")); + p = (Preview *) gtk_object_get_data(GTK_OBJECT(preset_area_widget), "Preview"); + + /* full size can not moved down */ +@@ -5923,7 +5923,7 @@ static gint preview_preset_area_move_down_callback(GtkWidget *widget, GtkWidget + old_preset_area_menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(p->preset_area_option_menu)); + + gtk_option_menu_remove_menu(GTK_OPTION_MENU(p->preset_area_option_menu)); +- old_selection = (int) gtk_object_get_data(GTK_OBJECT(gtk_menu_get_active(GTK_MENU(old_preset_area_menu))), "Selection"); ++ old_selection = GPOINTER_TO_INT(gtk_object_get_data(GTK_OBJECT(gtk_menu_get_active(GTK_MENU(old_preset_area_menu))), "Selection")); + + if (old_selection == selection) + { +@@ -5954,7 +5954,7 @@ static gint preview_preset_area_context_menu_callback(GtkWidget *widget, GdkEven + + DBG(DBG_proc, "preview_preset_area_context_menu_callback\n"); + +- selection = (int) gtk_object_get_data(GTK_OBJECT(widget), "Selection"); ++ selection = GPOINTER_TO_INT(gtk_object_get_data(GTK_OBJECT(widget), "Selection")); + + if (event->type == GDK_BUTTON_PRESS) + { +@@ -6031,7 +6031,7 @@ static void preview_preset_area_callback(GtkWidget *widget, gpointer data) + + DBG(DBG_proc, "preview_preset_area_callback\n"); + +- selection = (int) gtk_object_get_data(GTK_OBJECT(widget), "Selection"); ++ selection = GPOINTER_TO_INT(gtk_object_get_data(GTK_OBJECT(widget), "Selection")); + + p->preset_surface[0] = preferences.preset_area[selection]->xoffset; + p->preset_surface[1] = preferences.preset_area[selection]->yoffset; +@@ -6055,7 +6055,7 @@ static void preview_rotation_callback(GtkWidget *widget, gpointer data) + + DBG(DBG_proc, "preview_rotation_callback\n"); + +- rot = (int) gtk_object_get_data(GTK_OBJECT(widget), "Selection"); ++ rot = GPOINTER_TO_INT(gtk_object_get_data(GTK_OBJECT(widget), "Selection")); + + switch (rot) + { +diff --git a/src/xsane-save.c b/src/xsane-save.c +index 2d0e44b..31825d8 100644 +--- a/src/xsane-save.c ++++ b/src/xsane-save.c +@@ -28,6 +28,8 @@ + #include "xsane-save.h" + #include <time.h> + #include <sys/wait.h> ++#include <string.h> ++#include <errno.h> + + #include <glib.h> + +@@ -138,7 +140,7 @@ int xsane_create_secure_file(const char *filename) + fd = open(filename, O_WRONLY | O_CREAT | O_EXCL, 0666); + umask(XSANE_DEFAULT_UMASK); /* define new file permissions */ + +- if (fd > 0) ++ if (fd >= 0) + { + DBG(DBG_info, "file %s is created and secure\n", filename); + close(fd); +@@ -261,22 +263,27 @@ int xsane_get_filesize(char *filename) + { + FILE *infile; + int pos; +- int size; ++ int size = -1; + + infile = fopen(filename, "rb"); /* read binary (b for win32) */ + if (infile == NULL) + { +- return 0; ++ return 0; + } + +- pos = ftell(infile); ++ if ((pos = ftell(infile)) < 0) ++ { ++ DBG(DBG_error, "xsane_get_filesize(): can't get file position\n"); ++ goto out; ++ } + fseek(infile, 0, SEEK_END); /* get size */ + size = ftell(infile); + fseek(infile, pos, SEEK_SET); /* go to previous position */ + ++out: + fclose(infile); + +- return size; ++ return size; + } + + /* ---------------------------------------------------------------------------------------------------------------------- */ +@@ -959,7 +966,8 @@ cmsHTRANSFORM xsane_create_cms_transform(Image_info *image_info, int cms_functio + int xsane_save_grayscale_image_as_lineart(FILE *outfile, FILE *imagefile, Image_info *image_info, GtkProgressBar *progress_bar, int *cancel_save) + { + int x, y, bit; +- u_char bitval, packed; ++ int bitval; ++ u_char packed; + + *cancel_save = 0; + +@@ -1107,7 +1115,7 @@ int xsane_save_scaled_image(FILE *outfile, FILE *imagefile, Image_info *image_in + y_factor = 1.0; + y = 0.0; + +- while (y < original_image_height) ++ do + { + DBG(DBG_info2, "xsane_save_scaled_image: original line %d, new line %d\n", (int) y, y_new); + +@@ -1233,6 +1241,7 @@ int xsane_save_scaled_image(FILE *outfile, FILE *imagefile, Image_info *image_in + y += y_factor; + read_line = (oldy != (int) y); + } ++ while (y < original_image_height); + + if (read_line) /* we have to write one more line */ + { +@@ -3784,7 +3793,8 @@ int xsane_save_ps(FILE *outfile, FILE *imagefile, Image_info *image_info, float + static int xsane_embed_pdf_icm_profile(FILE *outfile, struct pdf_xref *xref, char *icm_filename, int flatedecode, int icc_object) + { + FILE *icm_profile; +- size_t size, embed_len; ++ ssize_t size; ++ size_t embed_len; + unsigned char *embed_buffer; + int ret; + +@@ -3798,7 +3808,12 @@ static int xsane_embed_pdf_icm_profile(FILE *outfile, struct pdf_xref *xref, cha + } + + fseek(icm_profile, 0, SEEK_END); +- size = ftell(icm_profile); ++ if ((size = ftell(icm_profile)) < 0) ++ { ++ DBG(DBG_error, "Could not determine size of ICM profile file."); ++ fclose(icm_profile); ++ return -1; ++ } + fseek(icm_profile, 0, SEEK_SET); + + embed_buffer = malloc(size + 1); +@@ -4374,7 +4389,8 @@ static void xsane_jpeg_write_icm_profile(j_compress_ptr cinfo_ptr, const JOCTET + static void xsane_jpeg_embed_scanner_icm_profile(j_compress_ptr cinfo_ptr, const char *icm_filename) + { + FILE *icm_profile; +- size_t size, embed_len; ++ ssize_t size; ++ size_t embed_len; + cmsUInt8Number *embed_buffer; + + DBG(DBG_proc, "xsane_jpeg_embed_scanner_icm_profile(%s)\n", icm_filename); +@@ -4385,15 +4401,19 @@ static void xsane_jpeg_embed_scanner_icm_profile(j_compress_ptr cinfo_ptr, const + return; + } + +- fseek(icm_profile, 0, SEEK_END); +- size = ftell(icm_profile); +- fseek(icm_profile, 0, SEEK_SET); ++ if ((fseek(icm_profile, 0, SEEK_END) < 0) || ++ ((size = ftell(icm_profile)) < 0) || ++ (fseek(icm_profile, 0, SEEK_SET) < 0)) ++ { ++ DBG(DBG_error, "Can't determine size of ICM profile file '%s': '%s'", ++ icm_filename, strerror(errno)); ++ goto out; ++ } + + embed_buffer = (cmsUInt8Number *) malloc(size + 1); + if (embed_buffer) + { + embed_len = fread(embed_buffer, 1, size, icm_profile); +- fclose(icm_profile); + embed_buffer[embed_len] = 0; + + xsane_jpeg_write_icm_profile(cinfo_ptr, embed_buffer, embed_len); +@@ -4401,6 +4421,9 @@ static void xsane_jpeg_embed_scanner_icm_profile(j_compress_ptr cinfo_ptr, const + + DBG(DBG_info, "ICM profile %s has been embedded to jpeg file\n", icm_filename); + } ++ ++out: ++ fclose(icm_profile); + } + #endif + +@@ -4606,15 +4629,20 @@ int xsane_save_jpeg(FILE *outfile, int quality, FILE *imagefile, Image_info *ima + static void xsane_tiff_embed_scanner_icm_profile(TIFF *tiffile, const char *icm_filename) + { + FILE *icm_profile; +- size_t size; ++ ssize_t size; + char *icm_profile_buffer; + + DBG(DBG_proc, "xsane_tiff_embed_scanner_icm_profile(%s)\n", icm_filename); + if((icm_profile = fopen(icm_filename, "rb"))) + { +- fseek(icm_profile, 0, SEEK_END); +- size = ftell(icm_profile); +- fseek(icm_profile, 0, SEEK_SET); ++ if ((fseek(icm_profile, 0, SEEK_END) < 0) || ++ ((size = ftell(icm_profile)) < 0) || ++ (fseek(icm_profile, 0, SEEK_SET) < 0)) ++ { ++ DBG(DBG_error, "Can't determine size of ICM profile file '%s': '%s'", ++ icm_filename, strerror(errno)); ++ goto out; ++ } + + icm_profile_buffer = (char *) malloc(size + 1); + +@@ -4638,7 +4666,7 @@ static void xsane_tiff_embed_scanner_icm_profile(TIFF *tiffile, const char *icm_ + DBG(DBG_error, "Can not get enogh memory for ICM profile\n"); + } + +- ++out: + fclose(icm_profile); + } + else +@@ -4869,17 +4897,22 @@ int xsane_save_tiff_page(TIFF *tiffile, int page, int pages, int quality, FILE * + static void xsane_png_embed_scanner_icm_profile(png_structp png_ptr, png_infop png_info_ptr, const char *icm_filename) + { + FILE *icm_profile; +- gchar *profile_buffer; +- size_t size; ++ guchar *profile_buffer; ++ ssize_t size; + + DBG(DBG_proc, "xsane_png_embed_scanner_icm_profile(%s)\n", icm_filename); + icm_profile = fopen(icm_filename, "rb"); + + if (icm_profile) + { +- fseek(icm_profile, 0, SEEK_END); +- size = ftell(icm_profile); +- fseek(icm_profile, 0, SEEK_SET); ++ if ((fseek(icm_profile, 0, SEEK_END) < 0) || ++ ((size = ftell(icm_profile)) < 0) || ++ (fseek(icm_profile, 0, SEEK_SET) < 0)) ++ { ++ DBG(DBG_error, "Can't determine size of ICM profile file '%s': '%s'", ++ icm_filename, strerror(errno)); ++ goto out; ++ } + + profile_buffer = malloc(size); + +@@ -4901,6 +4934,7 @@ static void xsane_png_embed_scanner_icm_profile(png_structp png_ptr, png_infop p + DBG(DBG_error, "can not allocate profile_buffer\n"); + } + ++out: + fclose(icm_profile); + } + else +@@ -5416,7 +5450,7 @@ static int xsane_save_pnm_16_ascii_color(FILE *outfile, FILE *imagefile, Image_i + *cancel_save = 0; + + +- data = malloc(image_info->image_width * 6); ++ data = malloc((guint32)image_info->image_width * 6); + + if (!data) + { +@@ -5432,7 +5466,7 @@ static int xsane_save_pnm_16_ascii_color(FILE *outfile, FILE *imagefile, Image_i + { + DBG(DBG_info, "Doing CMS color conversion\n"); + +- data_raw = malloc(image_info->image_width * 6); ++ data_raw = malloc((guint32)image_info->image_width * 6); + + if (!data_raw) + { +@@ -5622,7 +5656,7 @@ static int xsane_save_pnm_16_binary_color(FILE *outfile, FILE *imagefile, Image_ + + *cancel_save = 0; + +- data = malloc(image_info->image_width * 6); ++ data = malloc((guint32)image_info->image_width * 6); + + if (!data) + { +@@ -5638,7 +5672,7 @@ static int xsane_save_pnm_16_binary_color(FILE *outfile, FILE *imagefile, Image_ + { + DBG(DBG_info, "Doing CMS color conversion\n"); + +- data_raw = malloc(image_info->image_width * 6); ++ data_raw = malloc((guint32)image_info->image_width * 6); + + if (!data_raw) + { +@@ -6159,6 +6193,8 @@ int xsane_save_image_as_text(char *output_filename, char *input_filename, GtkPro + + gtk_progress_set_format_string(GTK_PROGRESS(progress_bar), ""); + xsane_progress_bar_set_fraction(GTK_PROGRESS_BAR(progress_bar), 0.0); ++ ++ fclose(ocr_progress); /* close reading end of pipe */ + } + else /* no pipe available */ + { +@@ -6178,11 +6214,6 @@ int xsane_save_image_as_text(char *output_filename, char *input_filename, GtkPro + } + } + } +- +- if (pipefd[0]) +- { +- fclose(ocr_progress); /* close reading end of pipe */ +- } + + return (*cancel_save); + } +@@ -6784,11 +6815,12 @@ int xsane_transfer_to_gimp(char *input_filename, int apply_ICM_profile, int cms_ + unsigned tile_offset; + int i, x, y; + Image_info image_info; +- FILE *imagefile; ++ FILE *imagefile = NULL; + int bytes; + unsigned char *data = NULL; + guint16 *data16 = NULL; + size_t bytes_read; ++ int retval = 0; + #ifdef HAVE_LIBLCMS + unsigned char *data_raw = NULL; + cmsHTRANSFORM hTransform = NULL; +@@ -6799,13 +6831,13 @@ int xsane_transfer_to_gimp(char *input_filename, int apply_ICM_profile, int cms_ + *cancel_save = 0; + + imagefile = fopen(input_filename, "rb"); /* read binary (b for win32) */ +- if (imagefile == 0) ++ if (!imagefile) + { + char buf[TEXTBUFSIZE]; + snprintf(buf, sizeof(buf), "%s `%s': %s", ERR_OPEN_FAILED, input_filename, strerror(errno)); + xsane_back_gtk_error(buf, TRUE); +- +- return -1; ++ retval = -1; ++ goto out; + } + + xsane_read_pnm_header(imagefile, &image_info); +@@ -6828,7 +6860,8 @@ int xsane_transfer_to_gimp(char *input_filename, int apply_ICM_profile, int cms_ + + snprintf(buf, sizeof(buf), "%s %s", ERR_DURING_SAVE, ERR_NO_MEM); + xsane_back_gtk_error(buf, TRUE); +- return -1; /* error */ ++ retval = -1; /* error */ ++ goto out; + } + + #ifdef HAVE_LIBLCMS +@@ -6847,11 +6880,10 @@ int xsane_transfer_to_gimp(char *input_filename, int apply_ICM_profile, int cms_ + { + char buf[TEXTBUFSIZE]; + +- free(data); +- + snprintf(buf, sizeof(buf), "%s %s", ERR_DURING_SAVE, ERR_NO_MEM); + xsane_back_gtk_error(buf, TRUE); +- return -1; /* error */ ++ retval = -1; /* error */ ++ goto out; + } + } + #endif +@@ -6892,6 +6924,11 @@ int xsane_transfer_to_gimp(char *input_filename, int apply_ICM_profile, int cms_ + { + fseek(icm_profile, 0, SEEK_END); + size = ftell(icm_profile); ++ if (size < 0) ++ { ++ DBG(DBG_error, "xsane_transfer_to_gimp(): can't tell file position"); ++ goto out; ++ } + fseek(icm_profile, 0, SEEK_SET); + + profile_buffer = malloc(size); +@@ -6949,7 +6986,7 @@ int xsane_transfer_to_gimp(char *input_filename, int apply_ICM_profile, int cms_ + case 1: /* 1 bit gray => conversion to 8 bit gray */ + for (i = 0; i < ( (image_info.image_width + 7) / 8) * image_info.image_height; ++i) + { +- u_char mask; ++ int mask; + int j; + + mask = fgetc(imagefile); +@@ -7219,7 +7256,7 @@ int xsane_transfer_to_gimp(char *input_filename, int apply_ICM_profile, int cms_ + g_free(tile); + tile = 0; + +- fclose(imagefile); ++out: + + #ifdef HAVE_LIBLCMS + if (hTransform != NULL) +@@ -7232,9 +7269,18 @@ int xsane_transfer_to_gimp(char *input_filename, int apply_ICM_profile, int cms_ + free(data_raw); + } + #endif +- free(data); + +- return 0; ++ if (imagefile) ++ { ++ fclose(imagefile); ++ } ++ ++ if (data) ++ { ++ free(data); ++ } ++ ++ return retval; + } + #endif /* HAVE_ANY_GIMP */ + +@@ -7617,7 +7663,7 @@ int pop3_login(int fd_socket, char *user, char *passwd) + int len; + ssize_t bytes_written; + +- len = read(fd_socket, buf, sizeof(buf)); ++ len = read(fd_socket, buf, sizeof(buf) - 1); + if (len >= 0) + { + buf[len] = 0; +@@ -7627,7 +7673,7 @@ int pop3_login(int fd_socket, char *user, char *passwd) + snprintf(buf, sizeof(buf), "USER %s\r\n", user); + DBG(DBG_info2, "> USER xxx\n"); + bytes_written = write(fd_socket, buf, strlen(buf)); +- len = read(fd_socket, buf, sizeof(buf)); ++ len = read(fd_socket, buf, sizeof(buf) - 1); + if (len >= 0) + { + buf[len] = 0; +@@ -7641,7 +7687,7 @@ int pop3_login(int fd_socket, char *user, char *passwd) + snprintf(buf, sizeof(buf), "PASS %s\r\n", passwd); + DBG(DBG_info2, "> PASS xxx\n"); + bytes_written = write(fd_socket, buf, strlen(buf)); +- len = read(fd_socket, buf, sizeof(buf)); ++ len = read(fd_socket, buf, sizeof(buf) - 1); + if (len >= 0) + { + buf[len] = 0; +@@ -7655,7 +7701,7 @@ int pop3_login(int fd_socket, char *user, char *passwd) + snprintf(buf, sizeof(buf), "QUIT\r\n"); + DBG(DBG_info2, "> QUIT\n"); + bytes_written = write(fd_socket, buf, strlen(buf)); +- len = read(fd_socket, buf, sizeof(buf)); ++ len = read(fd_socket, buf, sizeof(buf) - 1); + if (len >= 0) + { + buf[len] = 0; +@@ -7683,7 +7729,7 @@ int asmtp_authentication(int fd_socket, int auth_type, char *user, char *passwd) + bytes_written = write(fd_socket, buf, strlen(buf)); + snprintf(buf, sizeof(buf), "%c%s%c%s", 0, user, 0, passwd); + write_string_base64(fd_socket, buf, strlen(user)+strlen(passwd)+2); +- len = read(fd_socket, buf, sizeof(buf)); ++ len = read(fd_socket, buf, sizeof(buf) - 1); + if (len >= 0) + { + buf[len] = 0; +@@ -7695,7 +7741,7 @@ int asmtp_authentication(int fd_socket, int auth_type, char *user, char *passwd) + snprintf(buf, sizeof(buf), "AUTH LOGIN\r\n"); + DBG(DBG_info2, "> %s", buf); + bytes_written = write(fd_socket, buf, strlen(buf)); +- len = read(fd_socket, buf, sizeof(buf)); ++ len = read(fd_socket, buf, sizeof(buf) - 1); + if (len >= 0) + { + buf[len] = 0; +@@ -7710,7 +7756,7 @@ int asmtp_authentication(int fd_socket, int auth_type, char *user, char *passwd) + DBG(DBG_info2, "> (USERNAME)\n"); + write_string_base64(fd_socket, user, strlen(user)); + +- len = read(fd_socket, buf, sizeof(buf)); ++ len = read(fd_socket, buf, sizeof(buf) - 1); + if (len >= 0) + { + buf[len] = 0; +@@ -7725,7 +7771,7 @@ int asmtp_authentication(int fd_socket, int auth_type, char *user, char *passwd) + DBG(DBG_info2, "> (PASSWORD)\n"); + write_string_base64(fd_socket, passwd, strlen(passwd)); + +- len = read(fd_socket, buf, sizeof(buf)); ++ len = read(fd_socket, buf, sizeof(buf) - 1); + if (len >= 0) + { + buf[len] = 0; +@@ -7743,7 +7789,7 @@ int asmtp_authentication(int fd_socket, int auth_type, char *user, char *passwd) + snprintf(buf, sizeof(buf), "AUTH CRAM-MD5\r\n"); + DBG(DBG_info2, "> %s", buf); + bytes_written = write(fd_socket, buf, strlen(buf)); +- len = read(fd_socket, buf, sizeof(buf)); ++ len = read(fd_socket, buf, sizeof(buf) - 1); + if (len >= 0) + { + buf[len] = 0; +@@ -7773,7 +7819,7 @@ int write_smtp_header(int fd_socket, char *from, char *to, int auth_type, char * + char *pos = NULL; + ssize_t bytes_written; + +- len = read(fd_socket, buf, sizeof(buf)); ++ len = read(fd_socket, buf, sizeof(buf) - 1); + if (len >= 0) + { + buf[len] = 0; +@@ -7790,7 +7836,7 @@ int write_smtp_header(int fd_socket, char *from, char *to, int auth_type, char * + } + DBG(DBG_info2, "> %s", buf); + bytes_written = write(fd_socket, buf, strlen(buf)); +- len = read(fd_socket, buf, sizeof(buf)); ++ len = read(fd_socket, buf, sizeof(buf) - 1); + if (len >= 0) + { + buf[len] = 0; +@@ -7824,7 +7870,7 @@ int write_smtp_header(int fd_socket, char *from, char *to, int auth_type, char * + snprintf(buf, sizeof(buf), "MAIL FROM: <%s>\r\n", from); + DBG(DBG_info2, "> %s", buf); + bytes_written = write(fd_socket, buf, strlen(buf)); +- len = read(fd_socket, buf, sizeof(buf)); ++ len = read(fd_socket, buf, sizeof(buf) - 1); + if (len >= 0) + { + buf[len] = 0; +@@ -7864,7 +7910,7 @@ int write_smtp_header(int fd_socket, char *from, char *to, int auth_type, char * + + DBG(DBG_info2, "> %s", buf); + bytes_written = write(fd_socket, buf, strlen(buf)); +- len = read(fd_socket, buf, sizeof(buf)); ++ len = read(fd_socket, buf, sizeof(buf) - 1); + if (len >= 0) + { + buf[len] = 0; +@@ -7897,7 +7943,7 @@ int write_smtp_header(int fd_socket, char *from, char *to, int auth_type, char * + snprintf(buf, sizeof(buf), "DATA\r\n"); + DBG(DBG_info2, "> %s", buf); + bytes_written = write(fd_socket, buf, strlen(buf)); +- len = read(fd_socket, buf, sizeof(buf)); ++ len = read(fd_socket, buf, sizeof(buf) - 1); + if (len >= 0) + { + buf[len] = 0; +@@ -7932,7 +7978,7 @@ int write_smtp_footer(int fd_socket) + snprintf(buf, sizeof(buf), "\r\n.\r\n"); + DBG(DBG_info2, "> %s", buf); + bytes_written = write(fd_socket, buf, strlen(buf)); +- len = read(fd_socket, buf, sizeof(buf)); ++ len = read(fd_socket, buf, sizeof(buf) - 1); + if (len >= 0) + { + buf[len] = 0; +diff --git a/src/xsane-scan.c b/src/xsane-scan.c +index 88f954a..b6a66d6 100644 +--- a/src/xsane-scan.c ++++ b/src/xsane-scan.c +@@ -394,6 +394,13 @@ static void xsane_read_image_data(gpointer data, gint source, GdkInputCondition + { + long fpos = ftell(xsane.out); + ++ if (fpos < 0) ++ { ++ DBG(DBG_error, "xsane_read_image_data(): can't tell file " ++ "position"); ++ return; ++ } ++ + fseek(xsane.out, 0, SEEK_CUR); /* sync between write and read */ + bytes_read = fread(rgbbuf, 1, bytes - 1, xsane.out); + fseek(xsane.out, fpos, SEEK_SET); +@@ -1173,6 +1180,8 @@ void xsane_scan_done(SANE_Status status) + { + abort = 1; + } ++ ++ fclose(outfile); + } + else + { +@@ -1182,8 +1191,6 @@ void xsane_scan_done(SANE_Status status) + xsane_back_gtk_error(buf, TRUE); + abort = 1; + } +- +- fclose(outfile); + } + + fclose(infile); +@@ -1452,7 +1459,7 @@ void xsane_scan_done(SANE_Status status) + } + else + { +- type = ""; ++ type = strdup(""); + } + + list_item = gtk_list_item_new_with_label(page); +@@ -1493,7 +1500,7 @@ void xsane_scan_done(SANE_Status status) + } + else + { +- type = ""; ++ type = strdup(""); + } + + list_item = gtk_list_item_new_with_label(page); +@@ -1535,7 +1542,7 @@ void xsane_scan_done(SANE_Status status) + } + else + { +- type = ""; ++ type = strdup(""); + } + + list_item = gtk_list_item_new_with_label(page); +diff --git a/src/xsane-setup.c b/src/xsane-setup.c +index a61833a..413a343 100644 +--- a/src/xsane-setup.c ++++ b/src/xsane-setup.c +@@ -111,7 +111,7 @@ void xsane_new_printer(void) + + DBG(DBG_proc, "xsane_new_printer\n"); + +- newprinters = realloc(preferences.printer, (preferences.printerdefinitions+1) * sizeof(void *)); ++ newprinters = realloc(preferences.printer, (preferences.printerdefinitions+1) * sizeof(Preferences_printer_t *)); + + if (newprinters) /* realloc returns NULL if failed, in this case the old memory keeps alive */ + { +@@ -309,7 +309,7 @@ static void xsane_setup_printer_callback(GtkWidget *widget, gpointer data) + { + DBG(DBG_proc, "xsane_setup_printer_callback\n"); + +- preferences.printernr = (int) data; ++ preferences.printernr = GPOINTER_TO_INT(data); + xsane_setup_printer_update(); + } + +@@ -328,7 +328,7 @@ static void xsane_setup_printer_menu_build(GtkWidget *option_menu) + { + printer_item = gtk_menu_item_new_with_label(preferences.printer[i]->name); + gtk_container_add(GTK_CONTAINER(printer_menu), printer_item); +- g_signal_connect(GTK_OBJECT(printer_item), "activate", (GtkSignalFunc) xsane_setup_printer_callback, (void *) i); ++ g_signal_connect(GTK_OBJECT(printer_item), "activate", (GtkSignalFunc) xsane_setup_printer_callback, GINT_TO_POINTER(i)); + gtk_widget_show(printer_item); + } + +@@ -454,7 +454,7 @@ static void xsane_setup_filename_counter_len_callback(GtkWidget *widget, gpointe + { + DBG(DBG_proc, "xsane_setup_filename_counter_len_callback\n"); + +- xsane_setup.filename_counter_len = (int) data; ++ xsane_setup.filename_counter_len = GPOINTER_TO_INT(data); + } + + /* ---------------------------------------------------------------------------------------------------------------------- */ +@@ -464,7 +464,7 @@ static void xsane_setup_tiff_compression16_callback(GtkWidget *widget, gpointer + { + DBG(DBG_proc, "xsane_setup_tiff_compression16_callback\n"); + +- xsane_setup.tiff_compression16_nr = (int) data; ++ xsane_setup.tiff_compression16_nr = GPOINTER_TO_INT(data); + } + + /* -------------------------------------- */ +@@ -473,7 +473,7 @@ static void xsane_setup_tiff_compression8_callback(GtkWidget *widget, gpointer d + { + DBG(DBG_proc, "xsane_setup_tiff_compression8_callback\n"); + +- xsane_setup.tiff_compression8_nr = (int) data; ++ xsane_setup.tiff_compression8_nr = GPOINTER_TO_INT(data); + } + + /* -------------------------------------- */ +@@ -481,7 +481,7 @@ static void xsane_setup_tiff_compression8_callback(GtkWidget *widget, gpointer d + static void xsane_setup_tiff_compression1_callback(GtkWidget *widget, gpointer data) + { + DBG(DBG_proc, "xsane_setup_tiff_compression1_callback\n"); +- xsane_setup.tiff_compression1_nr = (int) data; ++ xsane_setup.tiff_compression1_nr = GPOINTER_TO_INT(data); + } + #endif + +@@ -569,7 +569,7 @@ static void xsane_setup_color_management_apply_changes(GtkWidget *widget, gpoint + { + DBG(DBG_proc, "xsane_setup_colormagaement_apply_changes\n"); + +- preferences.cms_intent = (int) gtk_object_get_data(GTK_OBJECT(gtk_menu_get_active(GTK_MENU(gtk_option_menu_get_menu(GTK_OPTION_MENU(xsane_setup.cms_intent_option_menu))))), "Selection"); ++ preferences.cms_intent = GPOINTER_TO_INT(gtk_object_get_data(GTK_OBJECT(gtk_menu_get_active(GTK_MENU(gtk_option_menu_get_menu(GTK_OPTION_MENU(xsane_setup.cms_intent_option_menu))))), "Selection")); + xsane_update_bool(xsane_setup.cms_bpc_button, &preferences.cms_bpc); + + if (xsane.scanner_default_color_icm_profile) +@@ -843,7 +843,7 @@ void xsane_close_setup_dialog_callback(GtkWidget *widget, gpointer data) + + static void xsane_permission_toggled(GtkWidget *widget, gpointer data) + { +- int mask = (int) data; ++ int mask = GPOINTER_TO_INT(data); + int *permission = 0; + const gchar *name = gtk_widget_get_name(widget); + +@@ -912,7 +912,7 @@ static void xsane_permission_box(GtkWidget *parent, gchar *name, gchar *descript + xsane_back_gtk_set_tooltip(xsane.tooltips, button, DESC_PERMISSION_READ); + gtk_widget_set_size_request(button, 26, -1); + gtk_widget_set_name(button, name); +- g_signal_connect(GTK_OBJECT(button), "toggled", (GtkSignalFunc) xsane_permission_toggled, (void *) 256); ++ g_signal_connect(GTK_OBJECT(button), "toggled", (GtkSignalFunc) xsane_permission_toggled, GINT_TO_POINTER(256)); + gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 1); + gtk_widget_show(button); + gtk_widget_set_sensitive(button, user_sensitivity); +@@ -922,7 +922,7 @@ static void xsane_permission_box(GtkWidget *parent, gchar *name, gchar *descript + xsane_back_gtk_set_tooltip(xsane.tooltips, button, DESC_PERMISSION_WRITE); + gtk_widget_set_size_request(button, 26, -1); + gtk_widget_set_name(button, name); +- g_signal_connect(GTK_OBJECT(button), "toggled", (GtkSignalFunc) xsane_permission_toggled, (void *) 128); ++ g_signal_connect(GTK_OBJECT(button), "toggled", (GtkSignalFunc) xsane_permission_toggled, GINT_TO_POINTER(128)); + gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 1); + gtk_widget_show(button); + gtk_widget_set_sensitive(button, user_sensitivity); +@@ -932,7 +932,7 @@ static void xsane_permission_box(GtkWidget *parent, gchar *name, gchar *descript + xsane_back_gtk_set_tooltip(xsane.tooltips, button, DESC_PERMISSION_SEARCH); + gtk_widget_set_size_request(button, 26, -1); + gtk_widget_set_name(button, name); +- g_signal_connect(GTK_OBJECT(button), "toggled", (GtkSignalFunc) xsane_permission_toggled, (void *) 64); ++ g_signal_connect(GTK_OBJECT(button), "toggled", (GtkSignalFunc) xsane_permission_toggled, GINT_TO_POINTER(64)); + gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 1); + gtk_widget_show(button); + gtk_widget_set_sensitive(button, x_sensitivity & user_sensitivity); +@@ -950,7 +950,7 @@ static void xsane_permission_box(GtkWidget *parent, gchar *name, gchar *descript + xsane_back_gtk_set_tooltip(xsane.tooltips, button, DESC_PERMISSION_READ); + gtk_widget_set_size_request(button, 26, -1); + gtk_widget_set_name(button, name); +- g_signal_connect(GTK_OBJECT(button), "toggled", (GtkSignalFunc) xsane_permission_toggled, (void *) 32); ++ g_signal_connect(GTK_OBJECT(button), "toggled", (GtkSignalFunc) xsane_permission_toggled, GINT_TO_POINTER(32)); + gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 1); + gtk_widget_show(button); + +@@ -959,7 +959,7 @@ static void xsane_permission_box(GtkWidget *parent, gchar *name, gchar *descript + xsane_back_gtk_set_tooltip(xsane.tooltips, button, DESC_PERMISSION_WRITE); + gtk_widget_set_size_request(button, 26, -1); + gtk_widget_set_name(button, name); +- g_signal_connect(GTK_OBJECT(button), "toggled", (GtkSignalFunc) xsane_permission_toggled, (void *) 16); ++ g_signal_connect(GTK_OBJECT(button), "toggled", (GtkSignalFunc) xsane_permission_toggled, GINT_TO_POINTER(16)); + gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 1); + gtk_widget_show(button); + +@@ -968,7 +968,7 @@ static void xsane_permission_box(GtkWidget *parent, gchar *name, gchar *descript + xsane_back_gtk_set_tooltip(xsane.tooltips, button, DESC_PERMISSION_SEARCH); + gtk_widget_set_size_request(button, 26, -1); + gtk_widget_set_name(button, name); +- g_signal_connect(GTK_OBJECT(button), "toggled", (GtkSignalFunc) xsane_permission_toggled, (void *) 8); ++ g_signal_connect(GTK_OBJECT(button), "toggled", (GtkSignalFunc) xsane_permission_toggled, GINT_TO_POINTER(8)); + gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 1); + gtk_widget_show(button); + gtk_widget_set_sensitive(button, x_sensitivity); +@@ -986,7 +986,7 @@ static void xsane_permission_box(GtkWidget *parent, gchar *name, gchar *descript + xsane_back_gtk_set_tooltip(xsane.tooltips, button, DESC_PERMISSION_READ); + gtk_widget_set_size_request(button, 26, -1); + gtk_widget_set_name(button, name); +- g_signal_connect(GTK_OBJECT(button), "toggled", (GtkSignalFunc) xsane_permission_toggled, (void *) 4); ++ g_signal_connect(GTK_OBJECT(button), "toggled", (GtkSignalFunc) xsane_permission_toggled, GINT_TO_POINTER(4)); + gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 1); + gtk_widget_show(button); + +@@ -995,7 +995,7 @@ static void xsane_permission_box(GtkWidget *parent, gchar *name, gchar *descript + xsane_back_gtk_set_tooltip(xsane.tooltips, button, DESC_PERMISSION_WRITE); + gtk_widget_set_size_request(button, 26, -1); + gtk_widget_set_name(button, name); +- g_signal_connect(GTK_OBJECT(button), "toggled", (GtkSignalFunc) xsane_permission_toggled, (void *) 2); ++ g_signal_connect(GTK_OBJECT(button), "toggled", (GtkSignalFunc) xsane_permission_toggled, GINT_TO_POINTER(2)); + gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 1); + gtk_widget_show(button); + +@@ -1004,7 +1004,7 @@ static void xsane_permission_box(GtkWidget *parent, gchar *name, gchar *descript + xsane_back_gtk_set_tooltip(xsane.tooltips, button, DESC_PERMISSION_SEARCH); + gtk_widget_set_size_request(button, 26, -1); + gtk_widget_set_name(button, name); +- g_signal_connect(GTK_OBJECT(button), "toggled", (GtkSignalFunc) xsane_permission_toggled, (void *) 1); ++ g_signal_connect(GTK_OBJECT(button), "toggled", (GtkSignalFunc) xsane_permission_toggled, GINT_TO_POINTER(1)); + gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 1); + gtk_widget_show(button); + gtk_widget_set_sensitive(button, x_sensitivity); +@@ -1750,7 +1750,7 @@ static void xsane_saving_notebook(GtkWidget *notebook) + } + filename_counter_len_item = gtk_menu_item_new_with_label(buf); + gtk_container_add(GTK_CONTAINER(filename_counter_len_menu), filename_counter_len_item); +- g_signal_connect(GTK_OBJECT(filename_counter_len_item), "activate", (GtkSignalFunc) xsane_setup_filename_counter_len_callback, (void *) i); ++ g_signal_connect(GTK_OBJECT(filename_counter_len_item), "activate", (GtkSignalFunc) xsane_setup_filename_counter_len_callback, GINT_TO_POINTER(i)); + gtk_widget_show(filename_counter_len_item); + if (preferences.filename_counter_len == i) + { +@@ -1983,7 +1983,7 @@ static void xsane_filetype_notebook(GtkWidget *notebook) + { + tiff_compression_item = gtk_menu_item_new_with_label(tiff_compression16_strings[i-1].name); + gtk_container_add(GTK_CONTAINER(tiff_compression_menu), tiff_compression_item); +- g_signal_connect(GTK_OBJECT(tiff_compression_item), "activate", (GtkSignalFunc) xsane_setup_tiff_compression16_callback, (void *) tiff_compression16_strings[i-1].number); ++ g_signal_connect(GTK_OBJECT(tiff_compression_item), "activate", (GtkSignalFunc) xsane_setup_tiff_compression16_callback, GINT_TO_POINTER(tiff_compression16_strings[i-1].number)); + gtk_widget_show(tiff_compression_item); + if (tiff_compression16_strings[i-1].number == preferences.tiff_compression16_nr) + { +@@ -2019,7 +2019,7 @@ static void xsane_filetype_notebook(GtkWidget *notebook) + { + tiff_compression_item = gtk_menu_item_new_with_label(tiff_compression8_strings[i-1].name); + gtk_container_add(GTK_CONTAINER(tiff_compression_menu), tiff_compression_item); +- g_signal_connect(GTK_OBJECT(tiff_compression_item), "activate", (GtkSignalFunc) xsane_setup_tiff_compression8_callback, (void *) tiff_compression8_strings[i-1].number); ++ g_signal_connect(GTK_OBJECT(tiff_compression_item), "activate", (GtkSignalFunc) xsane_setup_tiff_compression8_callback, GINT_TO_POINTER(tiff_compression8_strings[i-1].number)); + gtk_widget_show(tiff_compression_item); + if (tiff_compression8_strings[i-1].number == preferences.tiff_compression8_nr) + { +@@ -2056,7 +2056,7 @@ static void xsane_filetype_notebook(GtkWidget *notebook) + { + tiff_compression_item = gtk_menu_item_new_with_label(tiff_compression1_strings[i-1].name); + gtk_container_add(GTK_CONTAINER(tiff_compression_menu), tiff_compression_item); +- g_signal_connect(GTK_OBJECT(tiff_compression_item), "activate", (GtkSignalFunc) xsane_setup_tiff_compression1_callback, (void *) tiff_compression1_strings[i-1].number); ++ g_signal_connect(GTK_OBJECT(tiff_compression_item), "activate", (GtkSignalFunc) xsane_setup_tiff_compression1_callback, GINT_TO_POINTER(tiff_compression1_strings[i-1].number)); + gtk_widget_show(tiff_compression_item); + if (tiff_compression1_strings[i-1].number == preferences.tiff_compression1_nr) + { +@@ -2251,7 +2251,7 @@ static void xsane_fax_notebook(GtkWidget *notebook) + for (i=0; i < sizeof(fax_program)/sizeof(fax_program_options_type); i++) + { + button = gtk_button_new_with_label(fax_program[i].identifier); +- g_signal_connect(GTK_OBJECT(button), "clicked", (GtkSignalFunc) xsane_fax_notebook_set_faxprogram_default_callback, (void *) i); ++ g_signal_connect(GTK_OBJECT(button), "clicked", (GtkSignalFunc) xsane_fax_notebook_set_faxprogram_default_callback, GINT_TO_POINTER(i)); + gtk_box_pack_end(GTK_BOX(hbox), button, FALSE, FALSE, 10); + gtk_widget_show(button); + } +@@ -2557,7 +2557,7 @@ static void xsane_email_notebook(GtkWidget *notebook) + { + authentication_menu_item = gtk_menu_item_new_with_label(authentication_strings[i-1].name); + gtk_container_add(GTK_CONTAINER(authentication_menu), authentication_menu_item); +- g_signal_connect(GTK_OBJECT(authentication_menu_item), "activate", (GtkSignalFunc) xsane_setup_authentication_type_callback, (void *) authentication_strings[i-1].number); ++ g_signal_connect(GTK_OBJECT(authentication_menu_item), "activate", (GtkSignalFunc) xsane_setup_authentication_type_callback, GINT_TO_POINTER(authentication_strings[i-1].number)); + gtk_widget_show(authentication_menu_item); + if (authentication_strings[i-1].number == preferences.email_authentication) + { +@@ -2926,7 +2926,7 @@ static void xsane_display_notebook(GtkWidget *notebook) + { + show_range_mode_item = gtk_menu_item_new_with_label(show_range_mode_strings[i-1].name); + gtk_container_add(GTK_CONTAINER(show_range_mode_menu), show_range_mode_item); +- g_signal_connect(GTK_OBJECT(show_range_mode_item), "activate", (GtkSignalFunc) xsane_setup_show_range_mode_callback, (void *) show_range_mode_strings[i-1].number); ++ g_signal_connect(GTK_OBJECT(show_range_mode_item), "activate", (GtkSignalFunc) xsane_setup_show_range_mode_callback, GINT_TO_POINTER(show_range_mode_strings[i-1].number)); + gtk_widget_show(show_range_mode_item); + if (show_range_mode_strings[i-1].number == preferences.show_range_mode) + { +@@ -3129,7 +3129,7 @@ static void xsane_enhance_notebook_sensitivity(int lineart_mode) + + static void xsane_setup_authentication_type_callback(GtkWidget *widget, gpointer data) + { +- xsane_setup.email_authentication = (int) data; ++ xsane_setup.email_authentication = GPOINTER_TO_INT(data); + + gtk_widget_set_sensitive(xsane_setup.pop3_vbox, (xsane_setup.email_authentication == EMAIL_AUTH_POP3)); + } +@@ -3138,14 +3138,14 @@ static void xsane_setup_authentication_type_callback(GtkWidget *widget, gpointer + + static void xsane_setup_show_range_mode_callback(GtkWidget *widget, gpointer data) + { +- xsane_setup.show_range_mode = (int) data; ++ xsane_setup.show_range_mode = GPOINTER_TO_INT(data); + } + + /* ---------------------------------------------------------------------------------------------------------------------- */ + + static void xsane_setup_lineart_mode_callback(GtkWidget *widget, gpointer data) + { +- xsane_setup.lineart_mode = (int) data; ++ xsane_setup.lineart_mode = GPOINTER_TO_INT(data); + xsane_enhance_notebook_sensitivity(xsane_setup.lineart_mode); + } + +@@ -3168,7 +3168,7 @@ static void xsane_setup_preview_pipette_range_callback(GtkWidget *widget, gpoint + { + DBG(DBG_proc, "xsane_setup_preview_pipette_range_callback\n"); + +- xsane_setup.preview_pipette_range = (int) data; ++ xsane_setup.preview_pipette_range = GPOINTER_TO_INT(data); + } + + /* ---------------------------------------------------------------------------------------------------------------------- */ +@@ -3237,7 +3237,7 @@ static void xsane_enhance_notebook(GtkWidget *notebook) + { + lineart_mode_item = gtk_menu_item_new_with_label(lineart_mode_strings[i-1].name); + gtk_container_add(GTK_CONTAINER(lineart_mode_menu), lineart_mode_item); +- g_signal_connect(GTK_OBJECT(lineart_mode_item), "activate", (GtkSignalFunc) xsane_setup_lineart_mode_callback, (void *) lineart_mode_strings[i-1].number); ++ g_signal_connect(GTK_OBJECT(lineart_mode_item), "activate", (GtkSignalFunc) xsane_setup_lineart_mode_callback, GINT_TO_POINTER(lineart_mode_strings[i-1].number)); + gtk_widget_show(lineart_mode_item); + if (lineart_mode_strings[i-1].number == xsane.lineart_mode) + { +@@ -3461,7 +3461,7 @@ static void xsane_enhance_notebook(GtkWidget *notebook) + snprintf(buf, sizeof(buf), "%d x %d pixel", j, j); + preview_pipette_range_item = gtk_menu_item_new_with_label(buf); + gtk_container_add(GTK_CONTAINER(preview_pipette_range_menu), preview_pipette_range_item); +- g_signal_connect(GTK_OBJECT(preview_pipette_range_item), "activate", (GtkSignalFunc) xsane_setup_preview_pipette_range_callback, (void *) j); ++ g_signal_connect(GTK_OBJECT(preview_pipette_range_item), "activate", (GtkSignalFunc) xsane_setup_preview_pipette_range_callback, GINT_TO_POINTER(j)); + gtk_widget_show(preview_pipette_range_item); + if (preferences.preview_pipette_range == j) + { +@@ -3555,22 +3555,22 @@ static void xsane_color_management_notebook(GtkWidget *notebook) + menu = gtk_menu_new(); + + menu_item = gtk_menu_item_new_with_label(SUBMENU_ITEM_CMS_INTENT_PERCEPTUAL); +- gtk_object_set_data(GTK_OBJECT(menu_item), "Selection", (void *) INTENT_PERCEPTUAL); ++ gtk_object_set_data(GTK_OBJECT(menu_item), "Selection", GINT_TO_POINTER(INTENT_PERCEPTUAL)); + gtk_container_add(GTK_CONTAINER(menu), menu_item); + gtk_widget_show(menu_item); + + menu_item = gtk_menu_item_new_with_label(SUBMENU_ITEM_CMS_INTENT_RELATIVE_COLORIMETRIC); +- gtk_object_set_data(GTK_OBJECT(menu_item), "Selection", (void *) INTENT_RELATIVE_COLORIMETRIC); ++ gtk_object_set_data(GTK_OBJECT(menu_item), "Selection", GINT_TO_POINTER(INTENT_RELATIVE_COLORIMETRIC)); + gtk_container_add(GTK_CONTAINER(menu), menu_item); + gtk_widget_show(menu_item); + + menu_item = gtk_menu_item_new_with_label(SUBMENU_ITEM_CMS_INTENT_ABSOLUTE_COLORIMETRIC); +- gtk_object_set_data(GTK_OBJECT(menu_item), "Selection", (void *) INTENT_ABSOLUTE_COLORIMETRIC); ++ gtk_object_set_data(GTK_OBJECT(menu_item), "Selection", GINT_TO_POINTER(INTENT_ABSOLUTE_COLORIMETRIC)); + gtk_container_add(GTK_CONTAINER(menu), menu_item); + gtk_widget_show(menu_item); + + menu_item = gtk_menu_item_new_with_label(SUBMENU_ITEM_CMS_INTENT_SATURATION); +- gtk_object_set_data(GTK_OBJECT(menu_item), "Selection", (void *) INTENT_SATURATION); ++ gtk_object_set_data(GTK_OBJECT(menu_item), "Selection", GINT_TO_POINTER(INTENT_SATURATION)); + gtk_container_add(GTK_CONTAINER(menu), menu_item); + gtk_widget_show(menu_item); + +diff --git a/src/xsane-text.h b/src/xsane-text.h +index ee4a222..44659b9 100644 +--- a/src/xsane-text.h ++++ b/src/xsane-text.h +@@ -803,6 +803,7 @@ YOU ARE ALONE!\ + #define ERR_HEADER_CHILD_PROCESS_ERROR _("Child process error") + + #define ERR_FAILED_CREATE_FILE _("Failed to create file:") ++#define ERR_FAILED_CREATE_ENSURE_DIR _("Failed to ensure path is a directory, or to create as one:") + #define ERR_LOAD_DEVICE_SETTINGS _("Error while loading device settings:") + #define ERR_NO_DRC_FILE _("is not a device-rc-file !!!") + #define ERR_NETSCAPE_EXECUTE_FAIL _("Failed to execute netscape!") +diff --git a/src/xsane-viewer.c b/src/xsane-viewer.c +index 844c077..6786e96 100644 +--- a/src/xsane-viewer.c ++++ b/src/xsane-viewer.c +@@ -32,6 +32,8 @@ + #include "xsane-save.h" + #include <gdk/gdkkeysyms.h> + #include <sys/wait.h> ++#include <string.h> ++#include <errno.h> + + #ifndef PATH_MAX + # define PATH_MAX 1024 +@@ -506,8 +508,8 @@ static void xsane_viewer_scale_set_scale_value_and_adjustments(GtkAdjustment *ad + + *scale_val = adj_data->value; + +- image_width = (int) gtk_object_get_data(GTK_OBJECT(adj_data), "image_width"); +- image_height = (int) gtk_object_get_data(GTK_OBJECT(adj_data), "image_height"); ++ image_width = GPOINTER_TO_INT(gtk_object_get_data(GTK_OBJECT(adj_data), "image_width")); ++ image_height = GPOINTER_TO_INT(gtk_object_get_data(GTK_OBJECT(adj_data), "image_height")); + + adj = (GtkAdjustment*) gtk_object_get_data(GTK_OBJECT(adj_data), "size-x-adjustment"); + if ((adj) && (image_width)) +@@ -529,8 +531,8 @@ static void xsane_viewer_scale_set_size_x_value_and_adjustments(GtkAdjustment *a + GtkAdjustment *adj; + int image_width, image_height; + +- image_width = (int) gtk_object_get_data(GTK_OBJECT(adj_data), "image_width"); +- image_height = (int) gtk_object_get_data(GTK_OBJECT(adj_data), "image_height"); ++ image_width = GPOINTER_TO_INT(gtk_object_get_data(GTK_OBJECT(adj_data), "image_width")); ++ image_height = GPOINTER_TO_INT(gtk_object_get_data(GTK_OBJECT(adj_data), "image_height")); + + if (!image_width) + { +@@ -553,8 +555,8 @@ static void xsane_viewer_scale_set_size_y_value_and_adjustments(GtkAdjustment *a + GtkAdjustment *adj; + int image_width, image_height; + +- image_width = (int) gtk_object_get_data(GTK_OBJECT(adj_data), "image_width"); +- image_height = (int) gtk_object_get_data(GTK_OBJECT(adj_data), "image_height"); ++ image_width = GPOINTER_TO_INT(gtk_object_get_data(GTK_OBJECT(adj_data), "image_width")); ++ image_height = GPOINTER_TO_INT(gtk_object_get_data(GTK_OBJECT(adj_data), "image_height")); + + if (!image_height) + { +@@ -663,7 +665,7 @@ static void xsane_viewer_scale_callback(GtkWidget *window, gpointer data) + button = gtk_check_button_new_with_label(BUTTON_SCALE_BIND); + gtk_box_pack_start(GTK_BOX(vbox), button, FALSE, FALSE, 5); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), v->bind_scale); +- g_signal_connect(GTK_OBJECT(button), "toggled", (GtkSignalFunc) xsane_viewer_button_changed, (void *) &v->bind_scale); ++ g_signal_connect(GTK_OBJECT(button), "toggled", (GtkSignalFunc) xsane_viewer_button_changed, GINT_TO_POINTER(&v->bind_scale)); + g_signal_connect_after(GTK_OBJECT(button), "toggled", (GtkSignalFunc) xsane_viewer_scale_callback, (void *) v); + gtk_widget_show(button); + +@@ -715,20 +717,20 @@ static void xsane_viewer_scale_callback(GtkWidget *window, gpointer data) + gtk_widget_show(spinbutton); + xsane_back_gtk_set_tooltip(xsane.tooltips, spinbutton, DESC_SCALE_HEIGHT); + +- gtk_object_set_data(GTK_OBJECT(scale_widget), "size-x-adjustment", (void *) adjustment_size_x); +- gtk_object_set_data(GTK_OBJECT(scale_widget), "size-y-adjustment", (void *) adjustment_size_y); +- gtk_object_set_data(GTK_OBJECT(scale_widget), "image_width", (void *) image_info.image_width); +- gtk_object_set_data(GTK_OBJECT(scale_widget), "image_height", (void *) image_info.image_height); ++ gtk_object_set_data(GTK_OBJECT(scale_widget), "size-x-adjustment", GINT_TO_POINTER(adjustment_size_x)); ++ gtk_object_set_data(GTK_OBJECT(scale_widget), "size-y-adjustment", GINT_TO_POINTER(adjustment_size_y)); ++ gtk_object_set_data(GTK_OBJECT(scale_widget), "image_width", GINT_TO_POINTER(image_info.image_width)); ++ gtk_object_set_data(GTK_OBJECT(scale_widget), "image_height", GINT_TO_POINTER(image_info.image_height)); + +- gtk_object_set_data(GTK_OBJECT(adjustment_size_x), "scale-adjustment", (void *) scale_widget); +- gtk_object_set_data(GTK_OBJECT(adjustment_size_x), "size-y-adjustment", (void *) adjustment_size_y); +- gtk_object_set_data(GTK_OBJECT(adjustment_size_x), "image_width", (void *) image_info.image_width); +- gtk_object_set_data(GTK_OBJECT(adjustment_size_x), "image_height", (void *) image_info.image_height); ++ gtk_object_set_data(GTK_OBJECT(adjustment_size_x), "scale-adjustment", GINT_TO_POINTER(scale_widget)); ++ gtk_object_set_data(GTK_OBJECT(adjustment_size_x), "size-y-adjustment", GINT_TO_POINTER(adjustment_size_y)); ++ gtk_object_set_data(GTK_OBJECT(adjustment_size_x), "image_width", GINT_TO_POINTER(image_info.image_width)); ++ gtk_object_set_data(GTK_OBJECT(adjustment_size_x), "image_height", GINT_TO_POINTER(image_info.image_height)); + +- gtk_object_set_data(GTK_OBJECT(adjustment_size_y), "scale-adjustment", (void *) scale_widget); +- gtk_object_set_data(GTK_OBJECT(adjustment_size_y), "size-x-adjustment", (void *) adjustment_size_x); +- gtk_object_set_data(GTK_OBJECT(adjustment_size_y), "image_width", (void *) image_info.image_width); +- gtk_object_set_data(GTK_OBJECT(adjustment_size_y), "image_height", (void *) image_info.image_height); ++ gtk_object_set_data(GTK_OBJECT(adjustment_size_y), "scale-adjustment", GINT_TO_POINTER(scale_widget)); ++ gtk_object_set_data(GTK_OBJECT(adjustment_size_y), "size-x-adjustment", GINT_TO_POINTER(adjustment_size_x)); ++ gtk_object_set_data(GTK_OBJECT(adjustment_size_y), "image_width", GINT_TO_POINTER(image_info.image_width)); ++ gtk_object_set_data(GTK_OBJECT(adjustment_size_y), "image_height", GINT_TO_POINTER(image_info.image_height)); + } + else + { +@@ -763,12 +765,12 @@ static void xsane_viewer_scale_callback(GtkWidget *window, gpointer data) + xsane_back_gtk_set_tooltip(xsane.tooltips, spinbutton, DESC_SCALE_WIDTH); + + gtk_object_set_data(GTK_OBJECT(scalex_widget), "size-x-adjustment", (void *) adjustment_size_x); +- gtk_object_set_data(GTK_OBJECT(scalex_widget), "image_width", (void *) image_info.image_width); +- gtk_object_set_data(GTK_OBJECT(scalex_widget), "image_height", (void *) image_info.image_height); ++ gtk_object_set_data(GTK_OBJECT(scalex_widget), "image_width", GINT_TO_POINTER(image_info.image_width)); ++ gtk_object_set_data(GTK_OBJECT(scalex_widget), "image_height", GINT_TO_POINTER(image_info.image_height)); + + gtk_object_set_data(GTK_OBJECT(adjustment_size_x), "scale-adjustment", (void *) scalex_widget); +- gtk_object_set_data(GTK_OBJECT(adjustment_size_x), "image_width", (void *) image_info.image_width); +- gtk_object_set_data(GTK_OBJECT(adjustment_size_x), "image_height", (void *) image_info.image_height); ++ gtk_object_set_data(GTK_OBJECT(adjustment_size_x), "image_width", GINT_TO_POINTER(image_info.image_width)); ++ gtk_object_set_data(GTK_OBJECT(adjustment_size_x), "image_height", GINT_TO_POINTER(image_info.image_height)); + + + /* Y */ +@@ -802,12 +804,12 @@ static void xsane_viewer_scale_callback(GtkWidget *window, gpointer data) + xsane_back_gtk_set_tooltip(xsane.tooltips, spinbutton, DESC_SCALE_HEIGHT); + + gtk_object_set_data(GTK_OBJECT(scaley_widget), "size-y-adjustment", (void *) adjustment_size_y); +- gtk_object_set_data(GTK_OBJECT(scaley_widget), "image_width", (void *) image_info.image_width); +- gtk_object_set_data(GTK_OBJECT(scaley_widget), "image_height", (void *) image_info.image_height); ++ gtk_object_set_data(GTK_OBJECT(scaley_widget), "image_width", GINT_TO_POINTER(image_info.image_width)); ++ gtk_object_set_data(GTK_OBJECT(scaley_widget), "image_height", GINT_TO_POINTER(image_info.image_height)); + + gtk_object_set_data(GTK_OBJECT(adjustment_size_y), "scale-adjustment", (void *) scaley_widget); +- gtk_object_set_data(GTK_OBJECT(adjustment_size_y), "image_width", (void *) image_info.image_width); +- gtk_object_set_data(GTK_OBJECT(adjustment_size_y), "image_height", (void *) image_info.image_height); ++ gtk_object_set_data(GTK_OBJECT(adjustment_size_y), "image_width", GINT_TO_POINTER(image_info.image_width)); ++ gtk_object_set_data(GTK_OBJECT(adjustment_size_y), "image_height", GINT_TO_POINTER(image_info.image_height)); + } + + /* Apply Cancel */ +@@ -1094,6 +1096,7 @@ static void xsane_viewer_scale_image(GtkWidget *window, gpointer data) + { + DBG(DBG_error, "could not save file %s\n", outfilename); + xsane_viewer_set_sensitivity(v, TRUE); ++ fclose(infile); + return; + } + +@@ -1176,6 +1179,7 @@ static void xsane_viewer_despeckle_image(GtkWidget *window, gpointer data) + { + DBG(DBG_error, "could not save file %s\n", outfilename); + xsane_viewer_set_sensitivity(v, TRUE); ++ fclose(infile); + return; + } + +@@ -1253,6 +1257,7 @@ static void xsane_viewer_blur_image(GtkWidget *window, gpointer data) + { + DBG(DBG_error, "could not save file %s\n", outfilename); + xsane_viewer_set_sensitivity(v, TRUE); ++ fclose(infile); + return; + } + +@@ -1335,6 +1340,7 @@ static void xsane_viewer_rotate(Viewer *v, int rotation) + { + DBG(DBG_error, "could not save file %s\n", outfilename); + xsane_viewer_set_sensitivity(v, TRUE); ++ fclose(infile); + + return; + } +@@ -1444,7 +1450,7 @@ static void xsane_viewer_zoom_callback(GtkWidget *widget, gpointer data) + + DBG(DBG_proc, "xsane_viewer_zoom_callback\n"); + +- val = (int) gtk_object_get_data(GTK_OBJECT(widget), "Selection"); ++ val = GPOINTER_TO_INT(gtk_object_get_data(GTK_OBJECT(widget), "Selection")); + v->zoom = (float) val / 100; + DBG(DBG_info, "setting zoom factor to %f\n", v->zoom); + xsane_viewer_read_image(v); +@@ -1721,7 +1727,7 @@ static void xsane_viewer_set_cms_proofing_callback(GtkWidget *widget, gpointer d + g_signal_handlers_block_by_func(GTK_OBJECT(v->cms_proofing_widget[1]), (GtkSignalFunc) xsane_viewer_set_cms_proofing_callback, v); + g_signal_handlers_block_by_func(GTK_OBJECT(v->cms_proofing_widget[2]), (GtkSignalFunc) xsane_viewer_set_cms_proofing_callback, v); + +- val = (int) gtk_object_get_data(GTK_OBJECT(widget), "Selection"); ++ val = GPOINTER_TO_INT(gtk_object_get_data(GTK_OBJECT(widget), "Selection")); + + DBG(DBG_proc, "xsane_viewer_set_cms_proofing_callback (%d)\n", val); + +@@ -1748,7 +1754,7 @@ static void xsane_viewer_set_cms_intent_callback(GtkWidget *widget, gpointer dat + g_signal_handlers_block_by_func(GTK_OBJECT(v->cms_intent_widget[2]), (GtkSignalFunc) xsane_viewer_set_cms_intent_callback, v); + g_signal_handlers_block_by_func(GTK_OBJECT(v->cms_intent_widget[3]), (GtkSignalFunc) xsane_viewer_set_cms_intent_callback, v); + +- val = (int) gtk_object_get_data(GTK_OBJECT(widget), "Selection"); ++ val = GPOINTER_TO_INT(gtk_object_get_data(GTK_OBJECT(widget), "Selection")); + + DBG(DBG_proc, "xsane_viewer_set_cms_intent_callback (%d)\n", val); + +@@ -1774,7 +1780,7 @@ static void xsane_viewer_set_cms_proofing_intent_callback(GtkWidget *widget, gpo + g_signal_handlers_block_by_func(GTK_OBJECT(v->cms_proofing_intent_widget[0]), (GtkSignalFunc) xsane_viewer_set_cms_proofing_intent_callback, v); + g_signal_handlers_block_by_func(GTK_OBJECT(v->cms_proofing_intent_widget[1]), (GtkSignalFunc) xsane_viewer_set_cms_proofing_intent_callback, v); + +- val = (int) gtk_object_get_data(GTK_OBJECT(widget), "Selection"); ++ val = GPOINTER_TO_INT(gtk_object_get_data(GTK_OBJECT(widget), "Selection")); + + DBG(DBG_proc, "xsane_viewer_set_cms_proofing_intent_callback (%d)\n", val); + +@@ -1806,7 +1812,7 @@ static void xsane_viewer_set_cms_gamut_alarm_color_callback(GtkWidget *widget, g + g_signal_handlers_block_by_func(GTK_OBJECT(v->cms_gamut_alarm_color_widget[4]), (GtkSignalFunc) xsane_viewer_set_cms_gamut_alarm_color_callback, v); + g_signal_handlers_block_by_func(GTK_OBJECT(v->cms_gamut_alarm_color_widget[5]), (GtkSignalFunc) xsane_viewer_set_cms_gamut_alarm_color_callback, v); + +- val = (int) gtk_object_get_data(GTK_OBJECT(widget), "Selection"); ++ val = GPOINTER_TO_INT(gtk_object_get_data(GTK_OBJECT(widget), "Selection")); + + DBG(DBG_proc, "xsane_viewer_set_cms_gamut_alarm_color_callback (%d)\n", val); + +@@ -1942,7 +1948,7 @@ static GtkWidget *xsane_viewer_color_management_build_menu(Viewer *v) + gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(subitem), TRUE); + } + g_signal_connect(GTK_OBJECT(subitem), "toggled", (GtkSignalFunc) xsane_viewer_set_cms_proofing_callback, v); +- gtk_object_set_data(GTK_OBJECT(subitem), "Selection", (void *) 0); ++ gtk_object_set_data(GTK_OBJECT(subitem), "Selection", GINT_TO_POINTER(0)); + gtk_widget_show(subitem); + v->cms_proofing_widget[0] = subitem; + +@@ -1953,7 +1959,7 @@ static GtkWidget *xsane_viewer_color_management_build_menu(Viewer *v) + gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(subitem), TRUE); + } + g_signal_connect(GTK_OBJECT(subitem), "toggled", (GtkSignalFunc) xsane_viewer_set_cms_proofing_callback, v); +- gtk_object_set_data(GTK_OBJECT(subitem), "Selection", (void *) 1); ++ gtk_object_set_data(GTK_OBJECT(subitem), "Selection", GINT_TO_POINTER(1)); + gtk_widget_show(subitem); + v->cms_proofing_widget[1] = subitem; + +@@ -1964,7 +1970,7 @@ static GtkWidget *xsane_viewer_color_management_build_menu(Viewer *v) + gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(subitem), TRUE); + } + g_signal_connect(GTK_OBJECT(subitem), "toggled", (GtkSignalFunc) xsane_viewer_set_cms_proofing_callback, v); +- gtk_object_set_data(GTK_OBJECT(subitem), "Selection", (void *) 2); ++ gtk_object_set_data(GTK_OBJECT(subitem), "Selection", GINT_TO_POINTER(2)); + gtk_widget_show(subitem); + v->cms_proofing_widget[2] = subitem; + +@@ -1985,7 +1991,7 @@ static GtkWidget *xsane_viewer_color_management_build_menu(Viewer *v) + gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(subitem), TRUE); + } + g_signal_connect(GTK_OBJECT(subitem), "toggled", (GtkSignalFunc) xsane_viewer_set_cms_intent_callback, v); +- gtk_object_set_data(GTK_OBJECT(subitem), "Selection", (void *) INTENT_PERCEPTUAL); ++ gtk_object_set_data(GTK_OBJECT(subitem), "Selection", GINT_TO_POINTER(INTENT_PERCEPTUAL)); + gtk_widget_show(subitem); + v->cms_intent_widget[INTENT_PERCEPTUAL] = subitem; + +@@ -1996,7 +2002,7 @@ static GtkWidget *xsane_viewer_color_management_build_menu(Viewer *v) + gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(subitem), TRUE); + } + g_signal_connect(GTK_OBJECT(subitem), "toggled", (GtkSignalFunc) xsane_viewer_set_cms_intent_callback, v); +- gtk_object_set_data(GTK_OBJECT(subitem), "Selection", (void *) INTENT_RELATIVE_COLORIMETRIC); ++ gtk_object_set_data(GTK_OBJECT(subitem), "Selection", GINT_TO_POINTER(INTENT_RELATIVE_COLORIMETRIC)); + gtk_widget_show(subitem); + v->cms_intent_widget[INTENT_RELATIVE_COLORIMETRIC] = subitem; + +@@ -2007,7 +2013,7 @@ static GtkWidget *xsane_viewer_color_management_build_menu(Viewer *v) + gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(subitem), TRUE); + } + g_signal_connect(GTK_OBJECT(subitem), "toggled", (GtkSignalFunc) xsane_viewer_set_cms_intent_callback, v); +- gtk_object_set_data(GTK_OBJECT(subitem), "Selection", (void *) INTENT_ABSOLUTE_COLORIMETRIC); ++ gtk_object_set_data(GTK_OBJECT(subitem), "Selection", GINT_TO_POINTER(INTENT_ABSOLUTE_COLORIMETRIC)); + gtk_widget_show(subitem); + v->cms_intent_widget[INTENT_ABSOLUTE_COLORIMETRIC] = subitem; + +@@ -2018,7 +2024,7 @@ static GtkWidget *xsane_viewer_color_management_build_menu(Viewer *v) + gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(subitem), TRUE); + } + g_signal_connect(GTK_OBJECT(subitem), "toggled", (GtkSignalFunc) xsane_viewer_set_cms_intent_callback, v); +- gtk_object_set_data(GTK_OBJECT(subitem), "Selection", (void *) INTENT_SATURATION); ++ gtk_object_set_data(GTK_OBJECT(subitem), "Selection", GINT_TO_POINTER(INTENT_SATURATION)); + gtk_widget_show(subitem); + v->cms_intent_widget[INTENT_SATURATION] = subitem; + +@@ -2039,7 +2045,7 @@ static GtkWidget *xsane_viewer_color_management_build_menu(Viewer *v) + gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(subitem), TRUE); + } + g_signal_connect(GTK_OBJECT(subitem), "toggled", (GtkSignalFunc) xsane_viewer_set_cms_proofing_intent_callback, v); +- gtk_object_set_data(GTK_OBJECT(subitem), "Selection", (void *) INTENT_RELATIVE_COLORIMETRIC); ++ gtk_object_set_data(GTK_OBJECT(subitem), "Selection", GINT_TO_POINTER(INTENT_RELATIVE_COLORIMETRIC)); + gtk_widget_show(subitem); + v->cms_proofing_intent_widget[0] = subitem; + +@@ -2050,7 +2056,7 @@ static GtkWidget *xsane_viewer_color_management_build_menu(Viewer *v) + gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(subitem), TRUE); + } + g_signal_connect(GTK_OBJECT(subitem), "toggled", (GtkSignalFunc) xsane_viewer_set_cms_proofing_intent_callback, v); +- gtk_object_set_data(GTK_OBJECT(subitem), "Selection", (void *) INTENT_ABSOLUTE_COLORIMETRIC); ++ gtk_object_set_data(GTK_OBJECT(subitem), "Selection", GINT_TO_POINTER(INTENT_ABSOLUTE_COLORIMETRIC)); + gtk_widget_show(subitem); + v->cms_proofing_intent_widget[1] = subitem; + +@@ -2078,7 +2084,7 @@ static GtkWidget *xsane_viewer_color_management_build_menu(Viewer *v) + gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(subitem), TRUE); + } + g_signal_connect(GTK_OBJECT(subitem), "toggled", (GtkSignalFunc) xsane_viewer_set_cms_gamut_alarm_color_callback, v); +- gtk_object_set_data(GTK_OBJECT(subitem), "Selection", (void *) 0); ++ gtk_object_set_data(GTK_OBJECT(subitem), "Selection", GINT_TO_POINTER(0)); + gtk_widget_show(subitem); + v->cms_gamut_alarm_color_widget[0] = subitem; + +@@ -2089,7 +2095,7 @@ static GtkWidget *xsane_viewer_color_management_build_menu(Viewer *v) + gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(subitem), TRUE); + } + g_signal_connect(GTK_OBJECT(subitem), "toggled", (GtkSignalFunc) xsane_viewer_set_cms_gamut_alarm_color_callback, v); +- gtk_object_set_data(GTK_OBJECT(subitem), "Selection", (void *) 1); ++ gtk_object_set_data(GTK_OBJECT(subitem), "Selection", GINT_TO_POINTER(1)); + gtk_widget_show(subitem); + v->cms_gamut_alarm_color_widget[1] = subitem; + +@@ -2100,7 +2106,7 @@ static GtkWidget *xsane_viewer_color_management_build_menu(Viewer *v) + gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(subitem), TRUE); + } + g_signal_connect(GTK_OBJECT(subitem), "toggled", (GtkSignalFunc) xsane_viewer_set_cms_gamut_alarm_color_callback, v); +- gtk_object_set_data(GTK_OBJECT(subitem), "Selection", (void *) 2); ++ gtk_object_set_data(GTK_OBJECT(subitem), "Selection", GINT_TO_POINTER(2)); + gtk_widget_show(subitem); + v->cms_gamut_alarm_color_widget[2] = subitem; + +@@ -2111,7 +2117,7 @@ static GtkWidget *xsane_viewer_color_management_build_menu(Viewer *v) + gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(subitem), TRUE); + } + g_signal_connect(GTK_OBJECT(subitem), "toggled", (GtkSignalFunc) xsane_viewer_set_cms_gamut_alarm_color_callback, v); +- gtk_object_set_data(GTK_OBJECT(subitem), "Selection", (void *) 3); ++ gtk_object_set_data(GTK_OBJECT(subitem), "Selection", GINT_TO_POINTER(3)); + gtk_widget_show(subitem); + v->cms_gamut_alarm_color_widget[3] = subitem; + +@@ -2122,7 +2128,7 @@ static GtkWidget *xsane_viewer_color_management_build_menu(Viewer *v) + gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(subitem), TRUE); + } + g_signal_connect(GTK_OBJECT(subitem), "toggled", (GtkSignalFunc) xsane_viewer_set_cms_gamut_alarm_color_callback, v); +- gtk_object_set_data(GTK_OBJECT(subitem), "Selection", (void *) 4); ++ gtk_object_set_data(GTK_OBJECT(subitem), "Selection", GINT_TO_POINTER(4)); + gtk_widget_show(subitem); + v->cms_gamut_alarm_color_widget[4] = subitem; + +@@ -2133,7 +2139,7 @@ static GtkWidget *xsane_viewer_color_management_build_menu(Viewer *v) + gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(subitem), TRUE); + } + g_signal_connect(GTK_OBJECT(subitem), "toggled", (GtkSignalFunc) xsane_viewer_set_cms_gamut_alarm_color_callback, v); +- gtk_object_set_data(GTK_OBJECT(subitem), "Selection", (void *) 5); ++ gtk_object_set_data(GTK_OBJECT(subitem), "Selection", GINT_TO_POINTER(5)); + gtk_widget_show(subitem); + v->cms_gamut_alarm_color_widget[5] = subitem; + +@@ -2158,7 +2164,7 @@ static int xsane_viewer_read_image_header(Viewer *v) + if (!infile) + { + DBG(DBG_error, "could not load file %s\n", v->filename); +- return -1; ++ return -1; + } + + xsane_read_pnm_header(infile, &image_info); +@@ -2200,7 +2206,7 @@ static int xsane_viewer_read_image_header(Viewer *v) + + static int xsane_viewer_read_image(Viewer *v) + { +- unsigned char *cms_row, *row, *src_row; ++ unsigned char *cms_row, *row = NULL, *src_row = NULL; + int x, y; + int last_y; + int nread; +@@ -2211,6 +2217,7 @@ static int xsane_viewer_read_image(Viewer *v) + float size; + char *size_unit; + int width, height; ++ int retval = 0; + + #ifdef HAVE_LIBLCMS + cmsHPROFILE hInProfile = NULL; +@@ -2311,7 +2318,8 @@ static int xsane_viewer_read_image(Viewer *v) + + snprintf(buf, sizeof(buf), "%s\n%s %s: %s\n", ERR_CMS_CONVERSION, ERR_CMS_OPEN_ICM_FILE, CMS_SCANNER_ICM, image_info.icm_profile); + xsane_back_gtk_error(buf, TRUE); +- return -1; ++ retval = -1; ++ goto out; + } + + hOutProfile = cmsOpenProfileFromFile(preferences.display_icm_profile, "r"); +@@ -2323,7 +2331,8 @@ static int xsane_viewer_read_image(Viewer *v) + + snprintf(buf, sizeof(buf), "%s\n%s %s: %s\n", ERR_CMS_CONVERSION, ERR_CMS_OPEN_ICM_FILE, CMS_DISPLAY_ICM, preferences.display_icm_profile); + xsane_back_gtk_error(buf, TRUE); +- return -1; ++ retval = -1; ++ goto out; + } + + +@@ -2352,7 +2361,8 @@ static int xsane_viewer_read_image(Viewer *v) + + snprintf(buf, sizeof(buf), "%s\n%s %s: %s\n", ERR_CMS_CONVERSION, ERR_CMS_OPEN_ICM_FILE, CMS_PROOF_ICM, cms_proof_icm_profile); + xsane_back_gtk_error(buf, TRUE); +- return -1; ++ retval = -1; ++ goto out; + } + + hTransform = cmsCreateProofingTransform(hInProfile, cms_input_format, +@@ -2374,7 +2384,8 @@ static int xsane_viewer_read_image(Viewer *v) + + snprintf(buf, sizeof(buf), "%s\n%s\n", ERR_CMS_CONVERSION, ERR_CMS_CREATE_TRANSFORM); + xsane_back_gtk_error(buf, TRUE); +- return -1; ++ retval = -1; ++ goto out; + } + } + #endif +@@ -2414,39 +2425,11 @@ static int xsane_viewer_read_image(Viewer *v) + row = malloc(((int) image_info.image_width * v->zoom) * image_info.channels); + } + +-#ifdef HAVE_LIBLCMS +- if ((v->enable_color_management) && (v->cms_enable)) +- { +- cms_row = malloc(((int) image_info.image_width * v->zoom) * image_info.channels); +- } +- else +-#endif ++ if (!row || !src_row) + { +- cms_row = row; +- } +- +- if (!row || !src_row || !cms_row) +- { +- if (src_row) +- { +- free(src_row); +- } +- +- if (row) +- { +- free(row); +- } +- +-#ifdef HAVE_LIBLCMS +- if ((cms_row) && (v->enable_color_management) && (v->cms_enable)) +- { +- free(cms_row); +- } +-#endif +- +- fclose(infile); +- DBG(DBG_error, "could not allocate memory\n"); +- return -1; ++ DBG(DBG_error, "could not allocate memory\n"); ++ retval = -1; ++ goto out; + } + + +@@ -2514,7 +2497,13 @@ static int xsane_viewer_read_image(Viewer *v) + guint16 *src_row16 = (guint16 *) src_row; + guint16 *dst_row16 = (guint16 *) row; + +- fseek(infile, pos0 + (((int) (y / v->zoom)) * image_info.image_width) * image_info.channels * 2, SEEK_SET); ++ if (fseek(infile, pos0 + (((int) (y / v->zoom)) * image_info.image_width) * image_info.channels * 2, SEEK_SET)) ++ { ++ DBG(DBG_error, "could not seek in file '%s': '%s'\n", v->filename, ++ strerror(errno)); ++ retval = -1; ++ goto out; ++ } + nread = fread(src_row, 2 * image_info.channels, image_info.image_width, infile); + + if (image_info.channels > 1) +@@ -2541,10 +2530,22 @@ static int xsane_viewer_read_image(Viewer *v) + #ifdef HAVE_LIBLCMS + if ((v->enable_color_management) && (v->cms_enable)) + { ++ cms_row = malloc(((int) image_info.image_width * v->zoom) * image_info.channels); ++ if (! cms_row) ++ { ++ DBG(DBG_error, "could not allocate memory\n"); ++ retval = -1; ++ goto out; ++ } + cmsDoTransform(hTransform, row, cms_row, image_info.image_width * v->zoom); ++ gtk_preview_draw_row(GTK_PREVIEW(v->window), cms_row, 0, y, image_info.image_width * v->zoom); ++ free(cms_row); + } ++ else + #endif +- gtk_preview_draw_row(GTK_PREVIEW(v->window), cms_row, 0, y, image_info.image_width * v->zoom); ++ { ++ gtk_preview_draw_row(GTK_PREVIEW(v->window), row, 0, y, image_info.image_width * v->zoom); ++ } + } + + gtk_preview_put(GTK_PREVIEW(v->window), v->window->window, v->window->style->black_gc, 0, 0, 0, 0, +@@ -2610,9 +2611,23 @@ static int xsane_viewer_read_image(Viewer *v) + gtk_window_set_default_size(GTK_WINDOW(v->top), width, height); + } + +- free(row); +- free(src_row); +- fclose(infile); ++out: ++ if (row) ++ { ++ free(row); ++ } ++ ++ if (src_row) ++ { ++ free(src_row); ++ } ++ ++ /* cms_row is freed directly after use */ ++ ++ if (infile) ++ { ++ fclose(infile); ++ } + + #ifdef HAVE_LIBLCMS + if ((v->enable_color_management) && (v->cms_enable)) +@@ -2621,7 +2636,7 @@ static int xsane_viewer_read_image(Viewer *v) + } + #endif + +- return 0; ++ return retval; + } + + #if 0 /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ +@@ -3066,7 +3081,7 @@ Viewer *xsane_viewer_new(char *filename, char *selection_filetype, int allow_red + zoom_menu_item = gtk_menu_item_new_with_label(buf); + gtk_menu_append(GTK_MENU(zoom_menu), zoom_menu_item); + g_signal_connect(GTK_OBJECT(zoom_menu_item), "activate", (GtkSignalFunc) xsane_viewer_zoom_callback, v); +- gtk_object_set_data(GTK_OBJECT(zoom_menu_item), "Selection", (void *) xsane_viewer_zoom[i]); ++ gtk_object_set_data(GTK_OBJECT(zoom_menu_item), "Selection", GINT_TO_POINTER(xsane_viewer_zoom[i])); + gtk_widget_show(zoom_menu_item); + if (v->zoom*100 == xsane_viewer_zoom[i]) + { +diff --git a/src/xsane.c b/src/xsane.c +index 02b4da4..a4a3f1e 100644 +--- a/src/xsane.c ++++ b/src/xsane.c +@@ -585,7 +585,7 @@ static void xsane_show_batch_scan_callback(GtkWidget * widget) + + static void xsane_paper_orientation_callback(GtkWidget *widget, gpointer data) + { +- int pos = (int) data; ++ int pos = GPOINTER_TO_INT(data); + + DBG(DBG_proc, "xsane_paper_orientation_callback\n"); + +@@ -601,7 +601,7 @@ static void xsane_printer_callback(GtkWidget *widget, gpointer data) + + DBG(DBG_proc, "xsane_printer_callback\n"); + +- preferences.printernr = (int) data; ++ preferences.printernr = GPOINTER_TO_INT(data); + + switch (xsane.param.format) + { +@@ -1165,7 +1165,7 @@ static void xsane_scanmode_menu_callback(GtkWidget *widget, gpointer data) + + static void xsane_cms_function_menu_callback(GtkWidget *widget, gpointer data) + { +- preferences.cms_function = (int) data; ++ preferences.cms_function = GPOINTER_TO_INT(data); + DBG(DBG_proc, "xsane_cms_function_menu_callback(%d)\n", preferences.cms_function); + } + +@@ -1402,7 +1402,7 @@ GtkWidget *xsane_update_xsane_callback() /* creates the XSane option window */ + + + gtk_container_add(GTK_CONTAINER(paper_orientation_menu), paper_orientation_item); +- g_signal_connect(GTK_OBJECT(paper_orientation_item), "activate", (GtkSignalFunc) xsane_paper_orientation_callback, (void *) i); ++ g_signal_connect(GTK_OBJECT(paper_orientation_item), "activate", (GtkSignalFunc) xsane_paper_orientation_callback, GINT_TO_POINTER(i)); + + gtk_widget_show(paper_orientation_item); + } +@@ -1436,7 +1436,7 @@ GtkWidget *xsane_update_xsane_callback() /* creates the XSane option window */ + GDK_F1+i, GDK_SHIFT_MASK, DEF_GTK_MENU_ACCEL_VISIBLE | DEF_GTK_ACCEL_LOCKED); + } + gtk_container_add(GTK_CONTAINER(xsane_printer_menu), xsane_printer_item); +- g_signal_connect(GTK_OBJECT(xsane_printer_item), "activate", (GtkSignalFunc) xsane_printer_callback, (void *) i); ++ g_signal_connect(GTK_OBJECT(xsane_printer_item), "activate", (GtkSignalFunc) xsane_printer_callback, GINT_TO_POINTER(i)); + gtk_widget_show(xsane_printer_item); + } + +@@ -1584,9 +1584,9 @@ GtkWidget *xsane_update_xsane_callback() /* creates the XSane option window */ + { + xsane_medium_item = gtk_menu_item_new_with_label(preferences.medium[i]->name); + gtk_menu_append(GTK_MENU(xsane_medium_menu), xsane_medium_item); +- g_signal_connect(GTK_OBJECT(xsane_medium_item), "button_press_event", (GtkSignalFunc) xsane_medium_context_menu_callback, (void *) i); +- g_signal_connect(GTK_OBJECT(xsane_medium_item), "activate", (GtkSignalFunc) xsane_set_medium_callback, (void *) i); +- gtk_object_set_data(GTK_OBJECT(xsane_medium_item), "Selection", (void *) i); ++ g_signal_connect(GTK_OBJECT(xsane_medium_item), "button_press_event", (GtkSignalFunc) xsane_medium_context_menu_callback, GINT_TO_POINTER(i)); ++ g_signal_connect(GTK_OBJECT(xsane_medium_item), "activate", (GtkSignalFunc) xsane_set_medium_callback, GINT_TO_POINTER(i)); ++ gtk_object_set_data(GTK_OBJECT(xsane_medium_item), "Selection", GINT_TO_POINTER(i)); + + gtk_widget_show(xsane_medium_item); + } +@@ -2697,7 +2697,7 @@ static gint xsane_medium_move_up_callback(GtkWidget *widget, GtkWidget *medium_w + + DBG(DBG_proc, "xsane_medium_move_up_callback\n"); + +- selection = (int) gtk_object_get_data(GTK_OBJECT(medium_widget), "Selection"); ++ selection = GPOINTER_TO_INT(gtk_object_get_data(GTK_OBJECT(medium_widget), "Selection")); + + if (selection > 1) /* make sure "full range" stays at top */ + { +@@ -2732,7 +2732,7 @@ static gint xsane_medium_move_down_callback(GtkWidget *widget, GtkWidget *medium + + DBG(DBG_proc, "xsane_medium_move_up_callback\n"); + +- selection = (int) gtk_object_get_data(GTK_OBJECT(medium_widget), "Selection"); ++ selection = GPOINTER_TO_INT(gtk_object_get_data(GTK_OBJECT(medium_widget), "Selection")); + + if ((selection) && (selection < preferences.medium_definitions-1)) + { +@@ -2771,7 +2771,7 @@ static gint xsane_medium_rename_callback(GtkWidget *widget, GtkWidget *medium_wi + + DBG(DBG_proc, "xsane_medium_rename_callback\n"); + +- selection = (int) gtk_object_get_data(GTK_OBJECT(medium_widget), "Selection"); ++ selection = GPOINTER_TO_INT(gtk_object_get_data(GTK_OBJECT(medium_widget), "Selection")); + + oldname = strdup(preferences.medium[selection]->name); + +@@ -2779,7 +2779,7 @@ static gint xsane_medium_rename_callback(GtkWidget *widget, GtkWidget *medium_wi + + /* set menu in correct state, is a bit strange this way but I do not have a better idea */ + old_medium_menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(xsane.medium_widget)); +- old_selection = (int) gtk_object_get_data(GTK_OBJECT(gtk_menu_get_active(GTK_MENU(old_medium_menu))), "Selection"); ++ old_selection = GPOINTER_TO_INT(gtk_object_get_data(GTK_OBJECT(gtk_menu_get_active(GTK_MENU(old_medium_menu))), "Selection")); + gtk_menu_popdown(GTK_MENU(old_medium_menu)); + gtk_option_menu_set_history(GTK_OPTION_MENU(xsane.medium_widget), old_selection); + +@@ -2814,13 +2814,13 @@ static gint xsane_medium_add_callback(GtkWidget *widget, GtkWidget *medium_widge + DBG(DBG_proc, "xsane_medium_add_callback\n"); + + /* add new item after selected item */ +- selection = 1 + (int) gtk_object_get_data(GTK_OBJECT(medium_widget), "Selection"); ++ selection = 1 + GPOINTER_TO_INT(gtk_object_get_data(GTK_OBJECT(medium_widget), "Selection")); + + oldname = strdup(TEXT_NEW_MEDIA_NAME); + + /* set menu in correct state, is a bit strange this way but I do not have a better idea */ + old_medium_menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(xsane.medium_widget)); +- old_selection = (int) gtk_object_get_data(GTK_OBJECT(gtk_menu_get_active(GTK_MENU(old_medium_menu))), "Selection"); ++ old_selection = GPOINTER_TO_INT(gtk_object_get_data(GTK_OBJECT(gtk_menu_get_active(GTK_MENU(old_medium_menu))), "Selection")); + gtk_menu_popdown(GTK_MENU(old_medium_menu)); + gtk_option_menu_set_history(GTK_OPTION_MENU(xsane.medium_widget), old_selection); + +@@ -2895,7 +2895,7 @@ static gint xsane_medium_delete_callback(GtkWidget *widget, GtkWidget *medium_wi + + DBG(DBG_proc, "xsane_medium_delete_callback\n"); + +- selection = (int) gtk_object_get_data(GTK_OBJECT(medium_widget), "Selection"); ++ selection = GPOINTER_TO_INT(gtk_object_get_data(GTK_OBJECT(medium_widget), "Selection")); + + if (selection) /* full range can not be deleted */ + { +@@ -2951,7 +2951,7 @@ static gint xsane_medium_context_menu_callback(GtkWidget *widget, GdkEvent *even + + DBG(DBG_proc, "xsane_medium_context_menu_callback\n"); + +- selection = (int) gtk_object_get_data(GTK_OBJECT(widget), "Selection"); ++ selection = GPOINTER_TO_INT(gtk_object_get_data(GTK_OBJECT(widget), "Selection")); + + if (event->type == GDK_BUTTON_PRESS) + { +@@ -3022,7 +3022,7 @@ static gint xsane_medium_context_menu_callback(GtkWidget *widget, GdkEvent *even + + static void xsane_set_medium_callback(GtkWidget *widget, gpointer data) + { +- int medium_nr = (int) data; ++ int medium_nr = GPOINTER_TO_INT(data); + + if (medium_nr != preferences.medium_nr) + { +@@ -3205,11 +3205,11 @@ static void xsane_set_update_policy_callback(GtkWidget *widget, gpointer data) + DBG(DBG_proc, "xsane_set_update_policy_callback\n"); + + g_signal_handlers_block_by_func(GTK_OBJECT(xsane.update_policy_continu), (GtkSignalFunc) xsane_set_update_policy_callback, +- (void *) GTK_UPDATE_CONTINUOUS); ++ GINT_TO_POINTER(GTK_UPDATE_CONTINUOUS)); + g_signal_handlers_block_by_func(GTK_OBJECT(xsane.update_policy_discont), (GtkSignalFunc) xsane_set_update_policy_callback, +- (void *) GTK_UPDATE_DISCONTINUOUS); ++ GINT_TO_POINTER(GTK_UPDATE_DISCONTINUOUS)); + g_signal_handlers_block_by_func(GTK_OBJECT(xsane.update_policy_delayed), (GtkSignalFunc) xsane_set_update_policy_callback, +- (void *) GTK_UPDATE_DELAYED); ++ GINT_TO_POINTER(GTK_UPDATE_DELAYED)); + + if (policy == GTK_UPDATE_CONTINUOUS) + { +@@ -3231,11 +3231,11 @@ static void xsane_set_update_policy_callback(GtkWidget *widget, gpointer data) + } + + g_signal_handlers_unblock_by_func(GTK_OBJECT(xsane.update_policy_continu), (GtkSignalFunc) xsane_set_update_policy_callback, +- (void *) GTK_UPDATE_CONTINUOUS); ++ GINT_TO_POINTER(GTK_UPDATE_CONTINUOUS)); + g_signal_handlers_unblock_by_func(GTK_OBJECT(xsane.update_policy_discont), (GtkSignalFunc) xsane_set_update_policy_callback, +- (void *) GTK_UPDATE_DISCONTINUOUS); ++ GINT_TO_POINTER(GTK_UPDATE_DISCONTINUOUS)); + g_signal_handlers_unblock_by_func(GTK_OBJECT(xsane.update_policy_delayed), (GtkSignalFunc) xsane_set_update_policy_callback, +- (void *) GTK_UPDATE_DELAYED); ++ GINT_TO_POINTER(GTK_UPDATE_DELAYED)); + + preferences.gtk_update_policy = policy; + xsane_pref_save(); +@@ -3389,7 +3389,7 @@ static void xsane_info_dialog(GtkWidget *widget, gpointer data) + snprintf(buf, sizeof(buf), "%d bit", (int) (0.5 + log(opt->constraint.range->max+1.0) / log(2.0))); + label = xsane_info_table_text_new(table, buf, 1, 2); + } +- else if ((!xsane.xsane_channels > 1) && (xsane.scanner_gamma_gray)) /* gray gamma correction by scanner */ ++ else if ((!(xsane.xsane_channels > 1)) && (xsane.scanner_gamma_gray)) /* gray gamma correction by scanner */ + { + const SANE_Option_Descriptor *opt; + +@@ -3807,6 +3807,13 @@ static void xsane_close_fds_for_exec(signed int first_fd_to_leave_open, ...) + + open_max = (int) sysconf (_SC_OPEN_MAX); + ++ if (open_max < 0) ++ { ++ DBG(DBG_error, "xsane_close_fds_for_exec(): Can't determine maximum " ++ "number of open files."); ++ return; ++ } ++ + close_fds = malloc (open_max); + + memset (close_fds, 1, open_max); +@@ -4147,7 +4154,7 @@ static GtkWidget *xsane_view_build_menu(void) + { + gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(subitem), TRUE); + } +- g_signal_connect(GTK_OBJECT(subitem), "toggled", (GtkSignalFunc) xsane_set_update_policy_callback, (void *) GTK_UPDATE_CONTINUOUS); ++ g_signal_connect(GTK_OBJECT(subitem), "toggled", (GtkSignalFunc) xsane_set_update_policy_callback, GINT_TO_POINTER(GTK_UPDATE_CONTINUOUS)); + gtk_widget_show(subitem); + xsane.update_policy_continu = subitem; + +@@ -4157,7 +4164,7 @@ static GtkWidget *xsane_view_build_menu(void) + { + gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(subitem), TRUE); + } +- g_signal_connect(GTK_OBJECT(subitem), "toggled", (GtkSignalFunc) xsane_set_update_policy_callback, (void *) GTK_UPDATE_DISCONTINUOUS); ++ g_signal_connect(GTK_OBJECT(subitem), "toggled", (GtkSignalFunc) xsane_set_update_policy_callback, GINT_TO_POINTER(GTK_UPDATE_DISCONTINUOUS)); + gtk_widget_show(subitem); + xsane.update_policy_discont = subitem; + +@@ -4167,7 +4174,7 @@ static GtkWidget *xsane_view_build_menu(void) + { + gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(subitem), TRUE); + } +- g_signal_connect(GTK_OBJECT(subitem), "toggled", (GtkSignalFunc) xsane_set_update_policy_callback, (void *) GTK_UPDATE_DELAYED); ++ g_signal_connect(GTK_OBJECT(subitem), "toggled", (GtkSignalFunc) xsane_set_update_policy_callback, GINT_TO_POINTER(GTK_UPDATE_DELAYED)); + gtk_widget_show(subitem); + xsane.update_policy_delayed = subitem; + +@@ -5709,8 +5716,8 @@ static void xsane_choose_device(void) + gtk_widget_add_accelerator(button, "clicked", device_selection_accelerator_group, GDK_F1+i, 0, DEF_GTK_ACCEL_LOCKED); + } + +- g_signal_connect(GTK_OBJECT(button), "button_press_event", (GtkSignalFunc) xsane_select_device_by_mouse_callback, (void *) (long) i); +- g_signal_connect(GTK_OBJECT(button), "clicked", (GtkSignalFunc) xsane_select_device_by_key_callback, (void *) (long) i); ++ g_signal_connect(GTK_OBJECT(button), "button_press_event", (GtkSignalFunc) xsane_select_device_by_mouse_callback, GINT_TO_POINTER(i)); ++ g_signal_connect(GTK_OBJECT(button), "clicked", (GtkSignalFunc) xsane_select_device_by_key_callback, GINT_TO_POINTER(i)); + gtk_box_pack_start(GTK_BOX(device_vbox), button, TRUE, TRUE, 0); + gtk_widget_show(button); + owner = gtk_radio_button_group(GTK_RADIO_BUTTON(button));; +-- +1.9.0 + diff --git a/source/xap/xsane/xsane-0.999-lcms2.patch b/source/xap/xsane/xsane-0.999-lcms2.patch new file mode 100644 index 000000000..c3d696c28 --- /dev/null +++ b/source/xap/xsane/xsane-0.999-lcms2.patch @@ -0,0 +1,372 @@ +From 30af0e2edbf061b71bed9536d826894449f0390d Mon Sep 17 00:00:00 2001 +From: Nils Philippsen <nils@redhat.com> +Date: Mon, 23 Sep 2013 16:11:31 +0200 +Subject: [PATCH] patch: lcms2 + +Squashed commit of the following: + +commit f975accf7e1a08438b63580ea848457d373200f5 +Author: Nils Philippsen <nils@redhat.com> +Date: Mon Sep 23 14:53:45 2013 +0200 + + Add support for lcms 2.x. +--- + configure.in | 22 ++++++++++++++---- + include/config.h.in | 8 ++++++- + src/xsane-preview.c | 6 +++-- + src/xsane-save.c | 38 ++++++++++++++++++++++++++----- + src/xsane-viewer.c | 65 ++++++++++++++++++++++++++++++++++++++++++++++++++--- + src/xsane.h | 8 ++++++- + 6 files changed, 130 insertions(+), 17 deletions(-) + +diff --git a/configure.in b/configure.in +index df7b114..3659c97 100644 +--- a/configure.in ++++ b/configure.in +@@ -130,7 +130,17 @@ if test "${USE_TIFF}" = "yes"; then + fi + + if test "${USE_LCMS}" = "yes"; then +- AC_CHECK_LIB(lcms, cmsOpenProfileFromFile) ++ AC_SEARCH_LIBS(cmsOpenProfileFromFile, [lcms2 lcms]) ++ if test "${ac_cv_search_cmsOpenProfileFromFile}" != "no"; then ++ AC_DEFINE(HAVE_LIBLCMS, 1, [Define if LCMS is to be used.]) ++ fi ++ if test "${ac_cv_search_cmsOpenProfileFromFile}" == "-llcms2"; then ++ AC_DEFINE(HAVE_LIBLCMS2, 1, [Define if you have liblcms2.]) ++ else ++ if test "${ac_cv_search_cmsOpenProfileFromFile}" == "-llcms"; then ++ AC_DEFINE(HAVE_LIBLCMS1, 1, [Define if you have liblcms.]) ++ fi ++ fi + fi + + dnl Checks for library functions. +@@ -294,10 +304,14 @@ else + echo "* - PNG support deactivated *" + fi + +-if test "${ac_cv_lib_lcms_cmsOpenProfileFromFile}" = "yes"; then +- echo "* - LCMS (color management) support activated *" ++if test "${ac_cv_search_cmsOpenProfileFromFile}" = "-llcms2"; then ++ echo "* - LCMS (color management) support activated (lcms2) *" + else +- echo "* - LCMS (color management) support deactivated *" ++ if test "${ac_cv_search_cmsOpenProfileFromFile}" = "-llcms"; then ++ echo "* - LCMS (color management) support activated (lcms) *" ++ else ++ echo "* - LCMS (color management) support deactivated *" ++ fi + fi + + echo "* *" +diff --git a/include/config.h.in b/include/config.h.in +index ecc9637..f9a3e40 100755 +--- a/include/config.h.in ++++ b/include/config.h.in +@@ -290,9 +290,15 @@ + /* Define if you have libtiff. */ + #undef HAVE_LIBTIFF + +-/* Define if you have liblcms. */ ++/* Define if LCMS is to be used. */ + #undef HAVE_LIBLCMS + ++/* Define if you have liblcms. */ ++#undef HAVE_LIBLCMS1 ++ ++/* Define if you have liblcms2. */ ++#undef HAVE_LIBLCMS2 ++ + #ifndef HAVE_STRNCASECMP + /* OS/2 needs this */ + # define strncasecmp(a, b, c) strnicmp(a, b, c) +diff --git a/src/xsane-preview.c b/src/xsane-preview.c +index 6327ca7..6eaf687 100644 +--- a/src/xsane-preview.c ++++ b/src/xsane-preview.c +@@ -6346,8 +6346,8 @@ int preview_do_color_correction(Preview *p) + cmsHPROFILE hOutProfile = NULL; + cmsHPROFILE hProofProfile = NULL; + cmsHTRANSFORM hTransform = NULL; +- DWORD input_format, output_format; +- DWORD cms_flags = 0; ++ cmsUInt32Number input_format, output_format; ++ cmsUInt32Number cms_flags = 0; + int proof = 0; + char *cms_proof_icm_profile = NULL; + int linesize = 0; +@@ -6355,7 +6355,9 @@ int preview_do_color_correction(Preview *p) + + DBG(DBG_proc, "preview_do_color_correction\n"); + ++#ifdef HAVE_LIBLCMS1 + cmsErrorAction(LCMS_ERROR_SHOW); ++#endif + + if (preferences.cms_bpc) + { +diff --git a/src/xsane-save.c b/src/xsane-save.c +index 75e0a63..2d0e44b 100644 +--- a/src/xsane-save.c ++++ b/src/xsane-save.c +@@ -832,9 +832,9 @@ cmsHTRANSFORM xsane_create_cms_transform(Image_info *image_info, int cms_functio + cmsHPROFILE hInProfile = NULL; + cmsHPROFILE hOutProfile = NULL; + cmsHTRANSFORM hTransform = NULL; +- DWORD cms_input_format; +- DWORD cms_output_format; +- DWORD cms_flags = 0; ++ cmsUInt32Number cms_input_format; ++ cmsUInt32Number cms_output_format; ++ cmsUInt32Number cms_flags = 0; + + if (cms_function == XSANE_CMS_FUNCTION_EMBED_SCANNER_ICM_PROFILE) + { +@@ -843,7 +843,9 @@ cmsHTRANSFORM xsane_create_cms_transform(Image_info *image_info, int cms_functio + + DBG(DBG_info, "Prepare CMS transform\n"); + ++#ifdef HAVE_LIBLCMS1 + cmsErrorAction(LCMS_ERROR_SHOW); ++#endif + + if (cms_bpc) + { +@@ -890,10 +892,18 @@ cmsHTRANSFORM xsane_create_cms_transform(Image_info *image_info, int cms_functio + if (image_info->channels == 1) /* == 1 (grayscale) */ + { + #if 1 /* xxx oli */ ++# ifdef HAVE_LIBLCMS2 ++ cmsToneCurve *Gamma = cmsBuildGamma(NULL, 2.2); ++# else + LPGAMMATABLE Gamma = cmsBuildGamma(256, 2.2); ++# endif + + hOutProfile = cmsCreateGrayProfile(cmsD50_xyY(), Gamma); ++# ifdef HAVE_LIBLCMS2 ++ cmsFreeToneCurve(Gamma); ++# else + cmsFreeGamma(Gamma); ++# endif + #endif + } + else +@@ -2896,7 +2906,11 @@ static int xsane_write_CSA(FILE *outfile, char *input_profile, int intent) + return -1; + } + ++#ifdef HAVE_LIBLCMS2 ++ n = cmsGetPostScriptCSA(NULL, hProfile, intent, 0, NULL, 0); ++#else + n = cmsGetPostScriptCSA(hProfile, intent, NULL, 0); ++#endif + if (n == 0) + { + return -2; +@@ -2908,7 +2922,11 @@ static int xsane_write_CSA(FILE *outfile, char *input_profile, int intent) + return -3; + } + ++#ifdef HAVE_LIBLCMS2 ++ cmsGetPostScriptCSA(NULL, hProfile, intent, 0, buffer, n); ++#else + cmsGetPostScriptCSA(hProfile, intent, buffer, n); ++#endif + buffer[n] = 0; + + fprintf(outfile, "%s", buffer); +@@ -2927,7 +2945,7 @@ static int xsane_write_CRD(FILE *outfile, char *output_profile, int intent, int + cmsHPROFILE hProfile; + size_t n; + char* buffer; +- DWORD flags = cmsFLAGS_NODEFAULTRESOURCEDEF; ++ cmsUInt32Number flags = cmsFLAGS_NODEFAULTRESOURCEDEF; + + hProfile = cmsOpenProfileFromFile(output_profile, "r"); + if (!hProfile) +@@ -2940,7 +2958,11 @@ static int xsane_write_CRD(FILE *outfile, char *output_profile, int intent, int + flags |= cmsFLAGS_BLACKPOINTCOMPENSATION; + } + ++#ifdef HAVE_LIBLCMS2 ++ n = cmsGetPostScriptCRD(NULL, hProfile, intent, flags, NULL, 0); ++#else + n = cmsGetPostScriptCRDEx(hProfile, intent, flags, NULL, 0); ++#endif + if (n == 0) + { + return -2; +@@ -2952,7 +2974,11 @@ static int xsane_write_CRD(FILE *outfile, char *output_profile, int intent, int + return -3; + } + ++#ifdef HAVE_LIBLCMS2 ++ cmsGetPostScriptCRD(NULL, hProfile, intent, flags, buffer, n); ++#else + cmsGetPostScriptCRDEx(hProfile, intent, flags, buffer, n); ++#endif + buffer[n] = 0; + + fprintf(outfile, "%s", buffer); +@@ -4349,7 +4375,7 @@ static void xsane_jpeg_embed_scanner_icm_profile(j_compress_ptr cinfo_ptr, const + { + FILE *icm_profile; + size_t size, embed_len; +- LPBYTE embed_buffer; ++ cmsUInt8Number *embed_buffer; + + DBG(DBG_proc, "xsane_jpeg_embed_scanner_icm_profile(%s)\n", icm_filename); + +@@ -4363,7 +4389,7 @@ static void xsane_jpeg_embed_scanner_icm_profile(j_compress_ptr cinfo_ptr, const + size = ftell(icm_profile); + fseek(icm_profile, 0, SEEK_SET); + +- embed_buffer = (LPBYTE) malloc(size + 1); ++ embed_buffer = (cmsUInt8Number *) malloc(size + 1); + if (embed_buffer) + { + embed_len = fread(embed_buffer, 1, size, icm_profile); +diff --git a/src/xsane-viewer.c b/src/xsane-viewer.c +index 69a444d..844c077 100644 +--- a/src/xsane-viewer.c ++++ b/src/xsane-viewer.c +@@ -1795,6 +1795,9 @@ static void xsane_viewer_set_cms_gamut_alarm_color_callback(GtkWidget *widget, g + { + Viewer *v = (Viewer *) data; + int val; ++#ifdef HAVE_LIBLCMS2 ++ cmsUInt16Number alarm_codes[cmsMAXCHANNELS]; ++#endif + + g_signal_handlers_block_by_func(GTK_OBJECT(v->cms_gamut_alarm_color_widget[0]), (GtkSignalFunc) xsane_viewer_set_cms_gamut_alarm_color_callback, v); + g_signal_handlers_block_by_func(GTK_OBJECT(v->cms_gamut_alarm_color_widget[1]), (GtkSignalFunc) xsane_viewer_set_cms_gamut_alarm_color_callback, v); +@@ -1811,6 +1814,49 @@ static void xsane_viewer_set_cms_gamut_alarm_color_callback(GtkWidget *widget, g + v->cms_gamut_alarm_color = val; + gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(v->cms_gamut_alarm_color_widget[v->cms_gamut_alarm_color]), TRUE); + ++#ifdef HAVE_LIBLCMS2 ++ switch(v->cms_gamut_alarm_color) ++ { ++ default: ++ case 0: /* black */ ++ alarm_codes[0] = (cmsUInt16Number) 0; ++ alarm_codes[1] = (cmsUInt16Number) 0; ++ alarm_codes[2] = (cmsUInt16Number) 0; ++ break; ++ ++ case 1: /* gray */ ++ alarm_codes[0] = (cmsUInt16Number) 128; ++ alarm_codes[1] = (cmsUInt16Number) 128; ++ alarm_codes[2] = (cmsUInt16Number) 128; ++ break; ++ ++ case 2: /* white */ ++ alarm_codes[0] = (cmsUInt16Number) 255; ++ alarm_codes[1] = (cmsUInt16Number) 255; ++ alarm_codes[2] = (cmsUInt16Number) 255; ++ break; ++ ++ case 3: /* red */ ++ alarm_codes[0] = (cmsUInt16Number) 255; ++ alarm_codes[1] = (cmsUInt16Number) 0; ++ alarm_codes[2] = (cmsUInt16Number) 0; ++ break; ++ ++ case 4: /* green */ ++ alarm_codes[0] = (cmsUInt16Number) 0; ++ alarm_codes[1] = (cmsUInt16Number) 255; ++ alarm_codes[2] = (cmsUInt16Number) 0; ++ break; ++ ++ case 5: /* blue */ ++ alarm_codes[0] = (cmsUInt16Number) 0; ++ alarm_codes[1] = (cmsUInt16Number) 0; ++ alarm_codes[2] = (cmsUInt16Number) 255; ++ break; ++ } ++ ++ cmsSetAlarmCodes(alarm_codes); ++#else + switch(v->cms_gamut_alarm_color) + { + default: +@@ -1838,6 +1884,7 @@ static void xsane_viewer_set_cms_gamut_alarm_color_callback(GtkWidget *widget, g + cmsSetAlarmCodes(0, 0, 255); + break; + } ++#endif + + g_signal_handlers_unblock_by_func(GTK_OBJECT(v->cms_gamut_alarm_color_widget[0]), (GtkSignalFunc) xsane_viewer_set_cms_gamut_alarm_color_callback, v); + g_signal_handlers_unblock_by_func(GTK_OBJECT(v->cms_gamut_alarm_color_widget[1]), (GtkSignalFunc) xsane_viewer_set_cms_gamut_alarm_color_callback, v); +@@ -2172,9 +2219,9 @@ static int xsane_viewer_read_image(Viewer *v) + cmsHTRANSFORM hTransform = NULL; + int proof = 0; + char *cms_proof_icm_profile = NULL; +- DWORD cms_input_format; +- DWORD cms_output_format; +- DWORD cms_flags = 0; ++ cmsUInt32Number cms_input_format; ++ cmsUInt32Number cms_output_format; ++ cmsUInt32Number cms_flags = 0; + #endif + + /* open imagefile */ +@@ -2203,7 +2250,9 @@ static int xsane_viewer_read_image(Viewer *v) + + if ((v->enable_color_management) && (v->cms_enable)) + { ++#ifdef HAVE_LIBLCMS1 + cmsErrorAction(LCMS_ERROR_SHOW); ++#endif + + if (v->cms_bpc) + { +@@ -2801,6 +2850,9 @@ Viewer *xsane_viewer_new(char *filename, char *selection_filetype, int allow_red + GtkWidget *scrolled_window; + GtkWidget *zoom_option_menu, *zoom_menu, *zoom_menu_item; + int i, selection; ++#ifdef HAVE_LIBLCMS2 ++ cmsUInt16Number alarm_codes[cmsMAXCHANNELS]; ++#endif + + DBG(DBG_proc, "viewer_new(%s)\n", filename); + +@@ -2830,8 +2882,15 @@ Viewer *xsane_viewer_new(char *filename, char *selection_filetype, int allow_red + v->cms_proofing_intent = INTENT_ABSOLUTE_COLORIMETRIC; + v->cms_gamut_check = 0; + v->cms_gamut_alarm_color = 3; /* red */ ++#ifdef HAVE_LIBLCMS2 ++ alarm_codes[0] = (cmsUInt16Number) 255; ++ alarm_codes[1] = (cmsUInt16Number) 0; ++ alarm_codes[2] = (cmsUInt16Number) 0; ++ cmsSetAlarmCodes(alarm_codes); ++#else + cmsSetAlarmCodes(255, 0, 0); + #endif ++#endif + if (selection_filetype) + { + v->selection_filetype = strdup(selection_filetype); +diff --git a/src/xsane.h b/src/xsane.h +index 4067d61..adcc0ed 100644 +--- a/src/xsane.h ++++ b/src/xsane.h +@@ -70,7 +70,13 @@ + #include <gtk/gtk.h> + + #ifdef HAVE_LIBLCMS +-# include "lcms.h" ++# ifdef HAVE_LIBLCMS2 ++# include "lcms2.h" ++# else ++# include "lcms.h" ++typedef BYTE cmsUInt8Number; ++typedef DWORD cmsUInt32Number; ++# endif + #else + # define cmsHTRANSFORM void * + #endif +-- +1.8.3.1 + diff --git a/source/xap/xsane/xsane-0.999-man-page.patch b/source/xap/xsane/xsane-0.999-man-page.patch new file mode 100644 index 000000000..169dad3e3 --- /dev/null +++ b/source/xap/xsane/xsane-0.999-man-page.patch @@ -0,0 +1,109 @@ +From 2dbbd80a5fb80741729c7cd5027af058b9c08c2c Mon Sep 17 00:00:00 2001 +From: Nils Philippsen <nils@redhat.com> +Date: Mon, 8 Jul 2013 17:46:06 +0200 +Subject: [PATCH] patch: man-page + +Squashed commit of the following: + +commit e1915d50b677458127a8ad1c7953ee1d2e2ce250 +Author: Nils Philippsen <nils@redhat.com> +Date: Mon Jul 8 17:44:26 2013 +0200 + + xsane.man: update command line options +--- + doc/xsane.man | 29 ++++++++++++++++++++++++----- + 1 file changed, 24 insertions(+), 5 deletions(-) + +diff --git a/doc/xsane.man b/doc/xsane.man +index ee363a8..38b453d 100644 +--- a/doc/xsane.man ++++ b/doc/xsane.man +@@ -4,6 +4,7 @@ + xsane - scanner frontend for SANE + .SH SYNOPSIS + .B xsane ++.RB [ --help | -h ] + .RB [ --version | -v ] + .RB [ --license | -l ] + .RB [ --device-settings +@@ -13,8 +14,9 @@ xsane - scanner frontend for SANE + .RB [ --viewer | -V ] + .RB [ --save | -s ] + .RB [ --copy | -c ] ++.RB [ --multipage | -m ] + .RB [ --fax | -f ] +-.RB [ --mail | -m ] ++.RB [ --email | -e ] + .RB [ --no-mode-selection | -n ] + .RB [ --Fixed | -F ] + .RB [ --Resizable | -R ] +@@ -25,6 +27,7 @@ xsane - scanner frontend for SANE + .IR name ] + .RB [ --display + .IR d ] ++.RB [ --no-xshm ] + .RB [ --sync ] + .RI [ devicename ] + .SH DESCRIPTION +@@ -121,6 +124,12 @@ and + .SH OPTIONS + .PP + If the ++.B --help ++or ++.B -h ++flag is given xsane displays a short help message and exits. ++.PP ++If the + .B --version + or + .B -v +@@ -128,7 +137,7 @@ flag is given xsane prints a version information, some + information about gtk+ and gimp version it is compiled + against and lists the supported file formats, then it exits. + .PP +-when the ++If the + .B --license + or + .B -l +@@ -161,16 +170,22 @@ or + flag forces xsane to start in copy mode. + .PP + The ++.B --multipage ++or ++.B -m ++flag forces xsane to start in multipage mode. ++.PP ++The + .B --fax + or + .B -f + flag forces xsane to start in fax mode. + .PP + The +-.B --mail ++.B --email + or +-.B -m +-flag forces xsane to start in mail mode. ++.B -e ++flag forces xsane to start in e-mail mode. + .PP + The + .B --no-mode-selection +@@ -217,6 +232,10 @@ flag selects the X11 display used to present the graphical user-interface + for details). + .PP + The ++.B --no-xshm ++flag forces xsane not to use shared memory images. ++.PP ++The + .B --sync + flag requests a synchronous connection with the X11 server. This is for + debugging purposes only. +-- +1.8.3.1 + diff --git a/source/xap/xsane/xsane-0.999-no-file-selected.patch b/source/xap/xsane/xsane-0.999-no-file-selected.patch new file mode 100644 index 000000000..5550c4c08 --- /dev/null +++ b/source/xap/xsane/xsane-0.999-no-file-selected.patch @@ -0,0 +1,91 @@ +From 2f7abcaa7ad39f118b2f49fdcba9c90b37b3d972 Mon Sep 17 00:00:00 2001 +From: Nils Philippsen <nils@redhat.com> +Date: Fri, 5 Jul 2013 16:15:55 +0200 +Subject: [PATCH] patch: no-file-selected + +Squashed commit of the following: + +commit f887550276e324151947960292a7266c71aeb573 +Author: Pavel Polischouk <pavel.polischouk@gmail.com> +Date: Fri Nov 25 23:55:49 2011 -0500 + + fix changing working directory (#621778) + + The patch checks the value returned by xsane_back_gtk_get_filename. In + most places it will check the result properly (taking 0 for success), + except one case where it takes 0 for an error, and this happens in + xsane_browse_filename_callback (xsane-front-gtk.c). The new code would + abort copying the filename into preferences structure if 0 was returned, + and that's the OK case. I'm very curious how wonderfully it would blow + up if an actual error was returned, but that's a different story. + +commit 2c02ddd8282fa231107d8860aee4d92bdb5cb8e8 +Author: Nils Philippsen <nils@redhat.com> +Date: Fri Nov 19 12:25:54 2010 +0100 + + don't crash if no files are selected (#608047) +--- + src/xsane-back-gtk.c | 20 ++++++++++++++++---- + src/xsane-front-gtk.c | 6 +++++- + 2 files changed, 21 insertions(+), 5 deletions(-) + +diff --git a/src/xsane-back-gtk.c b/src/xsane-back-gtk.c +index bca9eb2..6ef1506 100644 +--- a/src/xsane-back-gtk.c ++++ b/src/xsane-back-gtk.c +@@ -1111,6 +1111,11 @@ static void xsane_back_gtk_filetype2_callback(GtkWidget *widget, gpointer data) + + chooser_filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(filechooser)); + ++ if (!chooser_filename) ++ { ++ return; ++ } ++ + if ((new_filetype) && (*new_filetype)) + { + extension = strrchr(chooser_filename, '.'); +@@ -1505,12 +1510,19 @@ int xsane_back_gtk_get_filename(const char *label, const char *default_name, siz + #endif + + chooser_filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(filechooser)); +- strncpy(filename, chooser_filename, max_len - 1); +- g_free(chooser_filename); ++ if (chooser_filename) ++ { ++ strncpy(filename, chooser_filename, max_len - 1); ++ g_free(chooser_filename); + +- filename[max_len - 1] = '\0'; ++ filename[max_len - 1] = '\0'; + +- ok = TRUE; ++ ok = TRUE; ++ } ++ else ++ { ++ ok = FALSE; ++ } + } + + gtk_widget_destroy(filechooser); +diff --git a/src/xsane-front-gtk.c b/src/xsane-front-gtk.c +index 4c973fb..7bb49b0 100644 +--- a/src/xsane-front-gtk.c ++++ b/src/xsane-front-gtk.c +@@ -1333,7 +1333,11 @@ static void xsane_browse_filename_callback(GtkWidget *widget, gpointer data) + snprintf(windowname, sizeof(windowname), "%s %s %s", xsane.prog_name, WINDOW_OUTPUT_FILENAME, xsane.device_text); + + umask((mode_t) preferences.directory_umask); /* define new file permissions */ +- xsane_back_gtk_get_filename(windowname, filename, sizeof(filename), filename, &preferences.filetype, &preferences.cms_function, XSANE_FILE_CHOOSER_ACTION_SELECT_SAVE, show_extra_widgets, XSANE_FILE_FILTER_ALL | XSANE_FILE_FILTER_IMAGES, XSANE_FILE_FILTER_IMAGES); ++ if (xsane_back_gtk_get_filename(windowname, filename, sizeof(filename), filename, &preferences.filetype, &preferences.cms_function, XSANE_FILE_CHOOSER_ACTION_SELECT_SAVE, show_extra_widgets, XSANE_FILE_FILTER_ALL | XSANE_FILE_FILTER_IMAGES, XSANE_FILE_FILTER_IMAGES) < 0) ++ { ++ xsane_set_sensitivity(TRUE); ++ return; ++ } + umask(XSANE_DEFAULT_UMASK); /* define new file permissions */ + + if (preferences.filename) +-- +1.8.3.1 + diff --git a/source/xap/xsane/xsane-0.999-pdf-no-high-bpp.patch b/source/xap/xsane/xsane-0.999-pdf-no-high-bpp.patch new file mode 100644 index 000000000..10cdbea34 --- /dev/null +++ b/source/xap/xsane/xsane-0.999-pdf-no-high-bpp.patch @@ -0,0 +1,51 @@ +From c0686879ac66c1933aefbb62b69afb0c9a0db912 Mon Sep 17 00:00:00 2001 +From: Nils Philippsen <nils@redhat.com> +Date: Mon, 9 Sep 2013 17:13:15 +0200 +Subject: [PATCH] patch: pdf-no-high-bpp + +Squashed commit of the following: + +commit 9f7d97e114389595481f6e9d3ac1038972f3f73b +Author: Nils Philippsen <nils@redhat.com> +Date: Mon Sep 9 17:08:38 2013 +0200 + + avoid producing PDFs with bpp > 8 +--- + src/xsane-save.c | 14 ++++++++++++++ + 1 file changed, 14 insertions(+) + +diff --git a/src/xsane-save.c b/src/xsane-save.c +index 5461bf1..75e0a63 100644 +--- a/src/xsane-save.c ++++ b/src/xsane-save.c +@@ -4205,6 +4205,18 @@ int xsane_save_pdf(FILE *outfile, FILE *imagefile, Image_info *image_info, float + + *cancel_save = 0; + ++ if (image_info->depth > 8) ++ { ++ char buf[TEXTBUFSIZE]; ++ ++ snprintf(buf, sizeof(buf), "%s %s", ERR_DURING_SAVE, "PDF doesn't allow bit depths > 8"); ++ DBG(DBG_error, "%s\n", buf); ++ xsane_back_gtk_decision(ERR_HEADER_ERROR, (gchar **) error_xpm, buf, BUTTON_OK, NULL, TRUE /* wait */); ++ *cancel_save = 1; ++ ++ goto bail_out; ++ } ++ + xsane_save_pdf_create_document_header(outfile, &xref, 1, flatedecode); + + if (apply_ICM_profile && (cms_function == XSANE_CMS_FUNCTION_EMBED_SCANNER_ICM_PROFILE)) +@@ -4232,6 +4244,8 @@ int xsane_save_pdf(FILE *outfile, FILE *imagefile, Image_info *image_info, float + *cancel_save = 1; + } + ++bail_out: ++ + return (*cancel_save); + } + +-- +1.8.3.1 + diff --git a/source/xap/xsane/xsane-0.999-signal-handling.patch b/source/xap/xsane/xsane-0.999-signal-handling.patch new file mode 100644 index 000000000..b9da71a1e --- /dev/null +++ b/source/xap/xsane/xsane-0.999-signal-handling.patch @@ -0,0 +1,242 @@ +From 3b5d3b7e1f320b0bfbe48024a586c0a22375aa2d Mon Sep 17 00:00:00 2001 +From: Nils Philippsen <nils@redhat.com> +Date: Thu, 3 Jul 2014 10:38:03 +0200 +Subject: [PATCH] patch: signal-handling + +Squashed commit of the following: + +commit 1e9e8cf5edc469114c8eadf46817cd5c1261b35c +Author: Nils Philippsen <nils@redhat.com> +Date: Thu Jul 3 10:14:52 2014 +0200 + + don't use g_unix_open_pipe(), g_unix_fd_add() + + These functions have only recently been added to glib. Use pipe()/ + fcntl() and g_io_channel_unix_new()/g_io_add_watch() instead which are + available in the minimum glib version needed for gtk+-2.x. + +commit acbdf3f693d3d2a78ee7490ca1bf76957daf00cf +Author: Nils Philippsen <nils@redhat.com> +Date: Thu Mar 13 13:38:12 2014 +0100 + + separate signal handlers in top and bottom half + + This is to avoid race-conditions occurring when a signal is received + while the signal handler is not yet finished. It also avoids calling + non-reentrant functions from a signal handler. The top half (the real + signal handler) just writes a character into a pipe which gets picked up + and serviced by the bottom half from the normal event loop, this + serializes things and makes using non-reentrant functions safe. +--- + src/xsane.c | 151 ++++++++++++++++++++++++++++++++++++++++++++++++++++++------ + 1 file changed, 136 insertions(+), 15 deletions(-) + +diff --git a/src/xsane.c b/src/xsane.c +index 2b9211b..fc2ebbe 100644 +--- a/src/xsane.c ++++ b/src/xsane.c +@@ -47,6 +47,7 @@ + #endif + + #include <sys/wait.h> ++#include <glib-unix.h> + + #include <stdarg.h> + +@@ -121,6 +122,7 @@ static const Preferences_medium_t pref_default_medium[]= + + int DBG_LEVEL = 0; + static guint xsane_resolution_timer = 0; ++static int xsane_signal_pipe[2]; + + /* ---------------------------------------------------------------------------------------------------------------------- */ + +@@ -161,8 +163,11 @@ void xsane_pref_save(void); + static int xsane_pref_restore(void); + static void xsane_pref_save_media(void); + static void xsane_pref_restore_media(void); +-static RETSIGTYPE xsane_quit_handler(int signal); +-static RETSIGTYPE xsane_sigchld_handler(int signal); ++static RETSIGTYPE xsane_signal_handler_top_half(int signal); ++static gboolean xsane_signal_handler_bottom_half(GIOChannel *source, ++ GIOCondition condition, ++ gpointer user_data); ++static void xsane_sigchld_handler(void); + static void xsane_quit(void); + static void xsane_exit(void); + static gint xsane_standard_option_win_delete(GtkWidget *widget, gpointer data); +@@ -2296,16 +2301,119 @@ static void xsane_pref_restore_media(void) + + /* ---------------------------------------------------------------------------------------------------------------------- */ + +-static RETSIGTYPE xsane_quit_handler(int signal) ++static RETSIGTYPE xsane_signal_handler_top_half(int signal) + { +- DBG(DBG_proc, "xsane_quit_handler\n"); ++ const char *msg_func = "xsane_signal_handler_top_half(): "; ++ const char *msg_short_write = "Short write() while processing signal.\n"; ++ const char *msg_err = "Error during write().\n"; ++ char sig_char; ++ ssize_t written; ++ int errno_saved = errno; + +- xsane_quit(); ++ switch (signal) ++ { ++ case SIGTERM: ++ sig_char = 't'; ++ break; ++ case SIGINT: ++ sig_char = 'i'; ++ break; ++ case SIGHUP: ++ sig_char = 'h'; ++ break; ++ case SIGCHLD: ++ sig_char = 'c'; ++ break; ++ default: ++ sig_char = '?'; ++ break; ++ } ++ ++ if ((written = write(xsane_signal_pipe[1], &sig_char, 1)) <= 0) ++ { ++ /* At this point, all bets are off. Salvage what we can. */ ++ ++ const char *msg = (written == 0) ? msg_short_write : msg_err; ++ ++ if ((write(STDERR_FILENO, msg_func, strlen(msg_func)) < 0) || ++ (write(STDERR_FILENO, msg, strlen(msg)) < 0)) ++ { ++ /* This is really a no-op, but at this point it doesn't really matter ++ * anymore if the writes succeeded or not. */ ++ goto bail_out; ++ } ++ ++bail_out: ++ /* Ignore SIGCHLD errors, zombie processes don't hurt that much. */ ++ if (signal != SIGCHLD) ++ { ++ struct SIGACTION act; ++ memset(&act, 0, sizeof(act)); ++ act.sa_handler = SIG_DFL; ++ sigaction(signal, &act, NULL); ++ raise(signal); ++ } ++ } ++ ++ errno = errno_saved; ++} ++ ++static gboolean xsane_signal_handler_bottom_half(GIOChannel *source, ++ GIOCondition condition, ++ gpointer user_data) ++{ ++ char sig_char; ++ ssize_t readlen; ++ ++ DBG(DBG_proc, "xsane_signal_handler_bottom_half\n"); ++ ++ while ((readlen = read(xsane_signal_pipe[0], &sig_char, 1)) != 0) ++ { ++ if (readlen < 0) ++ { ++ if (errno == EINTR) ++ { ++ /* if interrupted by signal, just repeat reading */ ++ continue; ++ } ++ else ++ { ++ break; ++ } ++ } ++ ++ switch (sig_char) ++ { ++ case 't': ++ case 'i': ++ case 'h': ++ xsane_quit(); ++ break; ++ case 'c': ++ xsane_sigchld_handler(); ++ break; ++ default: ++ DBG(DBG_error, ++ "Don't know how to cope with character-encoded signal: '%c'\n", ++ sig_char); ++ break; ++ } ++ } ++ ++ /* previous invocation might have read more than it should, so ignore ++ * EAGAIN/EWOULDBLOCK */ ++ if (readlen < 0 && errno != EAGAIN && errno != EWOULDBLOCK) ++ { ++ DBG(DBG_error, "Error while reading from pipe: %d '%s'\n", errno, ++ strerror(errno)); ++ } ++ ++ return TRUE; + } + + /* ---------------------------------------------------------------------------------------------------------------------- */ + +-static RETSIGTYPE xsane_sigchld_handler(int signal) ++static void xsane_sigchld_handler(void) + { + int status; + XsaneChildprocess **childprocess_listptr = &xsane.childprocess_list; +@@ -6026,6 +6134,8 @@ void xsane_interface(int argc, char **argv) + { + struct SIGACTION act; + ++ GIOChannel *gio_pipe_read; ++ + DBG(DBG_proc, "xsane_interface\n"); + + xsane.info_label = NULL; +@@ -6069,18 +6179,29 @@ void xsane_interface(int argc, char **argv) + } + } + ++ if ((pipe(xsane_signal_pipe) == -1) || ++ (fcntl(xsane_signal_pipe[0], F_SETFD, FD_CLOEXEC) == -1) || ++ (fcntl(xsane_signal_pipe[0], F_SETFL, O_NONBLOCK) == -1) || ++ (fcntl(xsane_signal_pipe[1], F_SETFD, FD_CLOEXEC) == -1) || ++ (fcntl(xsane_signal_pipe[1], F_SETFL, O_NONBLOCK) == -1) || ++ !(gio_pipe_read = g_io_channel_unix_new(xsane_signal_pipe[0])) || ++ !g_io_add_watch(gio_pipe_read, G_IO_IN | G_IO_HUP | G_IO_ERR | G_IO_PRI, ++ xsane_signal_handler_bottom_half, NULL)) ++ { ++ DBG(DBG_error, ++ "Couldn't create signal handling pipe, set flags on it or install\n" ++ "bottom half of handler.\n"); ++ exit(1); ++ } ++ + /* define SIGTERM, SIGINT, SIGHUP-handler to make sure that e.g. all temporary files are deleted */ + /* when xsane gets such a signal */ + memset(&act, 0, sizeof(act)); +- act.sa_handler = xsane_quit_handler; +- sigaction(SIGTERM, &act, 0); +- sigaction(SIGINT, &act, 0); +- sigaction(SIGHUP, &act, 0); +- +- /* add a signal handler that cleans up zombie child processes */ +- memset(&act, 0, sizeof(act)); +- act.sa_handler = xsane_sigchld_handler; +- sigaction(SIGCHLD, &act, 0); ++ act.sa_handler = xsane_signal_handler_top_half; ++ sigaction(SIGTERM, &act, NULL); ++ sigaction(SIGINT, &act, NULL); ++ sigaction(SIGHUP, &act, NULL); ++ sigaction(SIGCHLD, &act, NULL); + + gtk_main(); + sane_exit(); +-- +1.9.3 + diff --git a/source/xap/xsane/xsane-0.999-snprintf-update.patch b/source/xap/xsane/xsane-0.999-snprintf-update.patch new file mode 100644 index 000000000..20cf52c1e --- /dev/null +++ b/source/xap/xsane/xsane-0.999-snprintf-update.patch @@ -0,0 +1,1390 @@ +diff -up xsane-0.999/lib/snprintf.c.OLD xsane-0.999/lib/snprintf.c +--- xsane-0.999/lib/snprintf.c.OLD 2014-05-29 10:42:26.795419830 -0400 ++++ xsane-0.999/lib/snprintf.c 2014-05-29 10:48:58.544431002 -0400 +@@ -2,180 +2,616 @@ + + #ifndef HAVE_SNPRINTF + +-/*************************************************************************** +- * LPRng - An Extended Print Spooler System +- * +- * Copyright 1988-1997, Patrick Powell, San Diego, CA +- * papowell@sdsu.edu +- * See below for conditions of use. +- * +- *************************************************************************** +- * MODULE: snprintf.c +- * PURPOSE: LPRng version of printf - absolutely bombproof (hopefully!) ++/************************************************************************** ++ * Copyright 1994-2003 Patrick Powell, San Diego, CA <papowell@lprng.com> + **************************************************************************/ +-#if 0 +- +- The "Artistic License" +- +- Preamble +- +-The intent of this document is to state the conditions under which a +-Package may be copied, such that the Copyright Holder maintains some +-semblance of artistic control over the development of the package, +-while giving the users of the package the right to use and distribute +-the Package in a more-or-less customary fashion, plus the right to make +-reasonable modifications. +- +-Definitions: +- +- "Package" refers to the collection of files distributed by the +- Copyright Holder, and derivatives of that collection of files +- created through textual modification. +- +- "Standard Version" refers to such a Package if it has not been +- modified, or has been modified in accordance with the wishes +- of the Copyright Holder as specified below. +- +- "Copyright Holder" is whoever is named in the copyright or +- copyrights for the package. +- +- "You" is you, if you are thinking about copying or distributing +- this Package. +- +- "Reasonable copying fee" is whatever you can justify on the +- basis of media cost, duplication charges, time of people involved, +- and so on. (You will not be required to justify it to the +- Copyright Holder, but only to the computing community at large +- as a market that must bear the fee.) + +- "Freely Available" means that no fee is charged for the item +- itself, though there may be fees involved in handling the item. +- It also means that recipients of the item may redistribute it +- under the same conditions they received it. +- +-1. You may make and give away verbatim copies of the source form of the +-Standard Version of this Package without restriction, provided that you +-duplicate all of the original copyright notices and associated disclaimers. +- +-2. You may apply bug fixes, portability fixes and other modifications +-derived from the Public Domain or from the Copyright Holder. A Package +-modified in such a way shall still be considered the Standard Version. +- +-3. You may otherwise modify your copy of this Package in any way, provided +-that you insert a prominent notice in each changed file stating how and +-when you changed that file, and provided that you do at least ONE of the +-following: +- +- a) place your modifications in the Public Domain or otherwise make them +- Freely Available, such as by posting said modifications to Usenet or +- an equivalent medium, or placing the modifications on a major archive +- site such as uunet.uu.net, or by allowing the Copyright Holder to include +- your modifications in the Standard Version of the Package. +- +- b) use the modified Package only within your corporation or organization. +- +- c) rename any non-standard executables so the names do not conflict +- with standard executables, which must also be provided, and provide +- a separate manual page for each non-standard executable that clearly +- documents how it differs from the Standard Version. +- +- d) make other distribution arrangements with the Copyright Holder. +- +-4. You may distribute the programs of this Package in object code or +-executable form, provided that you do at least ONE of the following: ++/* ++ Overview: + +- a) distribute a Standard Version of the executables and library files, +- together with instructions (in the manual page or equivalent) on where +- to get the Standard Version. ++ snprintf( char *buffer, int len, const char *format,...) ++ plp_unsafe_snprintf( char *buffer, int len, const char *format,...) ++ its horribly unsafe companion that does NOT protect you from ++ the printing of evil control characters, but may be necessary ++ See the man page documentation below ++ ++ This version of snprintf was developed originally for printing ++ on a motley collection of specialized hardware that had NO IO ++ library. Due to contractual restrictions, a clean room implementation ++ of the printf() code had to be developed. ++ ++ The method chosen for printf was to be as paranoid as possible, ++ as these platforms had NO memory protection, and very small ++ address spaces. This made it possible to try to print ++ very long strings, i.e. - all of memory, very easily. To guard ++ against this, all printing was done via a buffer, generous enough ++ to hold strings, but small enough to protect against overruns, ++ etc. ++ ++ Strangely enough, this proved to be of immense importance when ++ SPRINTFing to a buffer on a stack... The rest, of course, is ++ well known, as buffer overruns in the stack are a common way to ++ do horrible things to operating systems, security, etc etc. ++ ++ This version of snprintf is VERY limited by modern standards. ++ ++ Revision History: ++ First Released Version - 1994. This version had NO comments. ++ First Released Version - 1994. This version had NO comments. ++ Second Major Released Version - Tue May 23 10:43:44 PDT 2000 ++ Configuration and other items changed. Read this doc. ++ Treat this as a new version. ++ Minor Revision - Mon Apr 1 09:41:28 PST 2002 ++ - fixed up some constants and casts ++ ++ COPYRIGHT AND TERMS OF USE: ++ ++ You may use, copy, distribute, or otherwise incorporate this software ++ and documentation into any product or other item, provided that ++ the copyright in the documentation and source code as well as the ++ source code generated constant strings in the object, executable ++ or other code remain in place and are present in executable modules ++ or objects. ++ ++ You may modify this code as appropriate to your usage; however the ++ modified version must be identified by changing the various source ++ and object code identification strings as is appropriately noted ++ in the source code. ++ ++ You can use this with the GNU CONFIGURE utility. ++ This should define the following macros appropriately: ++ ++ HAVE_STDARG_H - if the <stdargs.h> include file is available ++ HAVE_VARARG_H - if the <varargs.h> include file is available ++ ++ HAVE_STRERROR - if the strerror() routine is available. ++ If it is not available, then examine the lines containing ++ the tests below. ++ ++ HAVE_SYS_ERRLIST - have sys_errlist available ++ HAVE_DECL_SYS_ERRLIST - sys_errlist declaration in include files ++ HAVE_SYS_NERR - have sys_nerr available ++ HAVE_DECL_SYS_NERR - sys_nerr declaration in include files ++ ++ HAVE_QUAD_T - if the quad_t type is defined ++ HAVE_LONG_LONG - if the long long type is defined ++ HAVE_LONG_DOUBLE - if the long double type is defined ++ ++ If you are using the GNU configure (autoconf) facility, add the ++ following line to the configure.in file, to force checking for the ++ quad_t and long long data types: ++ ++ ++ AC_CHECK_HEADERS(stdlib.h,stdio.h,unistd.h,errno.h) ++ AC_CHECK_FUNCS(strerror) ++ AC_CACHE_CHECK(for errno, ++ ac_cv_errno, ++ [ ++ AC_TRY_LINK(,[extern int errno; return (errno);], ++ ac_cv_errno=yes, ac_cv_errno=no) ++ ]) ++ if test "$ac_cv_errno" = yes; then ++ AC_DEFINE(HAVE_ERRNO) ++ AC_CACHE_CHECK(for errno declaration, ++ ac_cv_decl_errno, ++ [ ++ AC_TRY_COMPILE([ ++ #include <stdio.h> ++ #ifdef HAVE_STDLIB_H ++ #include <stdlib.h> ++ #endif ++ #ifdef HAVE_UNISTD_H ++ #include <unistd.h> ++ #endif ++ #ifdef HAVE_ERRNO_H ++ #include <errno.h> ++ ],[return(sys_nerr);], ++ ac_cv_decl_errno=yes, ac_cv_decl_errno=no) ++ ]) ++ if test "$ac_cv_decl_errno" = yes; then ++ AC_DEFINE(HAVE_DECL_ERRNO) ++ fi; ++ fi ++ ++ AC_CACHE_CHECK(for sys_nerr, ++ ac_cv_sys_nerr, ++ [ ++ AC_TRY_LINK(,[extern int sys_nerr; return (sys_nerr);], ++ ac_cv_sys_nerr=yes, ac_cv_sys_nerr=no) ++ ]) ++ if test "$ac_cv_sys_nerr" = yes; then ++ AC_DEFINE(HAVE_SYS_NERR) ++ AC_CACHE_CHECK(for sys_nerr declaration, ++ ac_cv_decl_sys_nerr, ++ [ ++ AC_TRY_COMPILE([ ++ #include <stdio.h> ++ #ifdef HAVE_STDLIB_H ++ #include <stdlib.h> ++ #endif ++ #ifdef HAVE_UNISTD_H ++ #include <unistd.h> ++ #endif],[return(sys_nerr);], ++ ac_cv_decl_sys_nerr_def=yes, ac_cv_decl_sys_nerr_def=no) ++ ]) ++ if test "$ac_cv_decl_sys_nerr" = yes; then ++ AC_DEFINE(HAVE_DECL_SYS_NERR) ++ fi ++ fi ++ ++ ++ AC_CACHE_CHECK(for sys_errlist array, ++ ac_cv_sys_errlist, ++ [AC_TRY_LINK(,[extern char *sys_errlist[]; ++ sys_errlist[0];], ++ ac_cv_sys_errlist=yes, ac_cv_sys_errlist=no) ++ ]) ++ if test "$ac_cv_sys_errlist" = yes; then ++ AC_DEFINE(HAVE_SYS_ERRLIST) ++ AC_CACHE_CHECK(for sys_errlist declaration, ++ ac_cv_sys_errlist_def, ++ [AC_TRY_COMPILE([ ++ #include <stdio.h> ++ #include <errno.h> ++ #ifdef HAVE_STDLIB_H ++ #include <stdlib.h> ++ #endif ++ #ifdef HAVE_UNISTD_H ++ #include <unistd.h> ++ #endif],[char *s = sys_errlist[0]; return(*s);], ++ ac_cv_decl_sys_errlist=yes, ac_cv_decl_sys_errlist=no) ++ ]) ++ if test "$ac_cv_decl_sys_errlist" = yes; then ++ AC_DEFINE(HAVE_DECL_SYS_ERRLIST) ++ fi ++ fi ++ ++ ++ ++ AC_CACHE_CHECK(checking for long long, ++ ac_cv_long_long, ++ [ ++ AC_TRY_COMPILE([ ++ #include <stdio.h> ++ #include <sys/types.h> ++ ], [printf("%d",sizeof(long long));], ++ ac_cv_long_long=yes, ac_cv_long_long=no) ++ ]) ++ if test $ac_cv_long_long = yes; then ++ AC_DEFINE(HAVE_LONG_LONG) ++ fi ++ ++ AC_CACHE_CHECK(checking for long double, ++ ac_cv_long_double, ++ [ ++ AC_TRY_COMPILE([ ++ #include <stdio.h> ++ #include <sys/types.h> ++ ], [printf("%d",sizeof(long double));], ++ ac_cv_long_double=yes, ac_cv_long_double=no) ++ ]) ++ if test $ac_cv_long_double = yes; then ++ AC_DEFINE(HAVE_LONG_DOUBLE) ++ fi ++ ++ AC_CACHE_CHECK(checking for quad_t, ++ ac_cv_quad_t, ++ [ ++ AC_TRY_COMPILE([ ++ #include <stdio.h> ++ #include <sys/types.h> ++ ], [printf("%d",sizeof(quad_t));], ++ ac_cv_quad_t=yes, ac_cv_quad_t=no) ++ ]) ++ if test $ac_cv_quad_t = yes; then ++ AC_DEFINE(HAVE_QUAD_T) ++ fi ++ ++ ++ ++ NAME ++ snprintf, plp_vsnprintf - formatted output conversion ++ ++ SYNOPSIS ++ #include <stdio.h> ++ #include <stdarg.h> ++ ++ int ++ snprintf(const char *format, size_t size, va_list ap); ++ int ++ plp_unsafe_snprintf(const char *format, size_t size, va_list ap); ++ ++ AKA snprintf and unsafe_snprintf in the documentation below ++ ++ int ++ vsnprintf(char *str, size_t size, const char *format, va_list ap); ++ int ++ unsafe_vsnprintf(char *str, size_t size, const char *format, va_list ap); ++ ++ AKA vsnprintf and unsafe_vsnprintf in the documentation below ++ ++ (Multithreaded Safe) ++ ++ DESCRIPTION ++ The printf() family of functions produces output according to ++ a format as described below. Snprintf(), and vsnprintf() ++ write to the character string str. These functions write the ++ output under the control of a format string that specifies ++ how subsequent arguments (or arguments accessed via the ++ variable-length argument facilities of stdarg(3)) are converted ++ for output. These functions return the number of characters ++ printed (not including the trailing `\0' used to end output ++ to strings). Snprintf() and vsnprintf() will write at most ++ size-1 of the characters printed into the output string (the ++ size'th character then gets the terminating `\0'); if the ++ return value is greater than or equal to the size argument, ++ the string was too short and some of the printed characters ++ were discarded. The size or str may be given as zero to find ++ out how many characters are needed; in this case, the str ++ argument is ignored. ++ ++ By default, the snprintf function will not format control ++ characters (except new line and tab) in strings. This is a ++ safety feature that has proven to be extremely critical when ++ using snprintf for secure applications and when debugging. ++ If you MUST have control characters formatted or printed, ++ then use the unsafe_snprintf() and unsafe_vsnprintf() and on ++ your own head be the consequences. You have been warned. ++ ++ There is one exception to the comments above, and that is ++ the "%c" (character) format. It brutally assumes that the ++ user will have performed the necessary 'isprint()' or other ++ checks and uses the integer value as a character. ++ ++ The format string is composed of zero or more directives: ++ ordinary characters (not %), which are copied unchanged to ++ the output stream; and conversion specifications, each ++ of which results in fetching zero or more subsequent arguments. ++ Each conversion specification is introduced by the character ++ %. The arguments must correspond properly (after type promotion) ++ with the conversion specifier. After the %, the following ++ appear in sequence: ++ ++ o Zero or more of the following flags: ++ ++ - A zero `0' character specifying zero padding. For ++ all conversions except n, the converted value is padded ++ on the left with zeros rather than blanks. If a ++ precision is given with a numeric conversion (d, i, ++ o, u, i, x, and X), the `0' flag is ignored. ++ ++ - A negative field width flag `-' indicates the converted ++ value is to be left adjusted on the field boundary. Except ++ for n conversions, the converted value is padded on ++ the right with blanks, rather than on the left with ++ blanks or zeros. A `-' overrides a `0' if both are ++ given. ++ ++ - A space, specifying that a blank should be left before ++ a positive number produced by a signed conversion (d, e, E, f, ++ g, G, or i). ++ ++ - A `+' character specifying that a sign always be placed ++ before a number produced by a signed conversion. A `+' overrides ++ a space if both are used. ++ ++ o An optional decimal digit string specifying a minimum ++ field width. If the converted value has fewer ++ characters than the field width, it will be padded ++ with spaces on the left (or right, if the ++ left-adjustment flag has been given) to fill out ++ the field width. ++ ++ o An optional precision, in the form of a period `.' followed ++ by an optional digit string. If the digit string ++ is omitted, the precision is taken as zero. This ++ gives the minimum number of digits to appear for ++ d, i, o, u, x, and X conversions, the number of ++ digits to appear after the decimal-point for e, ++ E, and f conversions, the maximum number of ++ significant digits for g and G conversions, or ++ the maximum number of characters to be printed ++ from a string for s conversions. ++ ++ o The optional character h, specifying that a following d, ++ i, o, u, x, or X conversion corresponds to a short ++ int or unsigned short int argument, or that a ++ following n conversion corresponds to a pointer ++ to a short int argument. ++ ++ o The optional character l (ell) specifying that a following ++ d, i, o, u, x, or X conversion applies to a pointer ++ to a long int or unsigned long int argument, or ++ that a following n conversion corresponds to a ++ pointer to a long int argument. ++ ++ o The optional character q, specifying that a following d, ++ i, o, u, x, or X conversion corresponds to a quad_t ++ or u_quad_t argument, or that a following n ++ conversion corresponds to a quad_t argument. ++ This value is always printed in HEX notation. Tough. ++ quad_t's are an OS system implementation, and should ++ not be allowed. ++ ++ o The character L specifying that a following e, E, f, g, ++ or G conversion corresponds to a long double ++ argument. ++ ++ o A character that specifies the type of conversion to be applied. ++ ++ ++ A field width or precision, or both, may be indicated by an asterisk `*' ++ instead of a digit string. In this case, an int argument supplies the ++ field width or precision. A negative field width is treated as a left ++ adjustment flag followed by a positive field width; a negative precision ++ is treated as though it were missing. ++ ++ The conversion specifiers and their meanings are: ++ ++ diouxX The int (or appropriate variant) argument is converted to signed ++ decimal (d and i), unsigned octal (o), unsigned decimal ++ (u), or unsigned hexadecimal (x and X) notation. The ++ letters abcdef are used for x conversions; the letters ++ ABCDEF are used for X conversions. The precision, if ++ any, gives the minimum number of digits that must ++ appear; if the converted value requires fewer digits, ++ it is padded on the left with zeros. ++ ++ eE The double argument is rounded and converted in the style ++ [-]d.ddde+-dd where there is one digit before the decimal-point ++ character and the number of digits after it is equal ++ to the precision; if the precision is missing, it is ++ taken as 6; if the precision is zero, no decimal-point ++ character appears. An E conversion uses the letter ++ E (rather than e) to introduce the exponent. ++ The exponent always contains at least two digits; if ++ the value is zero, the exponent is 00. ++ ++ f The double argument is rounded and converted to decimal notation ++ in the style [-]ddd.ddd, where the number of digits after the ++ decimal-point character is equal to the precision specification. ++ If the precision is missing, it is taken as 6; if the precision ++ is explicitly zero, no decimal-point character appears. If a ++ decimal point appears, at least one digit appears before it. ++ ++ g The double argument is converted in style f or e (or ++ E for G conversions). The precision specifies the ++ number of significant digits. If the precision is ++ missing, 6 digits are given; if the precision is zero, ++ it is treated as 1. Style e is used if the exponent ++ from its conversion is less than -4 or greater than ++ or equal to the precision. Trailing zeros are removed ++ from the fractional part of the result; a decimal ++ point appears only if it is followed by at least one ++ digit. ++ ++ c The int argument is converted to an unsigned char, ++ and the resulting character is written. ++ ++ s The ``char *'' argument is expected to be a pointer to an array ++ of character type (pointer to a string). Characters ++ from the array are written up to (but not including) ++ a terminating NUL character; if a precision is ++ specified, no more than the number specified are ++ written. If a precision is given, no null character ++ need be present; if the precision is not specified, ++ or is greater than the size of the array, the array ++ must contain a terminating NUL character. ++ ++ % A `%' is written. No argument is converted. The complete ++ conversion specification is `%%'. ++ ++ In no case does a non-existent or small field width cause truncation of a ++ field; if the result of a conversion is wider than the field width, the ++ field is expanded to contain the conversion result. ++ ++ EXAMPLES ++ To print a date and time in the form `Sunday, July 3, 10:02', where ++ weekday and month are pointers to strings: ++ ++ #include <stdio.h> ++ fprintf(stdout, "%s, %s %d, %.2d:%.2d\n", ++ weekday, month, day, hour, min); ++ ++ To print pi to five decimal places: ++ ++ #include <math.h> ++ #include <stdio.h> ++ fprintf(stdout, "pi = %.5f\n", 4 * atan(1.0)); ++ ++ To allocate a 128 byte string and print into it: ++ ++ #include <stdio.h> ++ #include <stdlib.h> ++ #include <stdarg.h> ++ char *newfmt(const char *fmt, ...) ++ { ++ char *p; ++ va_list ap; ++ if ((p = malloc(128)) == NULL) ++ return (NULL); ++ va_start(ap, fmt); ++ (void) vsnprintf(p, 128, fmt, ap); ++ va_end(ap); ++ return (p); ++ } ++ ++ SEE ALSO ++ printf(1), scanf(3) ++ ++ STANDARDS ++ Turkey C Standardization and wimpy POSIX folks did not define ++ snprintf or vsnprintf(). ++ ++ BUGS ++ The conversion formats %D, %O, and %U are not standard and are provided ++ only for backward compatibility. The effect of padding the %p format ++ with zeros (either by the `0' flag or by specifying a precision), and the ++ benign effect (i.e., none) of the `#' flag on %n and %p conversions, as ++ well as other nonsensical combinations such as %Ld, are not standard; ++ such combinations should be avoided. + +- b) accompany the distribution with the machine-readable source of +- the Package with your modifications. ++ The typedef names quad_t and u_quad_t are infelicitous. + +- c) give non-standard executables non-standard names, and clearly +- document the differences in manual pages (or equivalent), together +- with instructions on where to get the Standard Version. ++*/ + +- d) make other distribution arrangements with the Copyright Holder. + +-5. You may charge a reasonable copying fee for any distribution of this +-Package. You may charge any fee you choose for support of this +-Package. You may not charge a fee for this Package itself. However, +-you may distribute this Package in aggregate with other (possibly +-commercial) programs as part of a larger (possibly commercial) software +-distribution provided that you do not advertise this Package as a +-product of your own. ++#include <sys/types.h> ++#include <ctype.h> ++#include <stdlib.h> ++#include <stdio.h> ++#if defined(HAVE_STRING_H) ++# include <string.h> ++#endif ++#if defined(HAVE_STRINGS_H) ++# include <strings.h> ++#endif ++#if defined(HAVE_ERRNO_H) ++#include <errno.h> ++#endif + +-6. The name of the Copyright Holder may not be used to endorse or promote +-products derived from this software without specific prior written permission. ++/* ++ * For testing, define these values ++ */ ++#if 0 ++#define HAVE_STDARG_H 1 ++#define TEST 1 ++#define HAVE_QUAD_T 1 ++#endif + +-7. THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR +-IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED +-WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. ++/**** ENDINCLUDE ****/ + +- The End +-#include "lp.h" ++/************************************************* ++ * KEEP THIS STRING - MODIFY AT THE END WITH YOUR REVISIONS ++ * i.e. - the LOCAL REVISIONS part is for your use ++ *************************************************/ ++ ++ ++ static char *const _id = "plp_snprintf V2000.08.18 Copyright Patrick Powell 1988-2000 " ++ "$Id: plp_snprintf.c,v 1.4 2005/04/14 20:05:19 papowell Exp $" ++ " LOCAL REVISIONS: renamed plp_snprintf to snprintf, conditionalized everything on HAVE_SNPRINTF"; ++ ++/* varargs declarations: */ ++ ++# undef HAVE_STDARGS /* let's hope that works everywhere (mj) */ ++# undef VA_LOCAL_DECL ++# undef VA_START ++# undef VA_SHIFT ++# undef VA_END ++ ++#if defined(HAVE_STDARG_H) ++# include <stdarg.h> ++# define HAVE_STDARGS /* let's hope that works everywhere (mj) */ ++# define VA_LOCAL_DECL va_list ap; ++# define VA_START(f) va_start(ap, f) ++# define VA_SHIFT(v,t) ; /* no-op for ANSI */ ++# define VA_END va_end(ap) ++#else ++# if defined(HAVE_VARARGS_H) ++# include <varargs.h> ++# undef HAVE_STDARGS ++# define VA_LOCAL_DECL va_list ap; ++# define VA_START(f) va_start(ap) /* f is ignored! */ ++# define VA_SHIFT(v,t) v = va_arg(ap,t) ++# define VA_END va_end(ap) ++# else ++ XX ** NO VARARGS ** XX ++# endif + #endif + +-#include <stdarg.h> +-#include <errno.h> +-#include <sys/types.h> +-#define HAVE_STDARGS /* let's hope that works everywhere (mj) */ +-#define VA_LOCAL_DECL va_list ap; +-#define VA_START(f) va_start(ap, f) +-#define VA_SHIFT(v,t) ; /* no-op for ANSI */ +-#define VA_END va_end(ap) +- +-/**** ENDINCLUDE ****/ ++ union value { ++#if defined(HAVE_QUAD_T) ++ quad_t qvalue; ++#endif ++#if defined(HAVE_LONG_LONG) ++ long long value; ++#else ++ long value; ++#endif ++ double dvalue; ++}; + +-static char *const _id = "$Id: snprintf.c,v 3.2 1997/01/19 14:34:56 papowell Exp $"; ++#undef CVAL ++#define CVAL(s) (*((unsigned char *)s)) ++#define safestrlen(s) ((s)?strlen(s):0) + +-/* +- * dopr(): poor man's version of doprintf +- */ + +-static char * plp_Errormsg ( int err ); +-static void dopr( char *buffer, const char *format, va_list args ); +-static void fmtstr( char *value, int ljust, int len, int zpad, int precision ); +-static void fmtnum( long value, int base, int dosign, ++ static char * plp_Errormsg ( int err, char *buffer ); ++ static void dopr( int visible_control, char **buffer, int *left, ++ const char *format, va_list args ); ++ static void fmtstr( int visible_control, char **buffer, int *left, ++ char *value, int ljust, int len, int zpad, int precision ); ++ static void fmtnum( char **buffer, int *left, ++ union value *value, int base, int dosign, ++ int ljust, int len, int zpad, int precision ); ++#if defined(HAVE_QUAD_T) ++ static void fmtquad( char **buffer, int *left, ++ union value *value, int base, int dosign, + int ljust, int len, int zpad, int precision ); +-static void fmtdouble( int fmt, double value, ++#endif ++ static void fmtdouble( char **bufer, int *left, ++ int fmt, double value, + int ljust, int len, int zpad, int precision ); +-static void dostr( char * ); +-static char *output; +-static void dopr_outch( int c ); +-static char *end; +-int visible_control = 1; +- +-/************************************************************** +- * Original: +- * Patrick Powell Tue Apr 11 09:48:21 PDT 1995 +- * A bombproof version of doprnt (dopr) included. +- * Sigh. This sort of thing is always nasty do deal with. Note that +- * the version here does not include floating point... +- * +- * plp_snprintf() is used instead of sprintf() as it does limit checks +- * for string length. This covers a nasty loophole. +- * +- * The other functions are there to prevent NULL pointers from +- * causing nast effects. +- **************************************************************/ +- +-int vsnprintf(char *str, size_t count, const char *fmt, va_list args) +-{ +- str[0] = 0; +- end = str+count-1; +- dopr( str, fmt, args ); +- if( count>0 ){ +- end[0] = 0; ++ static void dostr( char **buffer, int *left, char *str ); ++ static void dopr_outch( char **buffer, int *left, int c ); ++/* VARARGS3 */ ++#ifdef HAVE_STDARGS ++ int plp_vsnprintf(char *str, size_t count, const char *fmt, va_list args) ++#else ++ int plp_vsnprintf(char *str, size_t count, const char *fmt, va_list args) ++#endif ++ ++{ ++ int left; ++ char *buffer; ++ if( (int)count < 0 ) count = 0; ++ left = count; ++ if( count == 0 ) str = 0; ++ buffer = str; ++ dopr( 1, &buffer, &left, fmt, args ); ++ /* fprintf(stderr,"str 0x%x, buffer 0x%x, count %d, left %d\n", ++ (int)str, (int)buffer, count, left ); */ ++ if( str && count > 0 ){ ++ if( left > 0 ){ ++ str[count-left] = 0; ++ } else { ++ str[count-1] = 0; ++ } ++ } ++ return(count - left); ++} ++ ++/* VARARGS3 */ ++#ifdef HAVE_STDARGS ++ int plp_unsafe_vsnprintf(char *str, size_t count, const char *fmt, va_list args) ++#else ++ int plp_unsafe_vsnprintf(char *str, size_t count, const char *fmt, va_list args) ++#endif ++{ ++ int left; ++ char *buffer; ++ if( (int)count < 0 ) count = 0; ++ left = count; ++ if( count == 0 ) str = 0; ++ buffer = str; ++ dopr( 0, &buffer, &left, fmt, args ); ++ /* fprintf(stderr,"str 0x%x, buffer 0x%x, count %d, left %d\n", ++ (int)str, (int)buffer, count, left ); */ ++ if( str && count > 0 ){ ++ if( left > 0 ){ ++ str[count-left] = 0; ++ } else { ++ str[count-1] = 0; ++ } + } +- return(strlen(str)); ++ return(count - left); + } + + /* VARARGS3 */ + #ifdef HAVE_STDARGS +-int snprintf (char *str,size_t count,const char *fmt,...) ++ int snprintf (char *str,size_t count,const char *fmt,...) + #else +-int snprintf (va_alist) va_dcl ++ int snprintf (va_alist) va_dcl + #endif + { + #ifndef HAVE_STDARGS +@@ -183,22 +619,48 @@ int snprintf (va_alist) va_dcl + size_t count; + char *fmt; + #endif ++ int n = 0; + VA_LOCAL_DECL + + VA_START (fmt); + VA_SHIFT (str, char *); + VA_SHIFT (count, size_t ); + VA_SHIFT (fmt, char *); +- (void) vsnprintf ( str, count, fmt, ap); ++ n = plp_vsnprintf ( str, count, fmt, ap); + VA_END; +- return( strlen( str ) ); ++ return( n ); + } + +-static void dopr( char *buffer, const char *format, va_list args ) ++ ++/* VARARGS3 */ ++#ifdef HAVE_STDARGS ++ int plp_unsafe_snprintf (char *str,size_t count,const char *fmt,...) ++#else ++ int plp_unsafe_snprintf (va_alist) va_dcl ++#endif ++{ ++#ifndef HAVE_STDARGS ++ char *str; ++ size_t count; ++ char *fmt; ++#endif ++ int n = 0; ++ VA_LOCAL_DECL ++ ++ VA_START (fmt); ++ VA_SHIFT (str, char *); ++ VA_SHIFT (count, size_t ); ++ VA_SHIFT (fmt, char *); ++ n = plp_unsafe_vsnprintf ( str, count, fmt, ap); ++ VA_END; ++ return( n ); ++} ++ static void dopr( int visible_control, char **buffer, int *left, const char *format, va_list args ) + { + int ch; +- long value; ++ union value value; + int longflag = 0; ++ int quadflag = 0; + char *strvalue; + int ljust; + int len; +@@ -207,22 +669,30 @@ static void dopr( char *buffer, const ch + int set_precision; + double dval; + int err = errno; ++ int base = 0; ++ int signed_val = 0; + +- output = buffer; + while( (ch = *format++) ){ + switch( ch ){ + case '%': +- ljust = len = zpad = 0; ++ longflag = quadflag = ++ ljust = len = zpad = base = signed_val = 0; + precision = -1; set_precision = 0; + nextch: + ch = *format++; + switch( ch ){ + case 0: +- dostr( "**end of format**" ); ++ dostr( buffer, left, "**end of format**" ); + return; + case '-': ljust = 1; goto nextch; + case '.': set_precision = 1; precision = 0; goto nextch; +- case '*': len = va_arg( args, int ); goto nextch; ++ case '*': ++ if( set_precision ){ ++ precision = va_arg( args, int ); ++ } else { ++ len = va_arg( args, int ); ++ } ++ goto nextch; + case '0': /* set zero padding if len not set */ + if(len==0 && set_precision == 0 ) zpad = '0'; + case '1': case '2': case '3': +@@ -234,76 +704,91 @@ static void dopr( char *buffer, const ch + len = len*10 + ch - '0'; + } + goto nextch; +- case 'l': longflag = 1; goto nextch; ++ case 'l': ++longflag; goto nextch; ++ case 'q': ++#if !defined( HAVE_QUAD_T ) ++ dostr( buffer, left, "*no quad_t support *"); ++ return; ++#endif ++ quadflag = 1; ++ goto nextch; + case 'u': case 'U': +- /*fmtnum(value,base,dosign,ljust,len, zpad, precision) */ +- if( longflag ){ +- value = va_arg( args, long ); +- } else { +- value = va_arg( args, int ); +- } +- fmtnum( value, 10,0, ljust, len, zpad, precision ); break; ++ if( base == 0 ){ base = 10; signed_val = 0; } + case 'o': case 'O': +- /*fmtnum(value,base,dosign,ljust,len, zpad, precision) */ +- if( longflag ){ +- value = va_arg( args, long ); +- } else { +- value = va_arg( args, int ); +- } +- fmtnum( value, 8,0, ljust, len, zpad, precision ); break; ++ if( base == 0 ){ base = 8; signed_val = 0; } + case 'd': case 'D': +- if( longflag ){ +- value = va_arg( args, long ); +- } else { +- value = va_arg( args, int ); +- } +- fmtnum( value, 10,1, ljust, len, zpad, precision ); break; ++ if( base == 0 ){ base = 10; signed_val = 1; } + case 'x': +- if( longflag ){ +- value = va_arg( args, long ); +- } else { +- value = va_arg( args, int ); +- } +- fmtnum( value, 16,0, ljust, len, zpad, precision ); break; ++ if( base == 0 ){ base = 16; signed_val = 0; } + case 'X': +- if( longflag ){ +- value = va_arg( args, long ); ++ if( base == 0 ){ base = -16; signed_val = 0; } ++#if defined( HAVE_QUAD_T ) ++ if( quadflag ){ ++ value.qvalue = va_arg( args, quad_t ); ++ fmtquad( buffer, left, &value,base,signed_val, ljust, len, zpad, precision ); ++ break; ++ } else ++#endif ++ if( longflag > 1 ){ ++#if defined(HAVE_LONG_LONG) ++ if( signed_val ){ ++ value.value = va_arg( args, long long ); ++ } else { ++ value.value = va_arg( args, unsigned long long ); ++ } ++#else ++ if( signed_val ){ ++ value.value = va_arg( args, long ); ++ } else { ++ value.value = va_arg( args, unsigned long ); ++ } ++#endif ++ } else if( longflag ){ ++ if( signed_val ){ ++ value.value = va_arg( args, long ); ++ } else { ++ value.value = va_arg( args, unsigned long ); ++ } + } else { +- value = va_arg( args, int ); ++ if( signed_val ){ ++ value.value = va_arg( args, int ); ++ } else { ++ value.value = va_arg( args, unsigned int ); ++ } + } +- fmtnum( value,-16,0, ljust, len, zpad, precision ); break; ++ fmtnum( buffer, left, &value,base,signed_val, ljust, len, zpad, precision ); break; + case 's': + strvalue = va_arg( args, char *); +- fmtstr( strvalue,ljust,len, zpad, precision ); ++ fmtstr( visible_control, buffer, left, strvalue,ljust,len, zpad, precision ); + break; + case 'c': + ch = va_arg( args, int ); + { char b[2]; +- int vsb = visible_control; + b[0] = ch; + b[1] = 0; +- visible_control = 0; +- fmtstr( b,ljust,len, zpad, precision ); +- visible_control = vsb; ++ fmtstr( 0, buffer, left, b,ljust,len, zpad, precision ); + } + break; +- case 'f': case 'g': ++ case 'f': case 'g': case 'e': + dval = va_arg( args, double ); +- fmtdouble( ch, dval,ljust,len, zpad, precision ); break; ++ fmtdouble( buffer, left, ch, dval,ljust,len, zpad, precision ); break; + case 'm': +- fmtstr( plp_Errormsg(err),ljust,len, zpad, precision ); break; +- case '%': dopr_outch( ch ); continue; ++ { char shortbuffer[32]; ++ fmtstr( visible_control, buffer, left, ++ plp_Errormsg(err, shortbuffer),ljust,len, zpad, precision ); ++ } ++ break; ++ case '%': dopr_outch( buffer, left, ch ); continue; + default: +- dostr( "???????" ); ++ dostr( buffer, left, "???????" ); + } + longflag = 0; + break; + default: +- dopr_outch( ch ); ++ dopr_outch( buffer, left, ch ); + break; + } + } +- *output = 0; + } + + /* +@@ -312,63 +797,69 @@ static void dopr( char *buffer, const ch + * len = minimum length + * precision = numbers of chars in string to use + */ +-static void +-fmtstr( char *value, int ljust, int len, int zpad, int precision ) ++ static void ++ fmtstr( int visible_control, char **buffer, int *left, ++ char *value, int ljust, int len, int zpad, int precision ) + { +- int padlen, strlen, i, c; /* amount to pad */ ++ int padlen, strlenv, i, c; /* amount to pad */ + + if( value == 0 ){ + value = "<NULL>"; + } +- if( precision > 0 ){ +- strlen = precision; +- } else { +- /* cheap strlen so you do not have library call */ +- for( strlen = 0; (c=value[strlen]); ++ strlen ){ +- if( visible_control && iscntrl( c ) && !isspace( c ) ){ +- ++strlen; +- } ++ /* cheap strlen so you do not have library call */ ++ for( strlenv = i = 0; (c=CVAL(value+i)); ++i ){ ++ if( visible_control && iscntrl( c ) && c != '\t' && c != '\n' ){ ++ ++strlenv; + } ++ ++strlenv; + } +- padlen = len - strlen; ++ if( precision > 0 && strlenv > precision ){ ++ strlenv = precision; ++ } ++ padlen = len - strlenv; + if( padlen < 0 ) padlen = 0; + if( ljust ) padlen = -padlen; + while( padlen > 0 ) { +- dopr_outch( ' ' ); ++ dopr_outch( buffer, left, ' ' ); + --padlen; + } + /* output characters */ +- for( i = 0; (c = value[i]); ++i ){ +- if( visible_control && iscntrl( c ) && !isspace( c ) ){ +- dopr_outch('^'); ++ for( i = 0; i < strlenv && (c = CVAL(value+i)); ++i ){ ++ if( visible_control && iscntrl( c ) && c != '\t' && c != '\n' ){ ++ dopr_outch(buffer, left, '^'); + c = ('@' | (c & 0x1F)); + } +- dopr_outch(c); ++ dopr_outch(buffer, left, c); + } + while( padlen < 0 ) { +- dopr_outch( ' ' ); ++ dopr_outch( buffer, left, ' ' ); + ++padlen; + } + } + +-static void +-fmtnum( long value, int base, int dosign, int ljust, ++ static void ++ fmtnum( char **buffer, int *left, ++ union value *value, int base, int dosign, int ljust, + int len, int zpad, int precision ) + { + int signvalue = 0; ++#if defined(HAVE_LONG_LONG) ++ unsigned long long uvalue; ++#else + unsigned long uvalue; +- char convert[20]; ++#endif ++ char convert[sizeof( union value) * 8 + 16]; + int place = 0; + int padlen = 0; /* amount to pad */ + int caps = 0; + +- /* DEBUGP(("value 0x%x, base %d, dosign %d, ljust %d, len %d, zpad %d\n", +- value, base, dosign, ljust, len, zpad )); */ +- uvalue = value; ++ /* fprintf(stderr,"value 0x%x, base %d, dosign %d, ljust %d, len %d, zpad %d\n", ++ value, base, dosign, ljust, len, zpad );/ **/ ++ uvalue = value->value; + if( dosign ){ +- if( value < 0 ) { ++ if( value->value < 0 ) { + signvalue = '-'; +- uvalue = -value; ++ uvalue = -value->value; + } + } + if( base < 0 ){ +@@ -385,71 +876,148 @@ fmtnum( long value, int base, int dosig + padlen = len - place; + if( padlen < 0 ) padlen = 0; + if( ljust ) padlen = -padlen; +- /* DEBUGP(( "str '%s', place %d, sign %c, padlen %d\n", +- convert,place,signvalue,padlen)); */ ++ /* fprintf( stderr, "str '%s', place %d, sign %c, padlen %d\n", ++ convert,place,signvalue,padlen); / **/ + if( zpad && padlen > 0 ){ + if( signvalue ){ +- dopr_outch( signvalue ); ++ dopr_outch( buffer, left, signvalue ); + --padlen; + signvalue = 0; + } + while( padlen > 0 ){ +- dopr_outch( zpad ); ++ dopr_outch( buffer, left, zpad ); + --padlen; + } + } + while( padlen > 0 ) { +- dopr_outch( ' ' ); ++ dopr_outch( buffer, left, ' ' ); + --padlen; + } +- if( signvalue ) dopr_outch( signvalue ); +- while( place > 0 ) dopr_outch( convert[--place] ); ++ if( signvalue ) dopr_outch( buffer, left, signvalue ); ++ while( place > 0 ) dopr_outch( buffer, left, convert[--place] ); + while( padlen < 0 ){ +- dopr_outch( ' ' ); ++ dopr_outch( buffer, left, ' ' ); + ++padlen; + } + } + +-static void +-fmtdouble( int fmt, double value, int ljust, int len, int zpad, int precision ) ++#if defined(HAVE_QUAD_T) ++ ++ static void ++ fmtquad( char **buffer, int *left, ++ union value *value, int base, int dosign, int ljust, ++ int len, int zpad, int precision ) + { +- char convert[128]; +- char fmtstr[128]; +- int l; ++ int signvalue = 0; ++ int place = 0; ++ int padlen = 0; /* amount to pad */ ++ int caps = 0; ++ int i, c; ++ union { ++ quad_t qvalue; ++ unsigned char qconvert[sizeof(quad_t)]; ++ } vvalue; ++ char convert[2*sizeof(quad_t)+1]; ++ ++ /* fprintf(stderr,"value 0x%x, base %d, dosign %d, ljust %d, len %d, zpad %d\n", ++ value, base, dosign, ljust, len, zpad );/ **/ ++ vvalue.qvalue = value->qvalue; + +- if( len == 0 ) len = 10; +- if( len > sizeof(convert) - 10 ){ +- len = sizeof(convert) - 10; ++ if( base < 0 ){ ++ caps = 1; + } +- if( precision > sizeof(convert) - 10 ){ +- precision = sizeof(convert) - 10; ++ ++ for( i = 0; i < (int)sizeof(quad_t); ++i ){ ++ c = vvalue.qconvert[i]; ++ convert[2*i] = ++ (caps? "0123456789ABCDEF":"0123456789abcdef")[ (c >> 4) & 0xF]; ++ convert[2*i+1] = ++ (caps? "0123456789ABCDEF":"0123456789abcdef")[ c & 0xF]; + } +- if( precision > len ) precision = len; +- strcpy( fmtstr, "%" ); +- if( ljust ) strcat(fmtstr, "-" ); +- if( len ){ +- sprintf( fmtstr+strlen(fmtstr), "%d", len ); ++ convert[2*i] = 0; ++ ++ place = strlen(convert); ++ padlen = len - place; ++ if( padlen < 0 ) padlen = 0; ++ if( ljust ) padlen = -padlen; ++ /* fprintf( stderr, "str '%s', place %d, sign %c, padlen %d\n", ++ convert,place,signvalue,padlen); / **/ ++ if( zpad && padlen > 0 ){ ++ if( signvalue ){ ++ dopr_outch( buffer, left, signvalue ); ++ --padlen; ++ signvalue = 0; ++ } ++ while( padlen > 0 ){ ++ dopr_outch( buffer, left, zpad ); ++ --padlen; ++ } ++ } ++ while( padlen > 0 ) { ++ dopr_outch( buffer, left, ' ' ); ++ --padlen; ++ } ++ if( signvalue ) dopr_outch( buffer, left, signvalue ); ++ while( place > 0 ) dopr_outch( buffer, left, convert[--place] ); ++ while( padlen < 0 ){ ++ dopr_outch( buffer, left, ' ' ); ++ ++padlen; ++ } ++} ++ ++#endif ++ ++ static void mystrcat(char *dest, char *src ) ++{ ++ if( dest && src ){ ++ dest += safestrlen(dest); ++ strcpy(dest,src); ++ } ++} ++ ++ static void ++ fmtdouble( char **buffer, int *left, ++ int fmt, double value, int ljust, int len, int zpad, int precision ) ++{ ++ char convert[sizeof( union value) * 8 + 512]; ++ char formatstr[128]; ++ ++ /* fprintf(stderr,"len %d, precision %d\n", len, precision ); */ ++ if( len > 255 ){ ++ len = 255; ++ } ++ if( precision > 255 ){ ++ precision = 255; ++ } ++ if( precision >= 0 && len > 0 && precision > len ) precision = len; ++ strcpy( formatstr, "%" ); /* 1 */ ++ if( ljust ) mystrcat(formatstr, "-" ); /* 1 */ ++ if( zpad ) mystrcat(formatstr, "0" ); /* 1 */ ++ if( len >= 0 ){ ++ sprintf( formatstr+strlen(formatstr), "%d", len ); /* 3 */ + } +- if( precision > 0 ){ +- sprintf( fmtstr+strlen(fmtstr), ".%d", precision ); ++ if( precision >= 0 ){ ++ sprintf( formatstr+strlen(formatstr), ".%d", precision ); /* 3 */ + } +- l = strlen( fmtstr ); +- fmtstr[l] = fmt; +- fmtstr[l+1] = 0; +- sprintf( convert, fmtstr, value ); +- dostr( convert ); ++ /* format string will be at most 10 chars long ... */ ++ sprintf( formatstr+strlen(formatstr), "%c", fmt ); ++ /* this is easier than trying to do the portable dtostr */ ++ /* fprintf(stderr,"format string '%s'\n", formatstr); */ ++ sprintf( convert, formatstr, value ); ++ dostr( buffer, left, convert ); + } + +-static void dostr( char *str ) ++ static void dostr( char **buffer, int *left, char *str ) + { +- while(*str) dopr_outch(*str++); ++ if(str)while(*str) dopr_outch( buffer, left, *str++ ); + } + +-static void dopr_outch( int c ) ++ static void dopr_outch( char **buffer, int *left, int c ) + { +- if( end == 0 || output < end ){ +- *output++ = c; ++ if( *left > 0 ){ ++ *(*buffer)++ = c; + } ++ *left -= 1; + } + + +@@ -461,29 +1029,26 @@ static void dopr_outch( int c ) + * Patrick Powell Tue Apr 11 08:05:05 PDT 1995 + ****************************************************************************/ + /****************************************************************************/ +-#if !defined(HAVE_STRERROR) +- +-# if defined(HAVE_SYS_NERR) +-# if !defined(HAVE_SYS_NERR_DEF) +- extern int sys_nerr; +-# endif +-# define num_errors (sys_nerr) +-# else +-# define num_errors (-1) /* always use "errno=%d" */ +-# endif + ++#if !defined(HAVE_STRERROR) ++# undef num_errors + # if defined(HAVE_SYS_ERRLIST) +-# if !defined(HAVE_SYS_ERRLIST_DEF) ++# if !defined(HAVE_DECL_SYS_ERRLIST) + extern const char *const sys_errlist[]; + # endif +-# else +-# undef num_errors +-# define num_errors (-1) /* always use "errno=%d" */ ++# if defined(HAVE_SYS_NERR) ++# if !defined(HAVE_DECL_SYS_NERR) ++ extern int sys_nerr; ++# endif ++# define num_errors (sys_nerr) ++# endif ++# endif ++# if !defined(num_errors) ++# define num_errors (-1) /* always use "errno=%d" */ + # endif +- + #endif + +-static char * plp_Errormsg ( int err ) ++ static char * plp_Errormsg ( int err, char *buffer /* int maxlen = 32 */) + { + char *cp; + +@@ -496,10 +1061,8 @@ static char * plp_Errormsg ( int err ) + } else + # endif + { +- static char msgbuf[32]; /* holds "errno=%d". */ +- /* SAFE use of sprintf */ +- (void) sprintf (msgbuf, "errno=%d", err); +- cp = msgbuf; ++ (void) sprintf (buffer, "errno=%d", err); ++ cp = buffer; + } + #endif + return (cp); +@@ -507,23 +1070,47 @@ static char * plp_Errormsg ( int err ) + + #if defined(TEST) + #include <stdio.h> +-int main( void ) ++ int main( void ) + { + char buffer[128]; + char *t; + char *test1 = "01234"; ++ int n; + errno = 1; +- plp_snprintf( buffer, sizeof(buffer), (t="errno '%m'")); printf( "%s = '%s'\n", t, buffer ); +- plp_snprintf( buffer, sizeof(buffer), (t = "%s"), test1 ); printf( "%s = '%s'\n", t, buffer ); +- plp_snprintf( buffer, sizeof(buffer), (t = "%12s"), test1 ); printf( "%s = '%s'\n", t, buffer ); +- plp_snprintf( buffer, sizeof(buffer), (t = "%-12s"), test1 ); printf( "%s = '%s'\n", t, buffer ); +- plp_snprintf( buffer, sizeof(buffer), (t = "%12.2s"), test1 ); printf( "%s = '%s'\n", t, buffer ); +- plp_snprintf( buffer, sizeof(buffer), (t = "%-12.2s"), test1 ); printf( "%s = '%s'\n", t, buffer ); +- plp_snprintf( buffer, sizeof(buffer), (t = "%g"), 1.25 ); printf( "%s = '%s'\n", t, buffer ); +- plp_snprintf( buffer, sizeof(buffer), (t = "%g"), 1.2345 ); printf( "%s = '%s'\n", t, buffer ); +- plp_snprintf( buffer, sizeof(buffer), (t = "%12g"), 1.25 ); printf( "%s = '%s'\n", t, buffer ); +- plp_snprintf( buffer, sizeof(buffer), (t = "%12.2g"), 1.25 ); printf( "%s = '%s'\n", t, buffer ); +- plp_snprintf( buffer, sizeof(buffer), (t = "%0*d"), 6, 1 ); printf( "%s = '%s'\n", t, buffer ); ++ buffer[0] = 0; ++ n = snprintf( buffer, 0, (t="test")); printf( "[%d] %s = '%s'\n", n, t, buffer ); ++ n = snprintf( buffer, sizeof(buffer), (t="errno '%m'")); printf( "[%d] %s = '%s'\n", n, t, buffer ); ++ n = snprintf( buffer, sizeof(buffer), (t = "%s"), test1 ); printf( "[%d] %s = '%s'\n", n, t, buffer ); ++ n = snprintf( buffer, sizeof(buffer), (t = "%12s"), test1 ); printf( "[%d] %s = '%s'\n", n, t, buffer ); ++ n = snprintf( buffer, sizeof(buffer), (t = "%-12s"), test1 ); printf( "[%d] %s = '%s'\n", n, t, buffer ); ++ n = snprintf( buffer, sizeof(buffer), (t = "%12.2s"), test1 ); printf( "[%d] %s = '%s'\n", n, t, buffer ); ++ n = snprintf( buffer, sizeof(buffer), (t = "%-12.2s"), test1 ); printf( "[%d] %s = '%s'\n", n, t, buffer ); ++ n = snprintf( buffer, sizeof(buffer), (t = "%g"), 1.25 ); printf( "[%d] %s = '%s'\n", n, t, buffer ); ++ n = snprintf( buffer, sizeof(buffer), (t = "%g"), 1.2345 ); printf( "[%d] %s = '%s'\n", n, t, buffer ); ++ n = snprintf( buffer, sizeof(buffer), (t = "%12g"), 1.25 ); printf( "[%d] %s = '%s'\n", n, t, buffer ); ++ n = snprintf( buffer, sizeof(buffer), (t = "%12.1g"), 1.25 ); printf( "[%d] %s = '%s'\n", n, t, buffer ); ++ n = snprintf( buffer, sizeof(buffer), (t = "%12.2g"), 1.25 ); printf( "[%d] %s = '%s'\n", n, t, buffer ); ++ n = snprintf( buffer, sizeof(buffer), (t = "%12.3g"), 1.25 ); printf( "[%d] %s = '%s'\n", n, t, buffer ); ++ n = snprintf( buffer, sizeof(buffer), (t = "%0*d"), 6, 1 ); printf( "[%d] %s = '%s'\n", n, t, buffer ); ++#if defined(HAVE_LONG_LONG) ++ n = snprintf( buffer, sizeof(buffer), (t = "%llx"), 1, 2, 3, 4 ); printf( "[%d] %s = '%s'\n", n, t, buffer ); ++ n = snprintf( buffer, sizeof(buffer), (t = "%llx"), (long long)1, (long long)2 ); printf( "[%d] %s = '%s'\n", n, t, buffer ); ++ n = snprintf( buffer, sizeof(buffer), (t = "%qx"), 1, 2, 3, 4 ); printf( "[%d] %s = '%s'\n", n, t, buffer ); ++ n = snprintf( buffer, sizeof(buffer), (t = "%qx"), (quad_t)1, (quad_t)2 ); printf( "[%d] %s = '%s'\n", n, t, buffer ); ++#endif ++ n = snprintf( buffer, sizeof(buffer), (t = "0%x, 0%x"), (char *)(0x01234567), (char *)0, 0, 0, 0); printf( "[%d] %s = '%s'\n", n, t, buffer ); ++ n = snprintf( buffer, sizeof(buffer), (t = "0%x, 0%x"), (char *)(0x01234567), (char *)0x89ABCDEF, 0, 0, 0); printf( "[%d] %s = '%s'\n", n, t, buffer ); ++ n = snprintf( buffer, sizeof(buffer), (t = "0%x, 0%x"), t, 0, 0, 0, 0); printf( "[%d] %s = '%s'\n", n, t, buffer ); ++ n = snprintf( buffer, sizeof(buffer), (t = "%f"), 1.25 ); printf( "[%d] %s = '%s'\n", n, t, buffer ); ++ n = snprintf( buffer, sizeof(buffer), (t = "%f"), 1.2345 ); printf( "[%d] %s = '%s'\n", n, t, buffer ); ++ n = snprintf( buffer, sizeof(buffer), (t = "%12f"), 1.25 ); printf( "[%d] %s = '%s'\n", n, t, buffer ); ++ n = snprintf( buffer, sizeof(buffer), (t = "%12.2f"), 1.25 ); printf( "[%d] %s = '%s'\n", n, t, buffer ); ++ n = snprintf( buffer, sizeof(buffer), (t = "%f"), 1.0 ); printf( "[%d] %s = '%s'\n", n, t, buffer ); ++ n = snprintf( buffer, sizeof(buffer), (t = "%.0f"), 1.0 ); printf( "[%d] %s = '%s'\n", n, t, buffer ); ++ n = snprintf( buffer, sizeof(buffer), (t = "%0.0f"), 1.0 ); printf( "[%d] %s = '%s'\n", n, t, buffer ); ++ n = snprintf( buffer, sizeof(buffer), (t = "%1.0f"), 1.0 ); printf( "[%d] %s = '%s'\n", n, t, buffer ); ++ n = snprintf( buffer, sizeof(buffer), (t = "%1.5f"), 1.0 ); printf( "[%d] %s = '%s'\n", n, t, buffer ); ++ n = snprintf( buffer, sizeof(buffer), (t = "%5.5f"), 1.0 ); printf( "[%d] %s = '%s'\n", n, t, buffer ); + return(0); + } + #endif diff --git a/source/xap/xsane/xsane.SlackBuild b/source/xap/xsane/xsane.SlackBuild index 991cea302..a7617a32b 100755 --- a/source/xap/xsane/xsane.SlackBuild +++ b/source/xap/xsane/xsane.SlackBuild @@ -1,6 +1,6 @@ #!/bin/sh -# Copyright 2008, 2009, 2011 Patrick J. Volkerding, Sebeka, MN, USA +# Copyright 2008, 2009, 2011, 2015 Patrick J. Volkerding, Sebeka, MN, USA # All rights reserved. # # Redistribution and use of this script, with or without modification, is @@ -21,8 +21,8 @@ # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -VERSION=0.998 -BUILD=${BUILD:-3} +VERSION=0.999 +BUILD=${BUILD:-1} # Automatically determine the architecture we're building on: if [ -z "$ARCH" ]; then @@ -63,6 +63,27 @@ find . \ \( -perm 666 -o -perm 664 -o -perm 600 -o -perm 444 -o -perm 440 -o -perm 400 \) \ -exec chmod 644 {} \; +zcat $CWD/xsane-0.995-xdg-open.patch.gz | patch -p1 --verbose || exit 1 +zcat $CWD/xsane-0.995-close-fds.patch.gz | patch -p1 --verbose || exit 1 +zcat $CWD/xsane-0.996-no-eula.patch.gz | patch -p1 --verbose || exit 1 +zcat $CWD/xsane-0.997-off-root-build.patch.gz | patch -p1 --verbose || exit 1 +zcat $CWD/xsane-0.999-no-file-selected.patch.gz | patch -p1 --verbose || exit 1 +zcat $CWD/xsane-0.997-ipv6.patch.gz | patch -p1 --verbose || exit 1 +zcat $CWD/xsane-0.998-preview-selection.patch.gz | patch -p1 --verbose || exit 1 +zcat $CWD/xsane-0.998-libpng.patch.gz | patch -p1 --verbose || exit 1 +zcat $CWD/xsane-0.998-wmclass.patch.gz | patch -p1 --verbose || exit 1 +zcat $CWD/xsane-0.998-desktop-file.patch.gz | patch -p1 --verbose || exit 1 +zcat $CWD/xsane-0.999-man-page.patch.gz | patch -p1 --verbose || exit 1 +zcat $CWD/xsane-0.999-pdf-no-high-bpp.patch.gz | patch -p1 --verbose || exit 1 +zcat $CWD/xsane-0.999-lcms2.patch.gz | patch -p1 --verbose || exit 1 +zcat $CWD/xsane-0.999-coverity.patch.gz | patch -p1 --verbose || exit 1 +zcat $CWD/xsane-0.999-snprintf-update.patch.gz | patch -p1 --verbose || exit 1 +zcat $CWD/xsane-0.999-signal-handling.patch.gz | patch -p1 --verbose || exit 1 +zcat $CWD/xsane-0.999-7-autoconf.patch.gz | patch -p1 --verbose || exit 1 + +# This isn't working :/ +#autoreconf -fiv + CFLAGS="$SLKCFLAGS" \ ./configure \ --prefix=/usr \ diff --git a/source/xap/xscreensaver/dump.osx.sources.sh b/source/xap/xscreensaver/dump.android.osx.sources.sh index fc3c5f461..3993f510b 100755 --- a/source/xap/xscreensaver/dump.osx.sources.sh +++ b/source/xap/xscreensaver/dump.android.osx.sources.sh @@ -6,6 +6,7 @@ VERSION=${VERSION:-$(echo xscreensaver-*.tar.?z* | rev | cut -f 3- -d . | cut -f tar xf xscreensaver-${VERSION}.tar.xz || exit 1 mv xscreensaver-${VERSION}.tar.xz xscreensaver-${VERSION}.tar.xz.orig rm -r xscreensaver-${VERSION}/OSX/* +rm -r xscreensaver-${VERSION}/android/* tar cf xscreensaver-${VERSION}.tar xscreensaver-${VERSION} rm -r xscreensaver-${VERSION} xz -9 xscreensaver-${VERSION}.tar diff --git a/source/xap/xscreensaver/xscreensaver.SlackBuild b/source/xap/xscreensaver/xscreensaver.SlackBuild index b7ca3799b..43d7995a1 100755 --- a/source/xap/xscreensaver/xscreensaver.SlackBuild +++ b/source/xap/xscreensaver/xscreensaver.SlackBuild @@ -1,6 +1,6 @@ #!/bin/sh -# Copyright 2008, 2009, 2010, 2012, 2013 Patrick J. Volkerding, Sebeka, Minnesota, USA +# Copyright 2008, 2009, 2010, 2012, 2013, 2014, 2016 Patrick J. Volkerding, Sebeka, Minnesota, USA # All rights reserved. # # Redistribution and use of this script, with or without modification, is @@ -27,7 +27,7 @@ BUILD=${BUILD:-2} # Automatically determine the architecture we're building on: if [ -z "$ARCH" ]; then case "$( uname -m )" in - i?86) export ARCH=i486 ;; + i?86) export ARCH=i586 ;; arm*) export ARCH=arm ;; # Unless $ARCH is already set, use uname -m for all other archs: *) export ARCH=$( uname -m ) ;; @@ -36,8 +36,8 @@ fi NUMJOBS=${NUMJOBS:-" -j7 "} -if [ "$ARCH" = "i486" ]; then - SLKCFLAGS="-O2 -march=i486 -mtune=i686" +if [ "$ARCH" = "i586" ]; then + SLKCFLAGS="-O2 -march=i586 -mtune=i686" LIBDIRSUFFIX="" elif [ "$ARCH" = "s390" ]; then SLKCFLAGS="-O2" @@ -69,6 +69,12 @@ zcat $CWD/xscreensaver.setuid.diff.gz | patch -p1 --verbose --backup --suffix=.o # Add support for the electricsheep distributed screensaver: zcat $CWD/xscreensaver.electricsheep.diff.gz | patch -p1 --verbose --backup --suffix=.orig || exit 1 +# Remove a feature that pops up a nag screen claiming the version is old +# after one year. Just don't send in bug reports on an old version, OK folks? +# I hate to swim against upstream, but with all respect this feature is not +# helpful to distributions. +zcat $CWD/xscreensaver.no.expiration.date.diff.gz | patch -p1 --verbose --backup --suffix=.orig || exit 1 + chown -R root:root . find . \ \( -perm 777 -o -perm 775 -o -perm 711 -o -perm 555 -o -perm 511 \) \ @@ -84,17 +90,17 @@ CXXFLAGS="$SLKCFLAGS" \ --libdir=/usr/lib${LIBDIRSUFFIX} \ --mandir=/usr/man \ --with-x-app-defaults=/etc/X11/app-defaults \ + --with-text-file=/usr/doc/netdate/COPYRIGHT \ --with-shadow \ --with-jpeg \ --with-gl \ - --build=$ARCH-slackware-linux - -# We use '-i' because xscreensaver's NLS support has always been horribly broken -make -i $NUMJOBS || make -i -make -i install_prefix=$PKG install-strip + --build=$ARCH-slackware-linux || exit 1 -gzip -9 $PKG/usr/man/man?/* +# Build: +make $NUMJOBS || make || exit 1 +make install_prefix=$PKG install-strip || exit 1 +# Needed for password unlock: chown root:shadow $PKG/usr/bin/xscreensaver chmod 2751 $PKG/usr/bin/xscreensaver @@ -106,6 +112,21 @@ cp -a \ README* \ $PKG/usr/doc/xscreensaver-$VERSION +# Compress and link manpages, if any: +if [ -d $PKG/usr/man ]; then + ( cd $PKG/usr/man + for manpagedir in $(find . -type d -name "man*") ; do + ( cd $manpagedir + for eachpage in $( find . -type l -maxdepth 1 | grep -v '\.gz$') ; do + ln -s $( readlink $eachpage ).gz $eachpage.gz + rm $eachpage + done + gzip -9 *.? + ) + done + ) +fi + # Insert an older version of xscreensaver-getimage-file to avoid depending # on libwww-perl. Maybe we'll eventually add this, but bundling 14 perl # modules is a lot of maintainance just to get slidescreen working again. diff --git a/source/xap/xscreensaver/xscreensaver.no.expiration.date.diff b/source/xap/xscreensaver/xscreensaver.no.expiration.date.diff new file mode 100644 index 000000000..bdbcbe1d1 --- /dev/null +++ b/source/xap/xscreensaver/xscreensaver.no.expiration.date.diff @@ -0,0 +1,29 @@ +--- ./driver/prefs.c.orig 2016-05-23 22:08:27.000000000 -0500 ++++ ./driver/prefs.c 2016-05-30 15:29:36.446721679 -0500 +@@ -1734,6 +1734,17 @@ + shipping the last version with the old license and then never + upgrading it again -- which would be the worst possible outcome for + everyone involved, most especially the users. ++ ++ --- ++ ++ NOTE: This feature is disabled by Slackware... we do not ship multi-year ++ old versions, nor do we think it is a good idea to include nag screens ++ that activate when an expiration date is reached. In this case, the ++ nag screen was activated after only one year, which practically insures ++ that this will be seen before the next stable Slackware release. ++ If there's a problem that needs fixing, we'll issue a fix. ++ No nag screens please. Thanks for possibly reconsidering this! ++ + */ + + time_t now = time ((time_t *) 0); /* */ +@@ -1766,5 +1777,7 @@ + months = ((((tm->tm_year + 1900) * 12) + tm->tm_mon) - /* h */ + (y * 12 + m)); /* p */ + /* . */ +- return (months >= 17); /* */ ++ /* Disable date checking for Slackware: */ /* \ö/ */ ++ /* return (months >= 17); */ /* */ ++ return ( 0 ); + } diff --git a/source/xap/xv/xv-libpng-1.5.patch b/source/xap/xv/xv-libpng-1.5.patch new file mode 100644 index 000000000..66659ff8e --- /dev/null +++ b/source/xap/xv/xv-libpng-1.5.patch @@ -0,0 +1,543 @@ +$OpenBSD: patch-xvpng_c,v 1.2 2011/08/29 18:07:44 espie Exp $ + +Fix build with png-1.5. + +--- xvpng.c.orig Mon May 14 02:53:28 2007 ++++ xvpng.c Mon Aug 29 15:05:31 2011 +@@ -31,6 +31,7 @@ + + #ifdef HAVE_PNG + ++#include "zlib.h" + #include "png.h" + + /*** Stuff for PNG Dialog box ***/ +@@ -41,7 +42,7 @@ + #define COMPRESSION 6 /* default zlib compression level, not max + (Z_BEST_COMPRESSION) */ + +-#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 +@@ -435,6 +436,16 @@ int WritePNG(fp, pic, ptype, w, h, rmap, gmap, bmap, n + { + png_struct *png_ptr; + png_info *info_ptr; ++ struct { ++ /* IHDR */ ++ png_uint_32 width; ++ png_uint_32 height; ++ int bit_depth; ++ int color_type; ++ int interlace_type; ++ /* PLTE */ ++ int use_palette; ++ } info_tmp; + png_color palette[256]; + png_textp text; + byte r1[256], g1[256], b1[256]; /* storage for deduped palette */ +@@ -444,6 +455,7 @@ int WritePNG(fp, pic, ptype, w, h, rmap, gmap, bmap, n + byte *p, *png_line; + char software[256]; + char *savecmnt; ++ int num_text, max_text; + + if ((png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, + png_xv_error, png_xv_warning)) == NULL) { +@@ -458,7 +470,7 @@ int WritePNG(fp, pic, ptype, w, h, rmap, gmap, bmap, n + 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 +501,8 @@ int WritePNG(fp, pic, ptype, w, h, rmap, gmap, bmap, n + png_set_filter(png_ptr, 0, filter); + } + +- info_ptr->width = w; +- info_ptr->height = h; ++ info_tmp.width = w; ++ info_tmp.height = h; + if (w <= 0 || h <= 0) { + SetISTR(ISTR_WARNING, "%s: image dimensions out of range (%dx%d)", + fbasename, w, h); +@@ -498,7 +510,8 @@ int WritePNG(fp, pic, ptype, w, h, rmap, gmap, bmap, n + return -1; + } + +- info_ptr->interlace_type = interCB.val ? 1 : 0; ++ info_tmp.interlace_type = ++ interCB.val ? PNG_INTERLACE_ADAM7 : PNG_INTERLACE_NONE; + + linesize = 0; /* quiet a compiler warning */ + +@@ -542,40 +555,40 @@ int WritePNG(fp, pic, ptype, w, h, rmap, gmap, bmap, n + png_destroy_write_struct(&png_ptr, &info_ptr); + return -1; + } +- info_ptr->color_type = PNG_COLOR_TYPE_RGB; +- info_ptr->bit_depth = 8; ++ info_tmp.color_type = PNG_COLOR_TYPE_RGB; ++ info_tmp.bit_depth = 8; ++ info_tmp.use_palette = 0; + } else /* ptype == PIC8 */ { + linesize = w; +- info_ptr->color_type = PNG_COLOR_TYPE_PALETTE; ++ info_tmp.color_type = PNG_COLOR_TYPE_PALETTE; + if (numuniqcols <= 2) +- info_ptr->bit_depth = 1; ++ info_tmp.bit_depth = 1; + else + if (numuniqcols <= 4) +- info_ptr->bit_depth = 2; ++ info_tmp.bit_depth = 2; + else + if (numuniqcols <= 16) +- info_ptr->bit_depth = 4; ++ info_tmp.bit_depth = 4; + else +- info_ptr->bit_depth = 8; ++ info_tmp.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; +- info_ptr->valid |= PNG_INFO_PLTE; ++ info_tmp.use_palette = 1; + } + } + + else if (colorType == F_GREYSCALE || colorType == F_BWDITHER) { +- info_ptr->color_type = PNG_COLOR_TYPE_GRAY; ++ info_tmp.color_type = PNG_COLOR_TYPE_GRAY; ++ info_tmp.use_palette = 0; + if (colorType == F_BWDITHER) { + /* shouldn't happen */ + if (ptype == PIC24) FatalError("PIC24 and B/W Stipple in WritePNG()"); + +- info_ptr->bit_depth = 1; ++ info_tmp.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 +608,7 @@ int WritePNG(fp, pic, ptype, w, h, rmap, gmap, bmap, n + png_destroy_write_struct(&png_ptr, &info_ptr); + return -1; + } +- info_ptr->bit_depth = 8; ++ info_tmp.bit_depth = 8; + } + else /* ptype == PIC8 */ { + int low_precision; +@@ -617,7 +630,7 @@ int WritePNG(fp, pic, ptype, w, h, rmap, gmap, bmap, n + for (; i < 256; i++) + remap[i]=0; /* shouldn't be necessary, but... */ + +- info_ptr->bit_depth = 8; ++ info_tmp.bit_depth = 8; + + /* Note that this fails most of the time because of gamma */ + /* (and that would be a bug: GRR FIXME) */ +@@ -636,7 +649,7 @@ int WritePNG(fp, pic, ptype, w, h, rmap, gmap, bmap, n + for (i = 0; i < numuniqcols; i++) { + remap[i] &= 0xf; + } +- info_ptr->bit_depth = 4; ++ info_tmp.bit_depth = 4; + + /* try to adjust to 2-bit precision grayscale */ + +@@ -652,7 +665,7 @@ int WritePNG(fp, pic, ptype, w, h, rmap, gmap, bmap, n + for (i = 0; i < numuniqcols; i++) { + remap[i] &= 3; + } +- info_ptr->bit_depth = 2; ++ info_tmp.bit_depth = 2; + + /* try to adjust to 1-bit precision grayscale */ + +@@ -668,7 +681,7 @@ int WritePNG(fp, pic, ptype, w, h, rmap, gmap, bmap, n + for (i = 0; i < numuniqcols; i++) { + remap[i] &= 1; + } +- info_ptr->bit_depth = 1; ++ info_tmp.bit_depth = 1; + } + } + } +@@ -677,6 +690,20 @@ int WritePNG(fp, pic, ptype, w, h, rmap, gmap, bmap, n + else + png_error(png_ptr, "Unknown colorstyle in WritePNG"); + ++ png_set_IHDR(png_ptr, info_ptr, ++ info_tmp.width, info_tmp.height, ++ info_tmp.bit_depth, info_tmp.color_type, ++ info_tmp.interlace_type, PNG_COMPRESSION_TYPE_BASE, ++ PNG_FILTER_TYPE_BASE); ++ if (info_tmp.use_palette) { ++ /* ++ * info_ptr->num_palette = numuniqcols; ++ * info_ptr->palette = palette; ++ * info_ptr->valid |= PNG_INFO_PLTE; ++ */ ++ png_set_PLTE(png_ptr, info_ptr, palette, numuniqcols); ++ } ++ + if ((text = (png_textp)malloc(sizeof(png_text)))) { + sprintf(software, "XV %s", REVDATE); + +@@ -684,21 +711,29 @@ int WritePNG(fp, pic, ptype, w, h, rmap, gmap, bmap, n + text->key = "Software"; + text->text = software; + text->text_length = strlen(text->text); ++ text->lang = NULL; + +- info_ptr->max_text = 1; +- info_ptr->num_text = 1; +- info_ptr->text = text; ++ /* ++ * info_ptr->max_text = 1; ++ * info_ptr->num_text = 1; ++ * info_ptr->text = text; ++ */ ++ png_set_text(png_ptr, info_ptr, text, 1); ++ num_text = max_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; ++ /* ++ * info_ptr->gamma = 1.0/gDial.val; ++ * info_ptr->valid |= PNG_INFO_gAMA; ++ */ ++ png_set_gAMA(png_ptr, info_ptr, 1.0/gDial.val); + + png_write_info(png_ptr, info_ptr); + +- if (info_ptr->bit_depth < 8) ++ if (info_tmp.bit_depth < 8) + png_set_packing(png_ptr); + + pass=png_set_interlace_handling(png_ptr); +@@ -711,13 +746,13 @@ int WritePNG(fp, pic, ptype, w, h, rmap, gmap, bmap, n + int j; + p = pic; + for (j = 0; j < h; ++j) { +- if (info_ptr->color_type == PNG_COLOR_TYPE_GRAY) { ++ if (info_tmp.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 (info_tmp.color_type == PNG_COLOR_TYPE_PALETTE) { + int k; + for (k = 0; k < w; ++k) + png_line[k] = pc2nc[p[k]]; +@@ -743,24 +778,26 @@ int WritePNG(fp, pic, ptype, w, h, rmap, gmap, bmap, n + strcpy(savecmnt, picComments); + key = savecmnt; + tp = text; +- info_ptr->num_text = 0; + ++ png_free_data(png_ptr, info_ptr, PNG_FREE_TEXT, -1); ++ num_text = 0; ++ + comment = strchr(key, ':'); + + do { + /* Allocate a larger structure for comments if necessary */ +- if (info_ptr->num_text >= info_ptr->max_text) ++ if (num_text >= max_text) + { + if ((tp = +- realloc(text, (info_ptr->num_text + 2)*sizeof(png_text))) == NULL) ++ realloc(text, (num_text + 2)*sizeof(png_text))) == NULL) + { + break; + } + else + { + text = tp; +- tp = &text[info_ptr->num_text]; +- info_ptr->max_text += 2; ++ tp = &text[num_text]; ++ max_text += 2; + } + } + +@@ -810,7 +847,7 @@ int WritePNG(fp, pic, ptype, w, h, rmap, gmap, bmap, n + } + + tp->compression = tp->text_length > 640 ? 0 : -1; +- info_ptr->num_text++; ++ num_text++; + tp++; + } + } +@@ -834,27 +871,29 @@ int WritePNG(fp, pic, ptype, w, h, rmap, gmap, bmap, n + tp->text = key; + tp->text_length = q - key; + tp->compression = tp->text_length > 750 ? 0 : -1; +- info_ptr->num_text++; ++ num_text++; + key = NULL; + } + } while (key && *key); ++ png_set_text(png_ptr, info_ptr, text, num_text); + } + else { +- info_ptr->num_text = 0; ++ png_free_data(png_ptr, info_ptr, PNG_FREE_TEXT, -1); + } + } +- info_ptr->text = text; + +- png_convert_from_time_t(&(info_ptr->mod_time), time(NULL)); +- info_ptr->valid |= PNG_INFO_tIME; ++ { ++ png_time mod_time; + ++ png_convert_from_time_t(&mod_time, time(NULL)); ++ png_set_tIME(png_ptr, info_ptr, &mod_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; + if (savecmnt) + { + free(savecmnt); +@@ -886,6 +925,8 @@ int LoadPNG(fname, pinfo) + int pass; + int gray_to_rgb; + size_t commentsize; ++ png_textp text; ++ int num_text; + + fbasename = BaseName(fname); + +@@ -921,7 +962,7 @@ int LoadPNG(fname, pinfo) + 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 +986,8 @@ int LoadPNG(fname, pinfo) + #endif + png_read_info(png_ptr, info_ptr); + +- pinfo->w = pinfo->normw = info_ptr->width; +- pinfo->h = pinfo->normh = info_ptr->height; ++ pinfo->w = pinfo->normw = png_get_image_width(png_ptr, info_ptr); ++ pinfo->h = pinfo->normh = png_get_image_height(png_ptr, info_ptr); + 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 +998,9 @@ int LoadPNG(fname, pinfo) + pinfo->frmType = F_PNG; + + sprintf(pinfo->fullInfo, "PNG, %d bit ", +- info_ptr->bit_depth * info_ptr->channels); ++ png_get_bit_depth(png_ptr,info_ptr) * png_get_channels(png_ptr, info_ptr)); + +- switch(info_ptr->color_type) { ++ switch(png_get_color_type(png_ptr, info_ptr)) { + case PNG_COLOR_TYPE_PALETTE: + strcat(pinfo->fullInfo, "palette color"); + break; +@@ -983,15 +1024,20 @@ int LoadPNG(fname, pinfo) + + sprintf(pinfo->fullInfo + strlen(pinfo->fullInfo), + ", %sinterlaced. (%d bytes)", +- info_ptr->interlace_type ? "" : "non-", filesize); ++ png_get_interlace_type(png_ptr, info_ptr) ? "" : "non-", filesize); + +- sprintf(pinfo->shrtInfo, "%lux%lu PNG", info_ptr->width, info_ptr->height); ++ sprintf(pinfo->shrtInfo, "%lux%lu PNG", ++ png_get_image_width(png_ptr, info_ptr), ++ png_get_image_height(png_ptr, info_ptr)); + +- if (info_ptr->bit_depth < 8) ++ if (png_get_bit_depth(png_ptr, info_ptr) < 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)) { ++ double gamma; ++ 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 +1046,7 @@ int LoadPNG(fname, pinfo) + gray_to_rgb = 0; /* quiet a compiler warning */ + + if (have_imagebg) { +- if (info_ptr->bit_depth == 16) { ++ if (png_get_bit_depth(png_ptr, info_ptr) == 16) { + my_background.red = imagebgR; + my_background.green = imagebgG; + my_background.blue = imagebgB; +@@ -1013,8 +1059,8 @@ int LoadPNG(fname, pinfo) + } + 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 ((png_get_color_type(png_ptr, info_ptr) == PNG_COLOR_TYPE_GRAY_ALPHA || ++ (png_get_color_type(png_ptr, info_ptr) == PNG_COLOR_TYPE_GRAY && HAVE_tRNS)) && + (imagebgR != imagebgG || imagebgR != imagebgB)) /* i.e., colored bg */ + { + png_set_gray_to_rgb(png_ptr); +@@ -1022,8 +1068,10 @@ int LoadPNG(fname, pinfo) + 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_color_16p background; ++ 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 +1081,13 @@ int LoadPNG(fname, pinfo) + } + } + +- if (info_ptr->bit_depth == 16) ++ if (png_get_bit_depth(png_ptr, info_ptr) == 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 (png_get_color_type(png_ptr, info_ptr) == PNG_COLOR_TYPE_GRAY || ++ png_get_color_type(png_ptr, info_ptr) == PNG_COLOR_TYPE_GRAY_ALPHA) + { +- if (info_ptr->bit_depth == 1) ++ if (png_get_bit_depth(png_ptr, info_ptr) == 1) + pinfo->colType = F_BWDITHER; + else + pinfo->colType = F_GREYSCALE; +@@ -1050,8 +1098,8 @@ int LoadPNG(fname, pinfo) + + png_read_update_info(png_ptr, info_ptr); + +- if (info_ptr->color_type == PNG_COLOR_TYPE_RGB || +- info_ptr->color_type == PNG_COLOR_TYPE_RGB_ALPHA || gray_to_rgb) ++ if (png_get_color_type(png_ptr, info_ptr) == PNG_COLOR_TYPE_RGB || ++ png_get_color_type(png_ptr, info_ptr) == 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 +1113,20 @@ int LoadPNG(fname, pinfo) + } 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 (png_get_color_type(png_ptr, info_ptr) == PNG_COLOR_TYPE_GRAY || ++ png_get_color_type(png_ptr, info_ptr) == PNG_COLOR_TYPE_GRAY_ALPHA) { + for (i = 0; i < 256; i++) + pinfo->r[i] = pinfo->g[i] = pinfo->b[i] = i; + } else { ++ png_colorp palette; ++ int num_palette; ++ ++ png_get_PLTE(png_ptr, info_ptr, &palette, &num_palette); + 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; ++ 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 +1144,17 @@ int LoadPNG(fname, pinfo) + png_error(png_ptr, "can't allocate space for PNG image"); + } + +- png_start_read_image(png_ptr); ++ /* ++ * In png 1.5 (or at least 1.5.1beta06) calling this after calling ++ * png_read_update_info() does nothing besides issue a misleading ++ * warning message. The png docs are not at all clear on what an ++ * application is *supposed* to do, so I'm not sure if this is a ++ * problem with xv or with libpng. However, for now I'll comment ++ * this out as according to the png source that should be harmless ++ * and we don't want to see the warning message every time someone ++ * opens a png. ++ */ ++ /*png_start_read_image(png_ptr);*/ + + for (i = 0; i < pass; i++) { + byte *p = pinfo->pic; +@@ -1106,22 +1168,24 @@ int LoadPNG(fname, pinfo) + + 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); ++ if (text[i].text_length != 0) ++ strcat(pinfo->comment, text[i].text); + strcat(pinfo->comment, "\n"); + } + } +@@ -1143,7 +1207,7 @@ png_xv_error(png_ptr, message) + { + SetISTR(ISTR_WARNING,"%s: libpng error: %s", fbasename, message); + +- longjmp(png_ptr->jmpbuf, 1); ++ longjmp(png_jmpbuf(png_ptr), 1); + } + + diff --git a/source/xap/xv/xv.SlackBuild b/source/xap/xv/xv.SlackBuild index 95042cd8b..9b5b4cd31 100755 --- a/source/xap/xv/xv.SlackBuild +++ b/source/xap/xv/xv.SlackBuild @@ -1,6 +1,6 @@ #!/bin/sh -# Copyright 2008, 2009 Patrick J. Volkerding, Sebeka, MN, USA +# Copyright 2008, 2009, 2015 Patrick J. Volkerding, Sebeka, MN, USA # All rights reserved. # # Redistribution and use of this script, with or without modification, is @@ -21,7 +21,7 @@ # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. VERSION=3.10a -BUILD=${BUILD:-6} +BUILD=${BUILD:-7} # Automatically determine the architecture we're building on: if [ -z "$ARCH" ]; then @@ -54,7 +54,8 @@ if [ "$ARCH" = "x86_64" ]; then zcat $CWD/xv.prefix_x86_64.diff.gz | patch -p1 --verbose --backup --suffix=.orig || exit 1 fi zcat $CWD/xv.jasper.diff.gz | patch -p1 --verbose --backup --suffix=.orig || exit 1 -make -f Makefile.std +zcat $CWD/xv-libpng-1.5.patch.gz | patch -p0 --verbose --backup --suffix=.orig || exit 1 +make -f Makefile.std || exit 1 strip --strip-unneeded bggen vdcomp xcmap xv xvpictoppm mkdir -p $PKG/usr/bin cat bggen > $PKG/usr/bin/bggen |