Hi,

The diff below updates libXpm to version 3.5.13. Tests and oks
welcome.

Apply in $XSRCDIR/lib/libXpm and then rebuild xenocara following
release(8).

Index: ChangeLog
===================================================================
RCS file: /cvs/OpenBSD/xenocara/lib/libXpm/ChangeLog,v
retrieving revision 1.6
diff -u -p -u -r1.6 ChangeLog
--- ChangeLog   16 Dec 2016 07:28:34 -0000      1.6
+++ ChangeLog   15 Dec 2019 18:27:04 -0000
@@ -1,3 +1,131 @@
+commit b0fc485495a694816d76a43978e2cfd5575c554d
+Author: Peter Hutterer <peter.hutte...@who-t.net>
+Date:   Fri Dec 13 14:25:06 2019 +1000
+
+    libXpm 3.5.13
+    
+    Signed-off-by: Peter Hutterer <peter.hutte...@who-t.net>
+
+commit 5817fd4ac5308fe7c23301c652f174997009b7d5
+Author: Benjamin Tissoires <benjamin.tissoi...@redhat.com>
+Date:   Wed Dec 4 11:17:21 2019 +0100
+
+    parse: simplify error paths in xpmParseColors()
+    
+    We introduced a new label to handle the errors, we should use it
+    for the rest of the function.
+    
+    Signed-off-by: Benjamin Tissoires <benjamin.tissoi...@redhat.com>
+
+commit e1d8f704d52f70680869b7aae1da0ad2382db363
+Author: Peter Hutterer <peter.hutte...@who-t.net>
+Date:   Thu Dec 5 06:17:00 2019 +1000
+
+    parse: avoid memleak on error with STRLCAT/STRLCPY
+    
+    The original macro might exit the function without freeing `colorTable`.
+    
+    Move the macros into a slightly less awful helper function and use goto
+    to clean up in case of error.
+    
+    Signed-off-by: Peter Hutterer <peter.hutte...@who-t.net>
+
+commit 7af7c5e275b69daedee3696bee1e880586f30373
+Author: Fabrice Fontaine <fontaine.fabr...@gmail.com>
+Date:   Fri May 3 07:59:09 2019 +0200
+
+    Allow usage when fork() is not available
+    
+    When fork() is not available, we need to define NO_ZPIPE so that
+    libXpm doesn't try to fork/exec to use a pipe to uncompress compressed
+    .xpm files. There is obviously a loss of functionality, but loading
+    uncompressed .xpm files should continue to work.
+    
+    Signed-off-by: Thomas Petazzoni <thomas.petazz...@free-electrons.com>
+    [Retrieved from:
+    
https://git.buildroot.net/buildroot/tree/package/x11r7/xlib_libXpm/0001-fork-check.patch]
+    Signed-off-by: Fabrice Fontaine <fontaine.fabr...@gmail.com>
+
+commit 0be2c6712728cea1fa1bcc640e564c45c2c82e37
+Author: Alan Coopersmith <alan.coopersm...@oracle.com>
+Date:   Fri Dec 7 19:47:06 2018 -0800
+
+    Update configure.ac bug URL for gitlab migration
+    
+    Signed-off-by: Alan Coopersmith <alan.coopersm...@oracle.com>
+
+commit c9f8faf1c05fb92abc6c5b1db5e45eb1a7942875
+Author: Alan Coopersmith <alan.coopersm...@oracle.com>
+Date:   Mon Nov 19 22:30:30 2018 -0800
+
+    Update README for gitlab migration
+    
+    Signed-off-by: Alan Coopersmith <alan.coopersm...@oracle.com>
+
+commit 73a1e769dcf2a603fc63f5c36626c1c6db815f46
+Author: Alan Coopersmith <alan.coopersm...@oracle.com>
+Date:   Sun Sep 30 15:09:29 2018 -0700
+
+    After fdopen(), use fclose() instead of close() in error path
+    
+    Found by Oracle's Parfait 2.2 static analyzer:
+    
+    Error: File Leak
+       File Leak [file-ptr-leak]:
+          Leaked File fp
+            at line 94 of lib/libXpm/src/RdFToBuf.c in function 
'XpmReadFileToBuffer
+    '.
+              fp initialized at line 86 with fdopen
+              fp leaks when len < 0 at line 92.
+    
+    Introduced-by: commit 8b3024e6871ce50b34bf2dff924774bd654703bc
+    
+    Signed-off-by: Alan Coopersmith <alan.coopersm...@oracle.com>
+    Reviewed-by: Peter Hutterer <peter.hutte...@who-t.net>
+
+commit bc1b4962f048cfa33b76be46493e10cfb256fe98
+Author: Dave Bodenstab <the.t...@gmx.com>
+Date:   Wed Feb 22 12:04:54 2012 +0000
+
+    Windows build fixes
+    
+    https://bugs.freedesktop.org/show_bug.cgi?id=46475
+    https://bugs.freedesktop.org/attachment.cgi?id=57479
+    
+    Signed-off-by: Alan Coopersmith <alan.coopersm...@oracle.com>
+
+commit e42ca7b484418b169fd19a4c68e23ad2a6ec7a11
+Author: Mihail Konev <k....@ya.ru>
+Date:   Thu Jan 26 13:52:49 2017 +1000
+
+    autogen: add default patch prefix
+    
+    Signed-off-by: Mihail Konev <k....@ya.ru>
+
+commit ed8f9c2e8b635eb63497c48b24a056f9e6f50609
+Author: Emil Velikov <emil.l.veli...@gmail.com>
+Date:   Mon Mar 9 12:00:52 2015 +0000
+
+    autogen.sh: use quoted string variables
+    
+    Place quotes around the $srcdir, $ORIGDIR and $0 variables to prevent
+    fall-outs, when they contain space.
+    
+    Signed-off-by: Emil Velikov <emil.l.veli...@gmail.com>
+    Reviewed-by: Peter Hutterer <peter.hutte...@who-t.net>
+    Signed-off-by: Peter Hutterer <peter.hutte...@who-t.net>
+
+commit 644d7c595ba29fb368666fb497e1e14a92a65a77
+Author: Peter Hutterer <peter.hutte...@who-t.net>
+Date:   Tue Jan 24 10:32:07 2017 +1000
+
+    autogen.sh: use exec instead of waiting for configure to finish
+    
+    Syncs the invocation of configure with the one from the server.
+    
+    Signed-off-by: Peter Hutterer <peter.hutte...@who-t.net>
+    Reviewed-by: Emil Velikov <emil.veli...@collabora.com>
+
 commit 1fab5e81fd761f628fb68d22934615536dbd0220
 Author: Matthieu Herrb <matth...@herrb.eu>
 Date:   Mon Dec 12 23:09:52 2016 +0100
Index: Makefile.am
===================================================================
RCS file: /cvs/OpenBSD/xenocara/lib/libXpm/Makefile.am,v
retrieving revision 1.4
diff -u -p -u -r1.4 Makefile.am
--- Makefile.am 10 Mar 2012 14:30:32 -0000      1.4
+++ Makefile.am 15 Dec 2019 18:27:04 -0000
@@ -8,7 +8,7 @@ ACLOCAL_AMFLAGS = -I m4
 pkgconfigdir = $(libdir)/pkgconfig
 pkgconfig_DATA = xpm.pc
 
-EXTRA_DIST = COPYRIGHT NEWS.old
+EXTRA_DIST = COPYRIGHT NEWS.old README.md
 
 MAINTAINERCLEANFILES = ChangeLog INSTALL
 
Index: Makefile.in
===================================================================
RCS file: /cvs/OpenBSD/xenocara/lib/libXpm/Makefile.in,v
retrieving revision 1.9
diff -u -p -u -r1.9 Makefile.in
--- Makefile.in 11 Oct 2016 22:15:32 -0000      1.9
+++ Makefile.in 15 Dec 2019 18:27:39 -0000
@@ -54,7 +54,7 @@ POST_UNINSTALL = :
 build_triplet = @build@
 host_triplet = @host@
 subdir = .
-DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \
+DIST_COMMON = $(am__configure_deps) $(srcdir)/Makefile.am \
        $(srcdir)/Makefile.in $(srcdir)/config.h.in \
        $(srcdir)/xpm.pc.in $(top_srcdir)/configure AUTHORS COPYING \
        ChangeLog INSTALL compile config.guess config.sub depcomp \
@@ -324,7 +324,7 @@ SUBDIRS = doc include man src sxpm cxpm
 ACLOCAL_AMFLAGS = -I m4
 pkgconfigdir = $(libdir)/pkgconfig
 pkgconfig_DATA = xpm.pc
-EXTRA_DIST = COPYRIGHT NEWS.old
+EXTRA_DIST = COPYRIGHT NEWS.old README.md
 MAINTAINERCLEANFILES = ChangeLog INSTALL
 all: config.h
        $(MAKE) $(AM_MAKEFLAGS) all-recursive
Index: README
===================================================================
RCS file: README
diff -N README
--- README      31 Oct 2009 18:33:17 -0000      1.2
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,25 +0,0 @@
-libXpm - X Pixmap (XPM) image file format library
-
-All questions regarding this software should be directed at the
-Xorg mailing list:
-
-        http://lists.freedesktop.org/mailman/listinfo/xorg
-
-Please submit bug reports to the Xorg bugzilla:
-
-        https://bugs.freedesktop.org/enter_bug.cgi?product=xorg
-
-The master development code repository can be found at:
-
-        git://anongit.freedesktop.org/git/xorg/lib/libXpm
-
-        http://cgit.freedesktop.org/xorg/lib/libXpm
-
-For patch submission instructions, see:
-
-       http://www.x.org/wiki/Development/Documentation/SubmittingPatches
-
-For more information on the git code manager, see:
-
-        http://wiki.x.org/wiki/GitPage
-
Index: README.md
===================================================================
RCS file: README.md
diff -N README.md
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ README.md   15 Dec 2019 18:27:04 -0000
@@ -0,0 +1,18 @@
+libXpm - X Pixmap (XPM) image file format library
+-------------------------------------------------
+
+All questions regarding this software should be directed at the
+Xorg mailing list:
+
+  https://lists.x.org/mailman/listinfo/xorg
+
+The master development code repository can be found at:
+
+  https://gitlab.freedesktop.org/xorg/lib/libXpm
+
+Please submit bug reports and requests to merge patches there.
+
+For patch submission instructions, see:
+
+  https://www.x.org/wiki/Development/Documentation/SubmittingPatches
+
Index: aclocal.m4
===================================================================
RCS file: /cvs/OpenBSD/xenocara/lib/libXpm/aclocal.m4,v
retrieving revision 1.14
diff -u -p -u -r1.14 aclocal.m4
--- aclocal.m4  11 Oct 2016 22:15:32 -0000      1.14
+++ aclocal.m4  15 Dec 2019 18:27:35 -0000
@@ -19,32 +19,63 @@ You have another version of autoconf.  I
 If you have problems, you may need to regenerate the build system entirely.
 To do so, use the procedure documented by the package, typically 
'autoreconf'.])])
 
