summaryrefslogtreecommitdiff
path: root/gnu/packages/patches
diff options
context:
space:
mode:
Diffstat (limited to 'gnu/packages/patches')
-rw-r--r--gnu/packages/patches/dblatex-remove-multirow.patch30
-rw-r--r--gnu/packages/patches/dovecot-CVE-2017-15132.patch36
-rw-r--r--gnu/packages/patches/guile-linux-syscalls.patch50
-rw-r--r--gnu/packages/patches/perl-gd-options-passthrough-and-fontconfig.patch53
-rw-r--r--gnu/packages/patches/python-mox3-python3.6-compat.patch43
-rw-r--r--gnu/packages/patches/python-parse-too-many-fields.patch52
-rw-r--r--gnu/packages/patches/wavpack-CVE-2018-6767.patch119
-rw-r--r--gnu/packages/patches/wxmaxima-do-not-use-old-gnuplot-parameters.patch26
8 files changed, 234 insertions, 175 deletions
diff --git a/gnu/packages/patches/dblatex-remove-multirow.patch b/gnu/packages/patches/dblatex-remove-multirow.patch
deleted file mode 100644
index 62d1c64e08..0000000000
--- a/gnu/packages/patches/dblatex-remove-multirow.patch
+++ /dev/null
@@ -1,30 +0,0 @@
-This patch is needed to fix dblatex with newer versions of TeX Live.
-It was taken from https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=840189
-
---- a/latex/style/dbk_table.sty Sun Oct 02 23:21:03 2016 +0200
-+++ b/latex/style/dbk_table.sty Mon Oct 10 21:31:00 2016 +0200
-@@ -9,7 +9,6 @@
- \usepackage{longtable}
- \usepackage{lscape}
- \usepackage{colortbl}
--\usepackage{multirow}
- \usepackage{calc}
- \usepackage{hhline}
-
-@@ -21,16 +20,6 @@
- \expandafter[\expandafter3\expandafter]\expandafter{%
- \multicolumn{#1}{#2}{#3}}
-
--% Make \@xmultirow long
--\expandafter\long\expandafter\def%
--\expandafter\@xmultirow%
--\expandafter#\expandafter1%
--\expandafter[\expandafter#\expandafter2\expandafter]%
--\expandafter#\expandafter3%
--\expandafter[\expandafter#\expandafter4\expandafter]%
--\expandafter#\expandafter5%
--\expandafter{\@xmultirow{#1}[#2]{#3}[#4]{#5}}
--
- % For the newtbl code
- \newdimen\newtblstarfactor%
- \newdimen\newtblsparewidth%
diff --git a/gnu/packages/patches/dovecot-CVE-2017-15132.patch b/gnu/packages/patches/dovecot-CVE-2017-15132.patch
deleted file mode 100644
index 32666b8557..0000000000
--- a/gnu/packages/patches/dovecot-CVE-2017-15132.patch
+++ /dev/null
@@ -1,36 +0,0 @@
-Fix CVE-2017-15132:
-
-https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-15132
-
-Patch copied from upstream source repository:
-
-https://github.com/dovecot/core/commit/1a29ed2f96da1be22fa5a4d96c7583aa81b8b060
-
-From 1a29ed2f96da1be22fa5a4d96c7583aa81b8b060 Mon Sep 17 00:00:00 2001
-From: Timo Sirainen <timo.sirainen@dovecot.fi>
-Date: Mon, 18 Dec 2017 16:50:51 +0200
-Subject: [PATCH] lib-auth: Fix memory leak in auth_client_request_abort()
-
-This caused memory leaks when authentication was aborted. For example
-with IMAP:
-
-a AUTHENTICATE PLAIN
-*
-
-Broken by 9137c55411aa39d41c1e705ddc34d5bd26c65021
----
- src/lib-auth/auth-client-request.c | 1 +
- 1 file changed, 1 insertion(+)
-
-diff --git a/src/lib-auth/auth-client-request.c b/src/lib-auth/auth-client-request.c
-index 480fb42b30..046f7c307d 100644
---- a/src/lib-auth/auth-client-request.c
-+++ b/src/lib-auth/auth-client-request.c
-@@ -186,6 +186,7 @@ void auth_client_request_abort(struct auth_client_request **_request)
-
- auth_client_send_cancel(request->conn->client, request->id);
- call_callback(request, AUTH_REQUEST_STATUS_ABORT, NULL, NULL);
-+ pool_unref(&request->pool);
- }
-
- unsigned int auth_client_request_get_id(struct auth_client_request *request)
diff --git a/gnu/packages/patches/guile-linux-syscalls.patch b/gnu/packages/patches/guile-linux-syscalls.patch
index 69970a3e60..12cddff47b 100644
--- a/gnu/packages/patches/guile-linux-syscalls.patch
+++ b/gnu/packages/patches/guile-linux-syscalls.patch
@@ -3,17 +3,21 @@ This patch adds bindings to Linux syscalls for which glibc has symbols.
Using the FFI would have been nice, but that's not an option when using
a statically-linked Guile in an initrd that doesn't have libc.so around.
---- guile-2.0.11/libguile/posix.c.orig 2014-02-28 15:01:27.000000000 -0500
-+++ guile-2.0.11/libguile/posix.c 2015-06-21 14:28:23.624251038 -0400
-@@ -2245,6 +2245,295 @@
+diff --git a/libguile/posix.c b/libguile/posix.c
+index b0fcad5fd..1343186e3 100644
+--- a/libguile/posix.c
++++ b/libguile/posix.c
+@@ -2341,6 +2341,335 @@ scm_init_popen (void)
}
- #endif
+ #endif /* HAVE_START_CHILD */
+
+/* Linux! */
+#ifdef __linux__
+
+#include <sys/mount.h>
++#include <sys/syscall.h>
++
+#include "libguile/foreign.h"
+#include "libguile/bytevectors.h"
+
@@ -91,6 +95,16 @@ a statically-linked Guile in an initrd that doesn't have libc.so around.
+ ARGS, a space-separated list of options. */
+extern long init_module (void *module, unsigned long len, const char *args);
+
++/* Load a kernel module from FD. FLAGS must be a bitwise or of
++ MODULE_INIT_* constants. The GNU libc doesn't provide a wrapper for
++ this one so we use 'syscall'. */
++static int
++finit_module (int fd, const char *args, int flags)
++{
++ return syscall (SYS_finit_module, fd, args, flags);
++}
++
++
+SCM_DEFINE (scm_load_linux_module, "load-linux-module", 1, 1, 0,
+ (SCM data, SCM options),
+ "Load the Linux kernel module whose contents are in bytevector "
@@ -121,6 +135,34 @@ a statically-linked Guile in an initrd that doesn't have libc.so around.
+}
+#undef FUNC_NAME
+
++SCM_DEFINE (scm_load_linux_module_fd, "load-linux-module/fd", 1, 2, 0,
++ (SCM fd, SCM options, SCM flags),
++ "Load the Linux kernel module from the file at FD, "
++ "with the arguments from the OPTIONS string, and "
++ "optionally the given FLAGS.")
++#define FUNC_NAME s_scm_load_linux_module_fd
++{
++ long err;
++ int c_fd, c_flags;
++ char *c_options;
++
++ c_fd = scm_to_int (fd);
++ c_options =
++ scm_to_locale_string (SCM_UNBNDP (options) ? scm_nullstr : options);
++ c_flags = SCM_UNBNDP (flags) ? 0 : scm_to_int (flags);
++
++ err = finit_module (c_fd, c_options, c_flags);
++
++ free (c_options);
++
++ if (err != 0)
++ SCM_SYSERROR;
++
++ return SCM_UNSPECIFIED;
++}
++#undef FUNC_NAME
++
++
+/* Rebooting, halting, and all that. */
+
+#include <sys/reboot.h>
diff --git a/gnu/packages/patches/perl-gd-options-passthrough-and-fontconfig.patch b/gnu/packages/patches/perl-gd-options-passthrough-and-fontconfig.patch
deleted file mode 100644
index b2ff43c0d3..0000000000
--- a/gnu/packages/patches/perl-gd-options-passthrough-and-fontconfig.patch
+++ /dev/null
@@ -1,53 +0,0 @@
-This patch (adapted from nixpkgs for Build.PL) configures Getopt::Long to pass
-options so they will be available at the second GetOptions call.
-
-Also an option to specify the search path for libfontconfig is added.
-
---- GD-2.56/Build.PL 2014-10-27 20:34:54.000000000 -0500
-+++ GD-2.56/Build.PL 2015-02-22 10:08:12.569973657 -0600
-@@ -2,14 +2,14 @@
-
- use strict;
- use Module::Build;
--use Getopt::Long;
-+use Getopt::Long qw(:config pass_through);
- use Config;
-
- # =====> PATHS: CHECK AND ADJUST <=====
- my (@INC,@LIBPATH,@LIBS);
- my $AUTOCONFIG = 0; # global set by try_to_autoconfigure() below
-
--my ($options,$lib_gd_path,$lib_ft_path,$lib_png_path,$lib_jpeg_path,$lib_xpm_path,$lib_zlib_path);
-+my ($options,$lib_gd_path,$lib_ft_path,$lib_png_path,$lib_jpeg_path,$lib_xpm_path,$lib_zlib_path,$lib_fontconfig_path);
-
- unless (try_to_autoconfigure(\$options,\$lib_gd_path,\@INC,\@LIBPATH,\@LIBS)) {
- die <<END;
-@@ -38,6 +38,7 @@
- "lib_jpeg_path=s" => \$lib_jpeg_path,
- "lib_xpm_path=s" => \$lib_xpm_path,
- "lib_zlib_path=s" => \$lib_zlib_path,
-+ "lib_fontconfig_path=s" => \$lib_fontconfig_path,
- );
- unless ($result) {
- die <<END;
-@@ -53,6 +54,7 @@
- -lib_jpeg_path path path to libjpeg
- -lib_xpm_path path path to libxpm
- -lib_zlib_path path path to libpng
-+ -lib_fontconfig_path path path to fontconfig
- -ignore_missing_gd Ignore missing or old libgd installations and try to compile anyway
-
- If no options are passed on the command line. The program will
-@@ -100,6 +102,12 @@
- @INC = ("-I$lib_zlib_path/include", @INC);
- @LIBPATH = ("-L$lib_zlib_path/lib", @LIBPATH);
- }
-+if( defined($lib_fontconfig_path) )
-+{
-+ print "Fontconfig library used from: $lib_fontconfig_path\n";
-+ @INC = ("-I$lib_fontconfig_path/include", @INC);
-+ @LIBPATH = ("-L$lib_fontconfig_path/lib", @LIBPATH);
-+}
- #############################################################################################
-
- if ($^O eq 'VMS'){
diff --git a/gnu/packages/patches/python-mox3-python3.6-compat.patch b/gnu/packages/patches/python-mox3-python3.6-compat.patch
new file mode 100644
index 0000000000..0426d07cf9
--- /dev/null
+++ b/gnu/packages/patches/python-mox3-python3.6-compat.patch
@@ -0,0 +1,43 @@
+Fix regex so that it works with Python 3.6.
+
+See <https://docs.python.org/3/library/re.html#re.LOCALE>.
+
+Copied from upstream bug report:
+https://bugs.launchpad.net/python-mox3/+bug/1665266
+
+From 05064cdb6ea7a16450c6beae2b6f7c6074212a69 Mon Sep 17 00:00:00 2001
+From: Zac Medico <zmedico@gentoo.org>
+Date: Thu, 16 Feb 2017 00:24:10 -0800
+Subject: [PATCH] RegexTest: python3.6 compatibility
+
+These fixes are backward-compatible with older python versions:
+
+* raw strings fix invalid escape sequences
+* flags=8 fixes ValueError: cannot use LOCALE flag with a str pattern
+---
+ mox3/tests/test_mox.py | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/mox3/tests/test_mox.py b/mox3/tests/test_mox.py
+index 15ac565..3a1af17 100644
+--- a/mox3/tests/test_mox.py
++++ b/mox3/tests/test_mox.py
+@@ -312,12 +312,12 @@ class RegexTest(testtools.TestCase):
+ def testReprWithoutFlags(self):
+ """repr should return the regular expression pattern."""
+ self.assertTrue(
+- repr(mox.Regex(r"a\s+b")) == "<regular expression 'a\s+b'>")
++ repr(mox.Regex(r"a\s+b")) == r"<regular expression 'a\s+b'>")
+
+ def testReprWithFlags(self):
+ """repr should return the regular expression pattern and flags."""
+- self.assertTrue(repr(mox.Regex(r"a\s+b", flags=4)) ==
+- "<regular expression 'a\s+b', flags=4>")
++ self.assertTrue(repr(mox.Regex(r"a\s+b", flags=8)) ==
++ r"<regular expression 'a\s+b', flags=8>")
+
+
+ class IsTest(testtools.TestCase):
+--
+2.10.2
+
diff --git a/gnu/packages/patches/python-parse-too-many-fields.patch b/gnu/packages/patches/python-parse-too-many-fields.patch
deleted file mode 100644
index 9db6b91a7f..0000000000
--- a/gnu/packages/patches/python-parse-too-many-fields.patch
+++ /dev/null
@@ -1,52 +0,0 @@
-From 32f15cfefb7c7b6476360ac65cba807aa3dfccfa Mon Sep 17 00:00:00 2001
-From: David King <dking@redhat.com>
-Date: Mon, 14 Dec 2015 09:58:19 +0000
-Subject: [PATCH] Fix test_too_many_fields with Python 3.5
-
-taken from https://github.com/r1chardj0n3s/parse/pull/34
-
-Python versions before 3.5 had a limit of 100 groups in regular
-expressions. This limit was removed during 3.5 development:
-
-http://bugs.python.org/issue22437
-https://hg.python.org/cpython/rev/0b85ea4bd1af
-
-The test_too_many_fields test asserts that the limit exists by
-attempting to parse a string with 15 fields, which triggers the 100
-named groups limit.
-
-Adjust the test so that if first checks to see whether the limit of 100
-named groups exists, and only assert that parsing 15 fields fails if
-that is the case.
----
- test_parse.py | 10 ++++++++--
- 1 file changed, 8 insertions(+), 2 deletions(-)
-
-diff --git a/test_parse.py b/test_parse.py
-index c524349..1d50568 100755
---- a/test_parse.py
-+++ b/test_parse.py
-@@ -6,6 +6,7 @@
-
- import unittest
- from datetime import datetime, time
-+import re
-
- import parse
-
-@@ -624,8 +625,13 @@ def test_mixed_type_variant(self):
- self.assertEqual(r.fixed[21], 'spam')
-
- def test_too_many_fields(self):
-- p = parse.compile('{:ti}' * 15)
-- self.assertRaises(parse.TooManyFields, p.parse, '')
-+ # Python 3.5 removed the limit of 100 named groups in a regular expression,
-+ # so only test for the exception if the limit exists.
-+ try:
-+ re.compile("".join("(?P<n{n}>{n}-)".format(n=i) for i in range(101)))
-+ except AssertionError:
-+ p = parse.compile('{:ti}' * 15)
-+ self.assertRaises(parse.TooManyFields, p.parse, '')
-
-
- class TestSearch(unittest.TestCase):
diff --git a/gnu/packages/patches/wavpack-CVE-2018-6767.patch b/gnu/packages/patches/wavpack-CVE-2018-6767.patch
new file mode 100644
index 0000000000..f49a8f0fd6
--- /dev/null
+++ b/gnu/packages/patches/wavpack-CVE-2018-6767.patch
@@ -0,0 +1,119 @@
+Fix CVE-2018-6767:
+https://nvd.nist.gov/vuln/detail/CVE-2018-6767
+https://security-tracker.debian.org/tracker/CVE-2018-6767
+
+Patch copied from upstream source repository:
+https://github.com/dbry/WavPack/commit/d5bf76b5a88d044a1be1d5656698e3ba737167e5
+
+From d5bf76b5a88d044a1be1d5656698e3ba737167e5 Mon Sep 17 00:00:00 2001
+From: David Bryant <david@wavpack.com>
+Date: Sun, 4 Feb 2018 11:28:15 -0800
+Subject: [PATCH] issue #27, do not overwrite stack on corrupt RF64 file
+
+---
+ cli/riff.c | 39 ++++++++++++++++++++++++++++++++-------
+ 1 file changed, 32 insertions(+), 7 deletions(-)
+
+diff --git a/cli/riff.c b/cli/riff.c
+index 8b1af45..de98c1e 100644
+--- a/cli/riff.c
++++ b/cli/riff.c
+@@ -42,6 +42,7 @@ typedef struct {
+
+ #pragma pack(pop)
+
++#define CS64ChunkFormat "4D"
+ #define DS64ChunkFormat "DDDL"
+
+ #define WAVPACK_NO_ERROR 0
+@@ -101,13 +102,13 @@ int ParseRiffHeaderConfig (FILE *infile, char *infilename, char *fourcc, Wavpack
+
+ if (!strncmp (chunk_header.ckID, "ds64", 4)) {
+ if (chunk_header.ckSize < sizeof (DS64Chunk) ||
+- !DoReadFile (infile, &ds64_chunk, chunk_header.ckSize, &bcount) ||
+- bcount != chunk_header.ckSize) {
++ !DoReadFile (infile, &ds64_chunk, sizeof (DS64Chunk), &bcount) ||
++ bcount != sizeof (DS64Chunk)) {
+ error_line ("%s is not a valid .WAV file!", infilename);
+ return WAVPACK_SOFT_ERROR;
+ }
+ else if (!(config->qmode & QMODE_NO_STORE_WRAPPER) &&
+- !WavpackAddWrapper (wpc, &ds64_chunk, chunk_header.ckSize)) {
++ !WavpackAddWrapper (wpc, &ds64_chunk, sizeof (DS64Chunk))) {
+ error_line ("%s", WavpackGetErrorMessage (wpc));
+ return WAVPACK_SOFT_ERROR;
+ }
+@@ -315,10 +316,11 @@ int ParseRiffHeaderConfig (FILE *infile, char *infilename, char *fourcc, Wavpack
+
+ int WriteRiffHeader (FILE *outfile, WavpackContext *wpc, int64_t total_samples, int qmode)
+ {
+- int do_rf64 = 0, write_junk = 1;
++ int do_rf64 = 0, write_junk = 1, table_length = 0;
+ ChunkHeader ds64hdr, datahdr, fmthdr;
+ RiffChunkHeader riffhdr;
+ DS64Chunk ds64_chunk;
++ CS64Chunk cs64_chunk;
+ JunkChunk junkchunk;
+ WaveHeader wavhdr;
+ uint32_t bcount;
+@@ -380,6 +382,7 @@ int WriteRiffHeader (FILE *outfile, WavpackContext *wpc, int64_t total_samples,
+ strncpy (riffhdr.formType, "WAVE", sizeof (riffhdr.formType));
+ total_riff_bytes = sizeof (riffhdr) + wavhdrsize + sizeof (datahdr) + ((total_data_bytes + 1) & ~(int64_t)1);
+ if (do_rf64) total_riff_bytes += sizeof (ds64hdr) + sizeof (ds64_chunk);
++ total_riff_bytes += table_length * sizeof (CS64Chunk);
+ if (write_junk) total_riff_bytes += sizeof (junkchunk);
+ strncpy (fmthdr.ckID, "fmt ", sizeof (fmthdr.ckID));
+ strncpy (datahdr.ckID, "data", sizeof (datahdr.ckID));
+@@ -394,11 +397,12 @@ int WriteRiffHeader (FILE *outfile, WavpackContext *wpc, int64_t total_samples,
+
+ if (do_rf64) {
+ strncpy (ds64hdr.ckID, "ds64", sizeof (ds64hdr.ckID));
+- ds64hdr.ckSize = sizeof (ds64_chunk);
++ ds64hdr.ckSize = sizeof (ds64_chunk) + (table_length * sizeof (CS64Chunk));
+ CLEAR (ds64_chunk);
+ ds64_chunk.riffSize64 = total_riff_bytes;
+ ds64_chunk.dataSize64 = total_data_bytes;
+ ds64_chunk.sampleCount64 = total_samples;
++ ds64_chunk.tableLength = table_length;
+ riffhdr.ckSize = (uint32_t) -1;
+ datahdr.ckSize = (uint32_t) -1;
+ WavpackNativeToLittleEndian (&ds64hdr, ChunkHeaderFormat);
+@@ -409,6 +413,14 @@ int WriteRiffHeader (FILE *outfile, WavpackContext *wpc, int64_t total_samples,
+ datahdr.ckSize = (uint32_t) total_data_bytes;
+ }
+
++ // this "table" is just a dummy placeholder for testing (normally not written)
++
++ if (table_length) {
++ strncpy (cs64_chunk.ckID, "dmmy", sizeof (cs64_chunk.ckID));
++ cs64_chunk.chunkSize64 = 12345678;
++ WavpackNativeToLittleEndian (&cs64_chunk, CS64ChunkFormat);
++ }
++
+ // write the RIFF chunks up to just before the data starts
+
+ WavpackNativeToLittleEndian (&riffhdr, ChunkHeaderFormat);
+@@ -418,8 +430,21 @@ int WriteRiffHeader (FILE *outfile, WavpackContext *wpc, int64_t total_samples,
+
+ if (!DoWriteFile (outfile, &riffhdr, sizeof (riffhdr), &bcount) || bcount != sizeof (riffhdr) ||
+ (do_rf64 && (!DoWriteFile (outfile, &ds64hdr, sizeof (ds64hdr), &bcount) || bcount != sizeof (ds64hdr))) ||
+- (do_rf64 && (!DoWriteFile (outfile, &ds64_chunk, sizeof (ds64_chunk), &bcount) || bcount != sizeof (ds64_chunk))) ||
+- (write_junk && (!DoWriteFile (outfile, &junkchunk, sizeof (junkchunk), &bcount) || bcount != sizeof (junkchunk))) ||
++ (do_rf64 && (!DoWriteFile (outfile, &ds64_chunk, sizeof (ds64_chunk), &bcount) || bcount != sizeof (ds64_chunk)))) {
++ error_line ("can't write .WAV data, disk probably full!");
++ return FALSE;
++ }
++
++ // again, this is normally not written except for testing
++
++ while (table_length--)
++ if (!DoWriteFile (outfile, &cs64_chunk, sizeof (cs64_chunk), &bcount) || bcount != sizeof (cs64_chunk)) {
++ error_line ("can't write .WAV data, disk probably full!");
++ return FALSE;
++ }
++
++
++ if ((write_junk && (!DoWriteFile (outfile, &junkchunk, sizeof (junkchunk), &bcount) || bcount != sizeof (junkchunk))) ||
+ !DoWriteFile (outfile, &fmthdr, sizeof (fmthdr), &bcount) || bcount != sizeof (fmthdr) ||
+ !DoWriteFile (outfile, &wavhdr, wavhdrsize, &bcount) || bcount != wavhdrsize ||
+ !DoWriteFile (outfile, &datahdr, sizeof (datahdr), &bcount) || bcount != sizeof (datahdr)) {
diff --git a/gnu/packages/patches/wxmaxima-do-not-use-old-gnuplot-parameters.patch b/gnu/packages/patches/wxmaxima-do-not-use-old-gnuplot-parameters.patch
new file mode 100644
index 0000000000..345101bd3a
--- /dev/null
+++ b/gnu/packages/patches/wxmaxima-do-not-use-old-gnuplot-parameters.patch
@@ -0,0 +1,26 @@
+This fixes the wxplot2d plotting issue found at
+https://github.com/andrejv/wxmaxima/issues/973.
+
+From 5a0693c97ceaa4935b908f1e478126896952f399 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Gunter=20K=C3=B6nigsmann?= <gunter@peterpall.de>
+Date: Mon, 19 Feb 2018 05:37:35 +0100
+Subject: [PATCH] Seems I accidentally made wxMaxima to default to parameters
+ for old gnuplots. Resolves #973
+
+---
+ data/wxmathml.lisp.in | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/data/wxmathml.lisp.in b/data/wxmathml.lisp.in
+index a32e3fc3..4e19acaf 100644
+--- a/data/wxmathml.lisp.in
++++ b/data/wxmathml.lisp.in
+@@ -43,7 +43,7 @@
+ (defvar $wxsubscripts t
+ "Recognize TeX-style subscripts")
+ (defvar $wxplot_pngcairo nil "Use gnuplot's pngcairo terminal for new plots?")
+-(defmvar $wxplot_old_gnuplot t)
++(defmvar $wxplot_old_gnuplot nil)
+
+ (defun $wxstatusbar (status)
+ (format t "<statusbar>~a</statusbar>~%" status))