-# pkg.m4 - Macros to locate and utilise pkg-config.            -*- Autoconf -*-
-# serial 1 (pkg-config-0.24)
-# 
-# Copyright © 2004 Scott James Remnant <sc...@netsplit.com>.
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-#
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
-
-# PKG_PROG_PKG_CONFIG([MIN-VERSION])
-# ----------------------------------
+dnl pkg.m4 - Macros to locate and utilise pkg-config.   -*- Autoconf -*-
+dnl serial 11 (pkg-config-0.29.1)
+dnl
+dnl Copyright © 2004 Scott James Remnant <sc...@netsplit.com>.
+dnl Copyright © 2012-2015 Dan Nicholson <dbn.li...@gmail.com>
+dnl
+dnl This program is free software; you can redistribute it and/or modify
+dnl it under the terms of the GNU General Public License as published by
+dnl the Free Software Foundation; either version 2 of the License, or
+dnl (at your option) any later version.
+dnl
+dnl This program is distributed in the hope that it will be useful, but
+dnl WITHOUT ANY WARRANTY; without even the implied warranty of
+dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+dnl General Public License for more details.
+dnl
+dnl You should have received a copy of the GNU General Public License
+dnl along with this program; if not, write to the Free Software
+dnl Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+dnl 02111-1307, USA.
+dnl
+dnl As a special exception to the GNU General Public License, if you
+dnl distribute this file as part of a program that contains a
+dnl configuration script generated by Autoconf, you may include it under
+dnl the same distribution terms that you use for the rest of that
+dnl program.
+
+dnl PKG_PREREQ(MIN-VERSION)
+dnl -----------------------
+dnl Since: 0.29
+dnl
+dnl Verify that the version of the pkg-config macros are at least
+dnl MIN-VERSION. Unlike PKG_PROG_PKG_CONFIG, which checks the user's
+dnl installed version of pkg-config, this checks the developer's version
+dnl of pkg.m4 when generating configure.
+dnl
+dnl To ensure that this macro is defined, also add:
+dnl m4_ifndef([PKG_PREREQ],
+dnl     [m4_fatal([must install pkg-config 0.29 or later before running 
autoconf/autogen])])
+dnl
+dnl See the "Since" comment for each macro you use to see what version
+dnl of the macros you require.
+m4_defun([PKG_PREREQ],
+[m4_define([PKG_MACROS_VERSION], [0.29.1])
+m4_if(m4_version_compare(PKG_MACROS_VERSION, [$1]), -1,
+    [m4_fatal([pkg.m4 version $1 or higher is required but 
]PKG_MACROS_VERSION[ found])])
+])dnl PKG_PREREQ
+
+dnl PKG_PROG_PKG_CONFIG([MIN-VERSION])
+dnl ----------------------------------
+dnl Since: 0.16
+dnl
+dnl Search for the pkg-config tool and set the PKG_CONFIG variable to
+dnl first found in the path. Checks that the version of pkg-config found
+dnl is at least MIN-VERSION. If MIN-VERSION is not specified, 0.9.0 is
+dnl used since that's the first version where most current features of
+dnl pkg-config existed.
 AC_DEFUN([PKG_PROG_PKG_CONFIG],
 [m4_pattern_forbid([^_?PKG_[A-Z_]+$])
 
m4_pattern_allow([^PKG_CONFIG(_(PATH|LIBDIR|SYSROOT_DIR|ALLOW_SYSTEM_(CFLAGS|LIBS)))?$])
@@ -66,18 +97,19 @@ if test -n "$PKG_CONFIG"; then
                PKG_CONFIG=""
        fi
 fi[]dnl
-])# PKG_PROG_PKG_CONFIG
+])dnl PKG_PROG_PKG_CONFIG
 
-# PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
-#
-# Check to see whether a particular set of modules exists.  Similar
-# to PKG_CHECK_MODULES(), but does not set variables or print errors.
-#
-# Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG])
-# only at the first occurence in configure.ac, so if the first place
-# it's called might be skipped (such as if it is within an "if", you
-# have to call PKG_CHECK_EXISTS manually
-# --------------------------------------------------------------
+dnl PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
+dnl -------------------------------------------------------------------
+dnl Since: 0.18
+dnl
+dnl Check to see whether a particular set of modules exists. Similar to
+dnl PKG_CHECK_MODULES(), but does not set variables or print errors.
+dnl
+dnl Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG])
+dnl only at the first occurence in configure.ac, so if the first place
+dnl it's called might be skipped (such as if it is within an "if", you
+dnl have to call PKG_CHECK_EXISTS manually
 AC_DEFUN([PKG_CHECK_EXISTS],
 [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
 if test -n "$PKG_CONFIG" && \
@@ -87,8 +119,10 @@ m4_ifvaln([$3], [else
   $3])dnl
 fi])
 
-# _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES])
-# ---------------------------------------------
+dnl _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES])
+dnl ---------------------------------------------
+dnl Internal wrapper calling pkg-config via PKG_CONFIG and setting
+dnl pkg_failed based on the result.
 m4_define([_PKG_CONFIG],
 [if test -n "$$1"; then
     pkg_cv_[]$1="$$1"
@@ -100,10 +134,11 @@ m4_define([_PKG_CONFIG],
  else
     pkg_failed=untried
 fi[]dnl
-])# _PKG_CONFIG
+])dnl _PKG_CONFIG
 
-# _PKG_SHORT_ERRORS_SUPPORTED
-# -----------------------------
+dnl _PKG_SHORT_ERRORS_SUPPORTED
+dnl ---------------------------
+dnl Internal check to see if pkg-config supports short errors.
 AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED],
 [AC_REQUIRE([PKG_PROG_PKG_CONFIG])
 if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
@@ -111,19 +146,17 @@ if $PKG_CONFIG --atleast-pkgconfig-versi
 else
         _pkg_short_errors_supported=no
 fi[]dnl
-])# _PKG_SHORT_ERRORS_SUPPORTED
+])dnl _PKG_SHORT_ERRORS_SUPPORTED
 
 
-# PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND],
-# [ACTION-IF-NOT-FOUND])
-#
-#
-# Note that if there is a possibility the first call to
-# PKG_CHECK_MODULES might not happen, you should be sure to include an
-# explicit call to PKG_PROG_PKG_CONFIG in your configure.ac
-#
-#
-# --------------------------------------------------------------
+dnl PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND],
+dnl   [ACTION-IF-NOT-FOUND])
+dnl --------------------------------------------------------------
+dnl Since: 0.4.0
+dnl
+dnl Note that if there is a possibility the first call to
+dnl PKG_CHECK_MODULES might not happen, you should be sure to include an
+dnl explicit call to PKG_PROG_PKG_CONFIG in your configure.ac
 AC_DEFUN([PKG_CHECK_MODULES],
 [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
 AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl
@@ -177,16 +210,40 @@ else
         AC_MSG_RESULT([yes])
        $3
 fi[]dnl
-])# PKG_CHECK_MODULES
+])dnl PKG_CHECK_MODULES
 
 
-# PKG_INSTALLDIR(DIRECTORY)
-# -------------------------
-# Substitutes the variable pkgconfigdir as the location where a module
-# should install pkg-config .pc files. By default the directory is
-# $libdir/pkgconfig, but the default can be changed by passing
-# DIRECTORY. The user can override through the --with-pkgconfigdir
-# parameter.
+dnl PKG_CHECK_MODULES_STATIC(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND],
+dnl   [ACTION-IF-NOT-FOUND])
+dnl ---------------------------------------------------------------------
+dnl Since: 0.29
+dnl
+dnl Checks for existence of MODULES and gathers its build flags with
+dnl static libraries enabled. Sets VARIABLE-PREFIX_CFLAGS from --cflags
+dnl and VARIABLE-PREFIX_LIBS from --libs.
+dnl
+dnl Note that if there is a possibility the first call to
+dnl PKG_CHECK_MODULES_STATIC might not happen, you should be sure to
+dnl include an explicit call to PKG_PROG_PKG_CONFIG in your
+dnl configure.ac.
+AC_DEFUN([PKG_CHECK_MODULES_STATIC],
+[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
+_save_PKG_CONFIG=$PKG_CONFIG
+PKG_CONFIG="$PKG_CONFIG --static"
+PKG_CHECK_MODULES($@)
+PKG_CONFIG=$_save_PKG_CONFIG[]dnl
+])dnl PKG_CHECK_MODULES_STATIC
+
+
+dnl PKG_INSTALLDIR([DIRECTORY])
+dnl -------------------------
+dnl Since: 0.27
+dnl
+dnl Substitutes the variable pkgconfigdir as the location where a module
+dnl should install pkg-config .pc files. By default the directory is
+dnl $libdir/pkgconfig, but the default can be changed by passing
+dnl DIRECTORY. The user can override through the --with-pkgconfigdir
+dnl parameter.
 AC_DEFUN([PKG_INSTALLDIR],
 [m4_pushdef([pkg_default], [m4_default([$1], ['${libdir}/pkgconfig'])])
 m4_pushdef([pkg_description],
@@ -197,16 +254,18 @@ AC_ARG_WITH([pkgconfigdir],
 AC_SUBST([pkgconfigdir], [$with_pkgconfigdir])
 m4_popdef([pkg_default])
 m4_popdef([pkg_description])
-]) dnl PKG_INSTALLDIR
+])dnl PKG_INSTALLDIR
 
 
-# PKG_NOARCH_INSTALLDIR(DIRECTORY)
-# -------------------------
-# Substitutes the variable noarch_pkgconfigdir as the location where a
-# module should install arch-independent pkg-config .pc files. By
-# default the directory is $datadir/pkgconfig, but the default can be
-# changed by passing DIRECTORY. The user can override through the
-# --with-noarch-pkgconfigdir parameter.
+dnl PKG_NOARCH_INSTALLDIR([DIRECTORY])
+dnl --------------------------------
+dnl Since: 0.27
+dnl
+dnl Substitutes the variable noarch_pkgconfigdir as the location where a
+dnl module should install arch-independent pkg-config .pc files. By
+dnl default the directory is $datadir/pkgconfig, but the default can be
+dnl changed by passing DIRECTORY. The user can override through the
+dnl --with-noarch-pkgconfigdir parameter.
 AC_DEFUN([PKG_NOARCH_INSTALLDIR],
 [m4_pushdef([pkg_default], [m4_default([$1], ['${datadir}/pkgconfig'])])
 m4_pushdef([pkg_description],
@@ -217,7 +276,24 @@ AC_ARG_WITH([noarch-pkgconfigdir],
 AC_SUBST([noarch_pkgconfigdir], [$with_noarch_pkgconfigdir])
 m4_popdef([pkg_default])
 m4_popdef([pkg_description])
-]) dnl PKG_NOARCH_INSTALLDIR
+])dnl PKG_NOARCH_INSTALLDIR
+
+
+dnl PKG_CHECK_VAR(VARIABLE, MODULE, CONFIG-VARIABLE,
+dnl [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
+dnl -------------------------------------------
+dnl Since: 0.28
+dnl
+dnl Retrieves the value of the pkg-config variable for the given module.
+AC_DEFUN([PKG_CHECK_VAR],
+[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
+AC_ARG_VAR([$1], [value of $3 for $2, overriding pkg-config])dnl
+
+_PKG_CONFIG([$1], [variable="][$3]["], [$2])
+AS_VAR_COPY([$1], [pkg_cv_][$1])
+
+AS_VAR_IF([$1], [""], [$5], [$4])dnl
+])dnl PKG_CHECK_VAR
 
 # Copyright (C) 2002-2012 Free Software Foundation, Inc.
 #
@@ -1248,7 +1324,7 @@ m4_include([m4/ltversion.m4])
 m4_include([m4/lt~obsolete.m4])
 dnl xorg-macros.m4.  Generated from xorg-macros.m4.in xorgversion.m4 by 
configure.
 dnl
-dnl Copyright (c) 2005, 2006, Oracle and/or its affiliates. All rights 
reserved.
+dnl Copyright (c) 2005, 2015, Oracle and/or its affiliates. All rights 
reserved.
 dnl
 dnl Permission is hereby granted, free of charge, to any person obtaining a
 dnl copy of this software and associated documentation files (the "Software"),
@@ -1285,7 +1361,7 @@ dnl DEALINGS IN THE SOFTWARE.
 # See the "minimum version" comment for each macro you use to see what
 # version you require.
 m4_defun([XORG_MACROS_VERSION],[
-m4_define([vers_have], [1.19.0])
+m4_define([vers_have], [1.19.2])
 m4_define([maj_have], m4_substr(vers_have, 0, m4_index(vers_have, [.])))
 m4_define([maj_needed], m4_substr([$1], 0, m4_index([$1], [.])))
 m4_if(m4_cmp(maj_have, maj_needed), 0,,
@@ -1363,6 +1439,17 @@ AC_DEFUN([XORG_MANPAGE_SECTIONS],[
 AC_REQUIRE([AC_CANONICAL_HOST])
 AC_REQUIRE([AC_PROG_SED])
 
+case $host_os in
+    solaris*)
+        # Solaris 2.0 - 11.3 use SysV man page section numbers, so we
+        # check for a man page file found in later versions that use
+        # traditional section numbers instead
+        AC_CHECK_FILE([/usr/share/man/man7/attributes.7],
+                [SYSV_MAN_SECTIONS=false], [SYSV_MAN_SECTIONS=true])
+        ;;
+    *) SYSV_MAN_SECTIONS=false ;;
+esac
+
 if test x$APP_MAN_SUFFIX = x    ; then
     APP_MAN_SUFFIX=1
 fi
@@ -1378,9 +1465,9 @@ if test x$LIB_MAN_DIR = x    ; then
 fi
 
 if test x$FILE_MAN_SUFFIX = x    ; then
-    case $host_os in
-       solaris*)       FILE_MAN_SUFFIX=4  ;;
-       *)              FILE_MAN_SUFFIX=5  ;;
+    case $SYSV_MAN_SECTIONS in
+       true)                           FILE_MAN_SUFFIX=4  ;;
+       *)                              FILE_MAN_SUFFIX=5  ;;
     esac
 fi
 if test x$FILE_MAN_DIR = x    ; then
@@ -1388,9 +1475,9 @@ if test x$FILE_MAN_DIR = x    ; then
 fi
 
 if test x$MISC_MAN_SUFFIX = x    ; then
-    case $host_os in
-       solaris*)       MISC_MAN_SUFFIX=5  ;;
-       *)              MISC_MAN_SUFFIX=7  ;;
+    case $SYSV_MAN_SECTIONS in
+       true)                           MISC_MAN_SUFFIX=5  ;;
+       *)                              MISC_MAN_SUFFIX=7  ;;
     esac
 fi
 if test x$MISC_MAN_DIR = x    ; then
@@ -1398,9 +1485,9 @@ if test x$MISC_MAN_DIR = x    ; then
 fi
 
 if test x$DRIVER_MAN_SUFFIX = x    ; then
-    case $host_os in
-       solaris*)       DRIVER_MAN_SUFFIX=7  ;;
-       *)              DRIVER_MAN_SUFFIX=4  ;;
+    case $SYSV_MAN_SECTIONS in
+       true)                           DRIVER_MAN_SUFFIX=7  ;;
+       *)                              DRIVER_MAN_SUFFIX=4  ;;
     esac
 fi
 if test x$DRIVER_MAN_DIR = x    ; then
@@ -1408,9 +1495,9 @@ if test x$DRIVER_MAN_DIR = x    ; then
 fi
 
 if test x$ADMIN_MAN_SUFFIX = x    ; then
-    case $host_os in
-       solaris*)       ADMIN_MAN_SUFFIX=1m ;;
-       *)              ADMIN_MAN_SUFFIX=8  ;;
+    case $SYSV_MAN_SECTIONS in
+       true)                           ADMIN_MAN_SUFFIX=1m ;;
+       *)                              ADMIN_MAN_SUFFIX=8  ;;
     esac
 fi
 if test x$ADMIN_MAN_DIR = x    ; then
@@ -1671,13 +1758,24 @@ m4_ifval([$1],
 fi])
 
 # Test for the ability of xmlto to generate a text target
+#
+# NOTE: xmlto 0.0.27 or higher return a non-zero return code in the
+# following test for empty XML docbook files.
+# For compatibility reasons use the following empty XML docbook file and if
+# it fails try it again with a non-empty XML file.
 have_xmlto_text=no
 cat > conftest.xml << "EOF"
 EOF
 AS_IF([test "$have_xmlto" = yes],
       [AS_IF([$XMLTO --skip-validation txt conftest.xml >/dev/null 2>&1],
              [have_xmlto_text=yes],
-             [AC_MSG_WARN([xmlto cannot generate text format, this format 
skipped])])])
+             [# Try it again with a non-empty XML file.
+              cat > conftest.xml << "EOF"
+<x></x>
+EOF
+              AS_IF([$XMLTO --skip-validation txt conftest.xml >/dev/null 
2>&1],
+                    [have_xmlto_text=yes],
+                    [AC_MSG_WARN([xmlto cannot generate text format, this 
format skipped])])])])
 rm -f conftest.xml
 AM_CONDITIONAL([HAVE_XMLTO_TEXT], [test $have_xmlto_text = yes])
 AM_CONDITIONAL([HAVE_XMLTO], [test "$have_xmlto" = yes])
@@ -3073,8 +3171,9 @@ AC_REQUIRE([PKG_PROG_PKG_CONFIG])
 macros_datadir=`$PKG_CONFIG --print-errors --variable=pkgdatadir xorg-macros`
 INSTALL_CMD="(cp -f "$macros_datadir/INSTALL" \$(top_srcdir)/.INSTALL.tmp && \
 mv \$(top_srcdir)/.INSTALL.tmp \$(top_srcdir)/INSTALL) \
-|| (rm -f \$(top_srcdir)/.INSTALL.tmp; touch \$(top_srcdir)/INSTALL; \
-echo 'util-macros \"pkgdatadir\" from xorg-macros.pc not found: installing 
possibly empty INSTALL.' >&2)"
+|| (rm -f \$(top_srcdir)/.INSTALL.tmp; test -e \$(top_srcdir)/INSTALL || ( \
+touch \$(top_srcdir)/INSTALL; \
+echo 'failed to copy INSTALL from util-macros: installing empty INSTALL.' 
>&2))"
 AC_SUBST([INSTALL_CMD])
 ]) # XORG_INSTALL
 dnl Copyright 2005 Red Hat, Inc
@@ -3135,10 +3234,11 @@ AC_DEFUN([XORG_RELEASE_VERSION],[
 #
 #
 AC_DEFUN([XORG_CHANGELOG], [
-CHANGELOG_CMD="(GIT_DIR=\$(top_srcdir)/.git git log > 
\$(top_srcdir)/.changelog.tmp && \
+CHANGELOG_CMD="((GIT_DIR=\$(top_srcdir)/.git git log > 
\$(top_srcdir)/.changelog.tmp) 2>/dev/null && \
 mv \$(top_srcdir)/.changelog.tmp \$(top_srcdir)/ChangeLog) \
-|| (rm -f \$(top_srcdir)/.changelog.tmp; touch \$(top_srcdir)/ChangeLog; \
-echo 'git directory not found: installing possibly empty changelog.' >&2)"
+|| (rm -f \$(top_srcdir)/.changelog.tmp; test -e \$(top_srcdir)/ChangeLog || ( 
\
+touch \$(top_srcdir)/ChangeLog; \
+echo 'git failed to create ChangeLog: installing empty ChangeLog.' >&2))"
 AC_SUBST([CHANGELOG_CMD])
 ]) # XORG_CHANGELOG
 
Index: compile
===================================================================
RCS file: /cvs/OpenBSD/xenocara/lib/libXpm/compile,v
retrieving revision 1.3
diff -u -p -u -r1.3 compile
--- compile     28 Sep 2013 17:40:33 -0000      1.3
+++ compile     15 Dec 2019 18:27:04 -0000
@@ -1,9 +1,9 @@
 #! /bin/sh
 # Wrapper for compilers which do not understand '-c -o'.
 
-scriptversion=2012-10-14.11; # UTC
+scriptversion=2018-03-07.03; # UTC
 
-# Copyright (C) 1999-2013 Free Software Foundation, Inc.
+# Copyright (C) 1999-2018 Free Software Foundation, Inc.
 # Written by Tom Tromey <tro...@cygnus.com>.
 #
 # This program is free software; you can redistribute it and/or modify
@@ -17,7 +17,7 @@ scriptversion=2012-10-14.11; # UTC
 # GNU General Public License for more details.
 #
 # You should have received a copy of the GNU General Public License
-# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+# along with this program.  If not, see <https://www.gnu.org/licenses/>.
 
 # As a special exception to the GNU General Public License, if you
 # distribute this file as part of a program that contains a
@@ -255,7 +255,8 @@ EOF
     echo "compile $scriptversion"
     exit $?
     ;;
-  cl | *[/\\]cl | cl.exe | *[/\\]cl.exe )
+  cl | *[/\\]cl | cl.exe | *[/\\]cl.exe | \
+  icl | *[/\\]icl | icl.exe | *[/\\]icl.exe )
     func_cl_wrapper "$@"      # Doesn't return...
     ;;
 esac
@@ -339,9 +340,9 @@ exit $ret
 # Local Variables:
 # mode: shell-script
 # sh-indentation: 2
-# eval: (add-hook 'write-file-hooks 'time-stamp)
+# eval: (add-hook 'before-save-hook 'time-stamp)
 # time-stamp-start: "scriptversion="
 # time-stamp-format: "%:y-%02m-%02d.%02H"
-# time-stamp-time-zone: "UTC"
+# time-stamp-time-zone: "UTC0"
 # time-stamp-end: "; # UTC"
 # End:
Index: configure
===================================================================
RCS file: /cvs/OpenBSD/xenocara/lib/libXpm/configure,v
retrieving revision 1.15
diff -u -p -u -r1.15 configure
--- configure   16 Dec 2016 07:28:34 -0000      1.15
+++ configure   15 Dec 2019 18:28:02 -0000
@@ -1,8 +1,8 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for libXpm 3.5.12.
+# Generated by GNU Autoconf 2.69 for libXpm 3.5.13.
 #
-# Report bugs to <https://bugs.freedesktop.org/enter_bug.cgi?product=xorg>.
+# Report bugs to <https://gitlab.freedesktop.org/xorg/lib/libXpm/issues>.
 #
 #
 # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
@@ -275,7 +275,7 @@ fi
     $as_echo "$0: be upgraded to zsh 4.3.4 or later."
   else
     $as_echo "$0: Please tell bug-autoc...@gnu.org and
-$0: https://bugs.freedesktop.org/enter_bug.cgi?product=xorg
+$0: https://gitlab.freedesktop.org/xorg/lib/libXpm/issues
 $0: about your system, including any error possibly output
 $0: before this message. Then install a modern shell, or
 $0: manually run the script under such a shell if you do
@@ -591,9 +591,9 @@ MAKEFLAGS=
 # Identity of this package.
 PACKAGE_NAME='libXpm'
 PACKAGE_TARNAME='libXpm'
-PACKAGE_VERSION='3.5.12'
-PACKAGE_STRING='libXpm 3.5.12'
-PACKAGE_BUGREPORT='https://bugs.freedesktop.org/enter_bug.cgi?product=xorg'
+PACKAGE_VERSION='3.5.13'
+PACKAGE_STRING='libXpm 3.5.13'
+PACKAGE_BUGREPORT='https://gitlab.freedesktop.org/xorg/lib/libXpm/issues'
 PACKAGE_URL=''
 
 ac_unique_file="Makefile.am"
@@ -1357,7 +1357,7 @@ if test "$ac_init_help" = "long"; then
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures libXpm 3.5.12 to adapt to many kinds of systems.
+\`configure' configures libXpm 3.5.13 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1427,7 +1427,7 @@ fi
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of libXpm 3.5.12:";;
+     short | recursive ) echo "Configuration of libXpm 3.5.13:";;
    esac
   cat <<\_ACEOF
 
@@ -1491,7 +1491,7 @@ Some influential environment variables:
 Use these variables to override the choices made by `configure' or to help
 it to find libraries and programs with nonstandard names/locations.
 
-Report bugs to <https://bugs.freedesktop.org/enter_bug.cgi?product=xorg>.
+Report bugs to <https://gitlab.freedesktop.org/xorg/lib/libXpm/issues>.
 _ACEOF
 ac_status=$?
 fi
@@ -1554,7 +1554,7 @@ fi
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-libXpm configure 3.5.12
+libXpm configure 3.5.13
 generated by GNU Autoconf 2.69
 
 Copyright (C) 2012 Free Software Foundation, Inc.
@@ -1878,7 +1878,7 @@ cat >config.log <<_ACEOF
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by libXpm $as_me 3.5.12, which was
+It was created by libXpm $as_me 3.5.13, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   $ $0 $@
@@ -2708,7 +2708,7 @@ fi
 
 # Define the identity of the package.
  PACKAGE='libXpm'
- VERSION='3.5.12'
+ VERSION='3.5.13'
 
 
 cat >>confdefs.h <<_ACEOF
@@ -17398,10 +17398,11 @@ _ACEOF
 
 
 
-CHANGELOG_CMD="(GIT_DIR=\$(top_srcdir)/.git git log > 
\$(top_srcdir)/.changelog.tmp && \
+CHANGELOG_CMD="((GIT_DIR=\$(top_srcdir)/.git git log > 
\$(top_srcdir)/.changelog.tmp) 2>/dev/null && \
 mv \$(top_srcdir)/.changelog.tmp \$(top_srcdir)/ChangeLog) \
-|| (rm -f \$(top_srcdir)/.changelog.tmp; touch \$(top_srcdir)/ChangeLog; \
-echo 'git directory not found: installing possibly empty changelog.' >&2)"
+|| (rm -f \$(top_srcdir)/.changelog.tmp; test -e \$(top_srcdir)/ChangeLog || ( 
\
+touch \$(top_srcdir)/ChangeLog; \
+echo 'git failed to create ChangeLog: installing empty ChangeLog.' >&2))"
 
 
 
@@ -17409,14 +17410,45 @@ echo 'git directory not found: installin
 macros_datadir=`$PKG_CONFIG --print-errors --variable=pkgdatadir xorg-macros`
 INSTALL_CMD="(cp -f "$macros_datadir/INSTALL" \$(top_srcdir)/.INSTALL.tmp && \
 mv \$(top_srcdir)/.INSTALL.tmp \$(top_srcdir)/INSTALL) \
-|| (rm -f \$(top_srcdir)/.INSTALL.tmp; touch \$(top_srcdir)/INSTALL; \
-echo 'util-macros \"pkgdatadir\" from xorg-macros.pc not found: installing 
possibly empty INSTALL.' >&2)"
+|| (rm -f \$(top_srcdir)/.INSTALL.tmp; test -e \$(top_srcdir)/INSTALL || ( \
+touch \$(top_srcdir)/INSTALL; \
+echo 'failed to copy INSTALL from util-macros: installing empty INSTALL.' 
>&2))"
 
 
 
 
 
 
+case $host_os in
+    solaris*)
+        # Solaris 2.0 - 11.3 use SysV man page section numbers, so we
+        # check for a man page file found in later versions that use
+        # traditional section numbers instead
+        { $as_echo "$as_me:${as_lineno-$LINENO}: checking for 
/usr/share/man/man7/attributes.7" >&5
+$as_echo_n "checking for /usr/share/man/man7/attributes.7... " >&6; }
+if ${ac_cv_file__usr_share_man_man7_attributes_7+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  test "$cross_compiling" = yes &&
+  as_fn_error $? "cannot check for file existence when cross compiling" 
"$LINENO" 5
+if test -r "/usr/share/man/man7/attributes.7"; then
+  ac_cv_file__usr_share_man_man7_attributes_7=yes
+else
+  ac_cv_file__usr_share_man_man7_attributes_7=no
+fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: 
$ac_cv_file__usr_share_man_man7_attributes_7" >&5
+$as_echo "$ac_cv_file__usr_share_man_man7_attributes_7" >&6; }
+if test "x$ac_cv_file__usr_share_man_man7_attributes_7" = xyes; then :
+  SYSV_MAN_SECTIONS=false
+else
+  SYSV_MAN_SECTIONS=true
+fi
+
+        ;;
+    *) SYSV_MAN_SECTIONS=false ;;
+esac
+
 if test x$APP_MAN_SUFFIX = x    ; then
     APP_MAN_SUFFIX=1
 fi
@@ -17432,9 +17464,9 @@ if test x$LIB_MAN_DIR = x    ; then
 fi
 
 if test x$FILE_MAN_SUFFIX = x    ; then
-    case $host_os in
-       solaris*)       FILE_MAN_SUFFIX=4  ;;
-       *)              FILE_MAN_SUFFIX=5  ;;
+    case $SYSV_MAN_SECTIONS in
+       true)                           FILE_MAN_SUFFIX=4  ;;
+       *)                              FILE_MAN_SUFFIX=5  ;;
     esac
 fi
 if test x$FILE_MAN_DIR = x    ; then
@@ -17442,9 +17474,9 @@ if test x$FILE_MAN_DIR = x    ; then
 fi
 
 if test x$MISC_MAN_SUFFIX = x    ; then
-    case $host_os in
-       solaris*)       MISC_MAN_SUFFIX=5  ;;
-       *)              MISC_MAN_SUFFIX=7  ;;
+    case $SYSV_MAN_SECTIONS in
+       true)                           MISC_MAN_SUFFIX=5  ;;
+       *)                              MISC_MAN_SUFFIX=7  ;;
     esac
 fi
 if test x$MISC_MAN_DIR = x    ; then
@@ -17452,9 +17484,9 @@ if test x$MISC_MAN_DIR = x    ; then
 fi
 
 if test x$DRIVER_MAN_SUFFIX = x    ; then
-    case $host_os in
-       solaris*)       DRIVER_MAN_SUFFIX=7  ;;
-       *)              DRIVER_MAN_SUFFIX=4  ;;
+    case $SYSV_MAN_SECTIONS in
+       true)                           DRIVER_MAN_SUFFIX=7  ;;
+       *)                              DRIVER_MAN_SUFFIX=4  ;;
     esac
 fi
 if test x$DRIVER_MAN_DIR = x    ; then
@@ -17462,9 +17494,9 @@ if test x$DRIVER_MAN_DIR = x    ; then
 fi
 
 if test x$ADMIN_MAN_SUFFIX = x    ; then
-    case $host_os in
-       solaris*)       ADMIN_MAN_SUFFIX=1m ;;
-       *)              ADMIN_MAN_SUFFIX=8  ;;
+    case $SYSV_MAN_SECTIONS in
+       true)                           ADMIN_MAN_SUFFIX=1m ;;
+       *)                              ADMIN_MAN_SUFFIX=8  ;;
     esac
 fi
 if test x$ADMIN_MAN_DIR = x    ; then
@@ -17556,6 +17588,14 @@ _ACEOF
 fi
 done
 
+ac_fn_c_check_func "$LINENO" "fork" "ac_cv_func_fork"
+if test "x$ac_cv_func_fork" = xyes; then :
+
+else
+  $as_echo "#define NO_ZPIPE 1" >>confdefs.h
+
+fi
+
 
 # Obtain compiler/linker options for dependencies
 
@@ -18408,7 +18448,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_wri
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by libXpm $as_me 3.5.12, which was
+This file was extended by libXpm $as_me 3.5.13, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -18468,13 +18508,13 @@ $config_headers
 Configuration commands:
 $config_commands
 
-Report bugs to <https://bugs.freedesktop.org/enter_bug.cgi?product=xorg>."
+Report bugs to <https://gitlab.freedesktop.org/xorg/lib/libXpm/issues>."
 
 _ACEOF
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; 
s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
-libXpm config.status 3.5.12
+libXpm config.status 3.5.13
 configured by $0, generated by GNU Autoconf 2.69,
   with options \\"\$ac_cs_config\\"
 
Index: configure.ac
===================================================================
RCS file: /cvs/OpenBSD/xenocara/lib/libXpm/configure.ac,v
retrieving revision 1.6
diff -u -p -u -r1.6 configure.ac
--- configure.ac        16 Dec 2016 07:28:34 -0000      1.6
+++ configure.ac        15 Dec 2019 18:27:04 -0000
@@ -1,8 +1,8 @@
 
 # Initialize Autoconf
 AC_PREREQ([2.60])
-AC_INIT([libXpm], [3.5.12],
-        [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg], [libXpm])
+AC_INIT([libXpm], [3.5.13],
+        [https://gitlab.freedesktop.org/xorg/lib/libXpm/issues], [libXpm])
 AC_CONFIG_SRCDIR([Makefile.am])
 AC_CONFIG_HEADERS([config.h])
 AC_CONFIG_MACRO_DIR([m4])
@@ -21,6 +21,7 @@ XORG_DEFAULT_OPTIONS
 
 # Checks for library functions
 AC_CHECK_FUNCS([strlcat])
+AC_CHECK_FUNC([fork],[], AC_DEFINE(NO_ZPIPE))
 
 # Obtain compiler/linker options for dependencies
 PKG_CHECK_MODULES(XPM, xproto x11)
Index: src/CrBufFrI.c
===================================================================
RCS file: /cvs/OpenBSD/xenocara/lib/libXpm/src/CrBufFrI.c,v
retrieving revision 1.4
diff -u -p -u -r1.4 CrBufFrI.c
--- src/CrBufFrI.c      10 Mar 2012 14:30:33 -0000      1.4
+++ src/CrBufFrI.c      15 Dec 2019 18:27:04 -0000
@@ -39,6 +39,10 @@
 #endif
 #include "XpmI.h"
 
+#ifdef FOR_MSW
+#define snprintf _snprintf
+#endif
+
 LFUNC(WriteColors, int, (char **dataptr, unsigned int *data_size,
                         unsigned int *used_size, XpmColor *colors,
                         unsigned int ncolors, unsigned int cpp));
Index: src/CrDatFrI.c
===================================================================
RCS file: /cvs/OpenBSD/xenocara/lib/libXpm/src/CrDatFrI.c,v
retrieving revision 1.4
diff -u -p -u -r1.4 CrDatFrI.c
--- src/CrDatFrI.c      16 Dec 2016 07:28:34 -0000      1.4
+++ src/CrDatFrI.c      15 Dec 2019 18:27:04 -0000
@@ -39,6 +39,10 @@
 #endif
 #include "XpmI.h"
 
+#ifdef FOR_MSW
+#define snprintf _snprintf
+#endif
+
 LFUNC(CreateColors, int, (char **dataptr, unsigned int *data_size,
                          XpmColor *colors, unsigned int ncolors,
                          unsigned int cpp));
Index: src/RdFToBuf.c
===================================================================
RCS file: /cvs/OpenBSD/xenocara/lib/libXpm/src/RdFToBuf.c,v
retrieving revision 1.5
diff -u -p -u -r1.5 RdFToBuf.c
--- src/RdFToBuf.c      16 Dec 2016 07:28:34 -0000      1.5
+++ src/RdFToBuf.c      15 Dec 2019 18:27:04 -0000
@@ -90,7 +90,7 @@ XpmReadFileToBuffer(
     }
     len = stats.st_size;
     if (len < 0 || len >= SIZE_MAX) {
-       close(fd);
+       fclose(fp);
        return XpmOpenFailed;
     }
     ptr = (char *) XpmMalloc(len + 1);
Index: src/WrFFrI.c
===================================================================
RCS file: /cvs/OpenBSD/xenocara/lib/libXpm/src/WrFFrI.c,v
retrieving revision 1.5
diff -u -p -u -r1.5 WrFFrI.c
--- src/WrFFrI.c        28 Sep 2013 17:40:35 -0000      1.5
+++ src/WrFFrI.c        15 Dec 2019 18:27:05 -0000
@@ -51,6 +51,12 @@
 
 #include "fcntl.h"
 
+#ifdef FOR_MSW
+#define O_WRONLY _O_WRONLY
+#define O_CREAT  _O_CREAT
+#define O_TRUNC  _O_TRUNC
+#endif
+
 /* MS Windows define a function called WriteFile @#%#&!!! */
 LFUNC(xpmWriteFile, int, (FILE *file, XpmImage *image, const char *name,
                          XpmInfo *info));
Index: src/XpmI.h
===================================================================
RCS file: /cvs/OpenBSD/xenocara/lib/libXpm/src/XpmI.h,v
retrieving revision 1.3
diff -u -p -u -r1.3 XpmI.h
--- src/XpmI.h  10 Mar 2012 14:30:33 -0000      1.3
+++ src/XpmI.h  15 Dec 2019 18:27:05 -0000
@@ -216,8 +216,13 @@ FUNC(xpmHashTableFree, void, (xpmHashTab
 FUNC(xpmHashSlot, xpmHashAtom *, (xpmHashTable *table, char *s));
 FUNC(xpmHashIntern, int, (xpmHashTable *table, char *tag, void *data));
 
+#if defined(_MSC_VER) && defined(_M_X64)
+#define HashAtomData(i) ((void *)(long long)i)
+#define HashColorIndex(slot) ((unsigned long long)((*slot)->data))
+#else
 #define HashAtomData(i) ((void *)(long)i)
 #define HashColorIndex(slot) ((unsigned long)((*slot)->data))
+#endif
 #define USE_HASHTABLE (cpp > 2 && ncolors > 4)
 
 /* I/O utility */
Index: src/parse.c
===================================================================
RCS file: /cvs/OpenBSD/xenocara/lib/libXpm/src/parse.c,v
retrieving revision 1.5
diff -u -p -u -r1.5 parse.c
--- src/parse.c 16 Dec 2016 07:28:34 -0000      1.5
+++ src/parse.c 15 Dec 2019 18:27:05 -0000
@@ -47,23 +47,43 @@
 #include <ctype.h>
 #include <string.h>
 
+/**
+ * like strlcat() but returns true on success and false if the string got
+ * truncated.
+ */
+static inline Bool
+xstrlcat(char *dst, const char *src, size_t dstsize)
+{
 #if defined(HAS_STRLCAT) || defined(HAVE_STRLCAT)
-# define STRLCAT(dst, src, dstsize) do { \
-       if (strlcat(dst, src, dstsize) >= (dstsize)) \
-           return (XpmFileInvalid); } while(0)
-# define STRLCPY(dst, src, dstsize) do { \
-       if (strlcpy(dst, src, dstsize) >= (dstsize)) \
-           return (XpmFileInvalid); } while(0)
+    return strlcat(dst, src, dstsize) < dstsize;
 #else
-# define STRLCAT(dst, src, dstsize) do { \
-       if ((strlen(dst) + strlen(src)) < (dstsize)) \
-           strcat(dst, src); \
-       else return (XpmFileInvalid); } while(0)
-# define STRLCPY(dst, src, dstsize) do { \
-       if (strlen(src) < (dstsize)) \
-           strcpy(dst, src); \
-       else return (XpmFileInvalid); } while(0)
+    if ((strlen(dst) + strlen(src)) < dstsize) {
+        strcat(dst, src);
+        return True;
+    } else {
+        return False;
+    }
 #endif
+}
+
+/**
+ * like strlcpy() but returns true on success and false if the string got
+ * truncated.
+ */
+static inline Bool
+xstrlcpy(char *dst, const char *src, size_t dstsize)
+{
+#if defined(HAS_STRLCAT) || defined(HAVE_STRLCAT)
+    return strlcpy(dst, src, dstsize) < dstsize;
+#else
+    if (strlen(src) < dstsize) {
+        strcpy(dst, src);
+        return True;
+    } else {
+        return False;
+    }
+#endif
+}
 
 LFUNC(ParsePixels, int, (xpmData *data, unsigned int width,
                         unsigned int height, unsigned int ncolors,
@@ -226,19 +246,19 @@ xpmParseColors(
             * read pixel value
             */
            if (cpp >= UINT_MAX - 1) {
-               xpmFreeColorTable(colorTable, ncolors);
-               return (XpmNoMemory);
+               ErrorStatus = XpmNoMemory;
+               goto error;
            }
            color->string = (char *) XpmMalloc(cpp + 1);
            if (!color->string) {
-               xpmFreeColorTable(colorTable, ncolors);
-               return (XpmNoMemory);
+               ErrorStatus = XpmNoMemory;
+               goto error;
            }
            for (b = 0, s = color->string; b < cpp; b++, s++) {
                int c = xpmGetC(data);
                if (c < 0) {
-                   xpmFreeColorTable(colorTable, ncolors);
-                   return (XpmFileInvalid);
+                   ErrorStatus = XpmFileInvalid;
+                   goto error;
                }
                *s = (char) c;
            }
@@ -251,8 +271,7 @@ xpmParseColors(
                ErrorStatus =
                    xpmHashIntern(hashtable, color->string, HashAtomData(a));
                if (ErrorStatus != XpmSuccess) {
-                   xpmFreeColorTable(colorTable, ncolors);
-                   return (ErrorStatus);
+                   goto error;
                }
            }
 
@@ -275,8 +294,8 @@ xpmParseColors(
                        len = strlen(curbuf) + 1;
                        s = (char *) XpmMalloc(len);
                        if (!s) {
-                           xpmFreeColorTable(colorTable, ncolors);
-                           return (XpmNoMemory);
+                           ErrorStatus = XpmNoMemory;
+                           goto error;
                        }
                        defaults[curkey] = s;
                        memcpy(s, curbuf, len);
@@ -286,25 +305,32 @@ xpmParseColors(
                    lastwaskey = 1;
                } else {
                    if (!curkey) {      /* key without value */
-                       xpmFreeColorTable(colorTable, ncolors);
-                       return (XpmFileInvalid);
+                       ErrorStatus = XpmFileInvalid;
+                       goto error;
                    }
-                   if (!lastwaskey)
-                       STRLCAT(curbuf, " ", sizeof(curbuf));/* append space */
+                   if (!lastwaskey) {
+                        if (!xstrlcat(curbuf, " ", sizeof(curbuf))) { /* 
append space */
+                            ErrorStatus = XpmFileInvalid;
+                            goto error;
+                        }
+                    }
                    buf[l] = '\0';
-                   STRLCAT(curbuf, buf, sizeof(curbuf)); /* append buf */
+                   if (!xstrlcat(curbuf, buf, sizeof(curbuf))) { /* append buf 
*/
+                        ErrorStatus = XpmFileInvalid;
+                        goto error;
+                    }
                    lastwaskey = 0;
                }
            }
            if (!curkey) {              /* key without value */
-               xpmFreeColorTable(colorTable, ncolors);
-               return (XpmFileInvalid);
+               ErrorStatus = XpmFileInvalid;
+               goto error;
            }
            len = strlen(curbuf) + 1; /* integer overflow just theoretically 
possible */
            s = defaults[curkey] = (char *) XpmMalloc(len);
            if (!s) {
-               xpmFreeColorTable(colorTable, ncolors);
-               return (XpmNoMemory);
+               ErrorStatus = XpmNoMemory;
+               goto error;
            }
            memcpy(s, curbuf, len);
        }
@@ -320,19 +346,19 @@ xpmParseColors(
             * read pixel value
             */
            if (cpp >= UINT_MAX - 1) {
-               xpmFreeColorTable(colorTable, ncolors);
-               return (XpmNoMemory);
+               ErrorStatus = XpmNoMemory;
+               goto error;
            }
            color->string = (char *) XpmMalloc(cpp + 1);
            if (!color->string) {
-               xpmFreeColorTable(colorTable, ncolors);
-               return (XpmNoMemory);
+               ErrorStatus = XpmNoMemory;
+               goto error;
            }
            for (b = 0, s = color->string; b < cpp; b++, s++) {
                int c = xpmGetC(data);
                if (c < 0) {
-                   xpmFreeColorTable(colorTable, ncolors);
-                   return (XpmFileInvalid);
+                   ErrorStatus = XpmFileInvalid;
+                   goto error;
                }
                *s = (char) c;
            }
@@ -345,8 +371,7 @@ xpmParseColors(
                ErrorStatus =
                    xpmHashIntern(hashtable, color->string, HashAtomData(a));
                if (ErrorStatus != XpmSuccess) {
-                   xpmFreeColorTable(colorTable, ncolors);
-                   return (ErrorStatus);
+                   goto error;
                }
            }
 
@@ -356,16 +381,23 @@ xpmParseColors(
            xpmNextString(data);        /* get to the next string */
            *curbuf = '\0';             /* init curbuf */
            while ((l = xpmNextWord(data, buf, BUFSIZ))) {
-               if (*curbuf != '\0')
-                   STRLCAT(curbuf, " ", sizeof(curbuf));/* append space */
+               if (*curbuf != '\0') {
+                   if (!xstrlcat(curbuf, " ", sizeof(curbuf))) { /* append 
space */
+                        ErrorStatus = XpmFileInvalid;
+                        goto error;
+                    }
+                }
                buf[l] = '\0';
-               STRLCAT(curbuf, buf, sizeof(curbuf));   /* append buf */
+               if (!xstrlcat(curbuf, buf, sizeof(curbuf))) {   /* append buf */
+                    ErrorStatus = XpmFileInvalid;
+                    goto error;
+                }
            }
            len = strlen(curbuf) + 1;
            s = (char *) XpmMalloc(len);
            if (!s) {
-               xpmFreeColorTable(colorTable, ncolors);
-               return (XpmNoMemory);
+               ErrorStatus = XpmNoMemory;
+               goto error;
            }
            memcpy(s, curbuf, len);
            color->c_color = s;
@@ -376,6 +408,10 @@ xpmParseColors(
     }
     *colorTablePtr = colorTable;
     return (XpmSuccess);
+
+error:
+    xpmFreeColorTable(colorTable, ncolors);
+    return ErrorStatus;
 }
 
 static int

-- 
Matthieu Herrb

Reply via email to