git: f91626be616b - stable/14 - contrib/bc: upgrade to version 6.7.6

From: Stefan Eßer <se_at_FreeBSD.org>
Date: Tue, 16 Jul 2024 18:06:21 UTC
The branch stable/14 has been updated by se:

URL: https://cgit.FreeBSD.org/src/commit/?id=f91626be616bf35f7437913d3e11b488d6607d1e

commit f91626be616bf35f7437913d3e11b488d6607d1e
Author:     Stefan Eßer <se@FreeBSD.org>
AuthorDate: 2024-07-09 05:49:27 +0000
Commit:     Stefan Eßer <se@FreeBSD.org>
CommitDate: 2024-07-16 18:05:14 +0000

    contrib/bc: upgrade to version 6.7.6
    
    This update fixes a potential issue when flushing stdout on exit
    fails: longjmp could use an uninitialized target address variable.
    
    Most files are included in this commit due to a changed date in
    the copyright note.
    
    (cherry picked from commit a970610a3af63b3f4df5b69d91c6b4093a00ed8f)
---
 contrib/bc/LICENSE.md                  |   4 +-
 contrib/bc/MEMORY_BUGS.md              |   7 +
 contrib/bc/Makefile.in                 |   2 +-
 contrib/bc/NEWS.md                     |   7 +
 contrib/bc/NOTICE.md                   |   2 +-
 contrib/bc/README.md                   |   6 +-
 contrib/bc/compile_flags.txt           |  15 +
 contrib/bc/configure.sh                |  20 +-
 contrib/bc/gen/bc_help.txt             |   2 +-
 contrib/bc/gen/dc_help.txt             |   2 +-
 contrib/bc/gen/lib.bc                  |   2 +-
 contrib/bc/gen/lib2.bc                 |   2 +-
 contrib/bc/gen/strgen.c                |   4 +-
 contrib/bc/gen/strgen.sh               |   4 +-
 contrib/bc/include/args.h              |   2 +-
 contrib/bc/include/bc.h                |  21 +-
 contrib/bc/include/bcl.h               |   2 +-
 contrib/bc/include/dc.h                |   5 +-
 contrib/bc/include/file.h              |  26 +-
 contrib/bc/include/history.h           |   2 +-
 contrib/bc/include/lang.h              |   2 +-
 contrib/bc/include/lex.h               |   2 +-
 contrib/bc/include/library.h           |   2 +-
 contrib/bc/include/num.h               |   2 +-
 contrib/bc/include/opt.h               |   2 +-
 contrib/bc/include/parse.h             |   2 +-
 contrib/bc/include/program.h           |   2 +-
 contrib/bc/include/rand.h              |   7 +-
 contrib/bc/include/read.h              |   2 +-
 contrib/bc/include/status.h            |   6 +-
 contrib/bc/include/vector.h            |   2 +-
 contrib/bc/include/version.h           |   4 +-
 contrib/bc/include/vm.h                |  12 +-
 contrib/bc/locales/de_DE.ISO8859-1.msg |   2 +-
 contrib/bc/locales/de_DE.UTF-8.msg     |   2 +-
 contrib/bc/locales/en_US.msg           |   2 +-
 contrib/bc/locales/es_ES.ISO8859-1.msg |   2 +-
 contrib/bc/locales/es_ES.UTF-8.msg     |   2 +-
 contrib/bc/locales/fr_FR.ISO8859-1.msg |   2 +-
 contrib/bc/locales/fr_FR.UTF-8.msg     |   2 +-
 contrib/bc/locales/ja_JP.UTF-8.msg     |   2 +-
 contrib/bc/locales/ja_JP.eucJP.msg     |   2 +-
 contrib/bc/locales/nl_NL.ISO8859-1.msg |   2 +-
 contrib/bc/locales/nl_NL.UTF-8.msg     |   2 +-
 contrib/bc/locales/pl_PL.ISO8859-2.msg |   2 +-
 contrib/bc/locales/pl_PL.UTF-8.msg     |   2 +-
 contrib/bc/locales/pt_PT.ISO8859-1.msg |   2 +-
 contrib/bc/locales/pt_PT.UTF-8.msg     |   2 +-
 contrib/bc/locales/ru_RU.CP1251.msg    |   2 +-
 contrib/bc/locales/ru_RU.CP866.msg     |   2 +-
 contrib/bc/locales/ru_RU.ISO8859-5.msg |   2 +-
 contrib/bc/locales/ru_RU.KOI8-R.msg    |   2 +-
 contrib/bc/locales/ru_RU.UTF-8.msg     |   2 +-
 contrib/bc/locales/zh_CN.GB18030.msg   |   2 +-
 contrib/bc/locales/zh_CN.GB2312.msg    |   2 +-
 contrib/bc/locales/zh_CN.GBK.msg       |   2 +-
 contrib/bc/locales/zh_CN.UTF-8.msg     |   2 +-
 contrib/bc/locales/zh_CN.eucCN.msg     |   2 +-
 contrib/bc/manuals/bc/A.1              | 681 +++++++++++++++++----------------
 contrib/bc/manuals/bc/A.1.md           |   5 +-
 contrib/bc/manuals/bc/E.1              | 482 +++++++++++------------
 contrib/bc/manuals/bc/E.1.md           |   5 +-
 contrib/bc/manuals/bc/EH.1             | 474 ++++++++++++-----------
 contrib/bc/manuals/bc/EH.1.md          |   5 +-
 contrib/bc/manuals/bc/EHN.1            | 474 ++++++++++++-----------
 contrib/bc/manuals/bc/EHN.1.md         |   5 +-
 contrib/bc/manuals/bc/EN.1             | 482 +++++++++++------------
 contrib/bc/manuals/bc/EN.1.md          |   5 +-
 contrib/bc/manuals/bc/H.1              | 673 ++++++++++++++++----------------
 contrib/bc/manuals/bc/H.1.md           |   5 +-
 contrib/bc/manuals/bc/HN.1             | 673 ++++++++++++++++----------------
 contrib/bc/manuals/bc/HN.1.md          |   5 +-
 contrib/bc/manuals/bc/N.1              | 681 +++++++++++++++++----------------
 contrib/bc/manuals/bc/N.1.md           |   5 +-
 contrib/bc/manuals/bcl.3               |  95 ++---
 contrib/bc/manuals/bcl.3.md            |   2 +-
 contrib/bc/manuals/dc/A.1              | 478 +++++++++++------------
 contrib/bc/manuals/dc/A.1.md           |   2 +-
 contrib/bc/manuals/dc/E.1              | 376 +++++++++---------
 contrib/bc/manuals/dc/E.1.md           |   2 +-
 contrib/bc/manuals/dc/EH.1             | 368 +++++++++---------
 contrib/bc/manuals/dc/EH.1.md          |   2 +-
 contrib/bc/manuals/dc/EHN.1            | 368 +++++++++---------
 contrib/bc/manuals/dc/EHN.1.md         |   2 +-
 contrib/bc/manuals/dc/EN.1             | 376 +++++++++---------
 contrib/bc/manuals/dc/EN.1.md          |   2 +-
 contrib/bc/manuals/dc/H.1              | 470 ++++++++++++-----------
 contrib/bc/manuals/dc/H.1.md           |   2 +-
 contrib/bc/manuals/dc/HN.1             | 470 ++++++++++++-----------
 contrib/bc/manuals/dc/HN.1.md          |   2 +-
 contrib/bc/manuals/dc/N.1              | 478 +++++++++++------------
 contrib/bc/manuals/dc/N.1.md           |   2 +-
 contrib/bc/scripts/exec-install.sh     |   2 +-
 contrib/bc/scripts/format.sh           |   2 +-
 contrib/bc/scripts/functions.sh        |   2 +-
 contrib/bc/scripts/karatsuba.py        |   2 +-
 contrib/bc/scripts/link.sh             |   2 +-
 contrib/bc/scripts/lint.sh             |   2 +-
 contrib/bc/scripts/locale_install.sh   |   2 +-
 contrib/bc/scripts/locale_uninstall.sh |   2 +-
 contrib/bc/scripts/sqrt_frac_guess.bc  |   2 +-
 contrib/bc/scripts/sqrt_int_guess.bc   |   2 +-
 contrib/bc/scripts/sqrt_random.bc      |   2 +-
 contrib/bc/scripts/sqrt_random.sh      |   2 +-
 contrib/bc/src/args.c                  |   2 +-
 contrib/bc/src/bc.c                    |   6 +-
 contrib/bc/src/bc_lex.c                |   2 +-
 contrib/bc/src/bc_parse.c              |   2 +-
 contrib/bc/src/data.c                  |   4 +-
 contrib/bc/src/dc.c                    |   6 +-
 contrib/bc/src/dc_lex.c                |   2 +-
 contrib/bc/src/dc_parse.c              |   2 +-
 contrib/bc/src/file.c                  |  34 +-
 contrib/bc/src/history.c               |   2 +-
 contrib/bc/src/lang.c                  |   2 +-
 contrib/bc/src/lex.c                   |   2 +-
 contrib/bc/src/library.c               |   2 +-
 contrib/bc/src/main.c                  |  16 +-
 contrib/bc/src/num.c                   |  76 +++-
 contrib/bc/src/opt.c                   |   2 +-
 contrib/bc/src/parse.c                 |   2 +-
 contrib/bc/src/program.c               |   2 +-
 contrib/bc/src/rand.c                  |   2 +-
 contrib/bc/src/read.c                  |   2 +-
 contrib/bc/src/vector.c                |   2 +-
 contrib/bc/src/vm.c                    |  62 ++-
 contrib/bc/tests/all.sh                |   2 +-
 contrib/bc/tests/bc/timeconst.sh       |   2 +-
 contrib/bc/tests/bcl.c                 |   2 +-
 contrib/bc/tests/dc/scripts/easter.sh  |   2 +-
 contrib/bc/tests/error.sh              |   2 +-
 contrib/bc/tests/errors.sh             |   2 +-
 contrib/bc/tests/history.py            |   6 +-
 contrib/bc/tests/history.sh            |   2 +-
 contrib/bc/tests/other.sh              |   6 +-
 contrib/bc/tests/read.sh               |   2 +-
 contrib/bc/tests/script.sh             |   2 +-
 contrib/bc/tests/scripts.sh            |   2 +-
 contrib/bc/tests/stdin.sh              |   2 +-
 contrib/bc/tests/test.sh               |   2 +-
 140 files changed, 4449 insertions(+), 4236 deletions(-)

diff --git a/contrib/bc/LICENSE.md b/contrib/bc/LICENSE.md
index 74441065df35..c8f6758e6d4b 100644
--- a/contrib/bc/LICENSE.md
+++ b/contrib/bc/LICENSE.md
@@ -1,6 +1,6 @@
 # License
 
-Copyright (c) 2018-2023 Gavin D. Howard <gavin@gavinhoward.com>
+Copyright (c) 2018-2024 Gavin D. Howard <gavin@gavinhoward.com>
 
 Redistribution and use in source and binary forms, with or without modification,
 are permitted provided that the following conditions are met:
@@ -60,7 +60,7 @@ The files `src/rand.c` and `include/rand.h` are under the following copyrights
 and license:
 
 Copyright (c) 2014-2017 Melissa O'Neill and PCG Project contributors<br>
-Copyright (c) 2018-2023 Gavin D. Howard <gavin@gavinhoward.com>
+Copyright (c) 2018-2024 Gavin D. Howard <gavin@gavinhoward.com>
 
 Permission is hereby granted, free of charge, to any person obtaining a copy of
 this software and associated documentation files (the "Software"), to deal in
diff --git a/contrib/bc/MEMORY_BUGS.md b/contrib/bc/MEMORY_BUGS.md
index 12e0b854e9d8..2e41ad3d75c9 100644
--- a/contrib/bc/MEMORY_BUGS.md
+++ b/contrib/bc/MEMORY_BUGS.md
@@ -23,6 +23,13 @@ existed in.
 
   The first version without this bug is `6.0.2`.
 
+* In versions `3.0.0` until `6.7.5` (inclusive) of `bc` and `dc`, there is a
+  possible out-of-bounds read when there is an error flushing `stdout` on exit
+  because such an error would cause `bc` and `dc` to attempt to use a `jmp_buf`
+  when none exists.
+
+  The first version without this bug is `6.7.6`.
+
 * In versions `5.0.0` until `6.0.4` (inclusive) of `bc`, there is an
   out-of-bounds access if a non-local (non-`auto`) variable is set to a string
   with `asciify()`, then the function is redefined with a use of the same
diff --git a/contrib/bc/Makefile.in b/contrib/bc/Makefile.in
index e1309cd6d6b3..4adb76ddaa17 100644
--- a/contrib/bc/Makefile.in
+++ b/contrib/bc/Makefile.in
@@ -1,7 +1,7 @@
 #
 # SPDX-License-Identifier: BSD-2-Clause
 #
-# Copyright (c) 2018-2023 Gavin D. Howard and contributors.
+# Copyright (c) 2018-2024 Gavin D. Howard and contributors.
 #
 # Redistribution and use in source and binary forms, with or without
 # modification, are permitted provided that the following conditions are met:
diff --git a/contrib/bc/NEWS.md b/contrib/bc/NEWS.md
index 32e74de31231..95de7e5182c4 100644
--- a/contrib/bc/NEWS.md
+++ b/contrib/bc/NEWS.md
@@ -1,5 +1,12 @@
 # News
 
+## 6.7.6
+
+This is a production release to fix one bug.
+
+The bug was that `bc` attempted to jump out when flushing `stdout` on exit, but
+there is no jump buf at that point.
+
 ## 6.7.5
 
 This is a production release to fix one small bug.
diff --git a/contrib/bc/NOTICE.md b/contrib/bc/NOTICE.md
index c0d3ded5797a..35536b2c27d7 100644
--- a/contrib/bc/NOTICE.md
+++ b/contrib/bc/NOTICE.md
@@ -1,6 +1,6 @@
 # Notice
 
-Copyright 2018-2023 Gavin D. Howard and contributors.
+Copyright 2018-2024 Gavin D. Howard and contributors.
 
 ## Contributors
 
diff --git a/contrib/bc/README.md b/contrib/bc/README.md
index 943ca89eee2c..696e6186b8bd 100644
--- a/contrib/bc/README.md
+++ b/contrib/bc/README.md
@@ -48,7 +48,7 @@ POSIX-compatible systems that are known to work:
 * FreeBSD
 * OpenBSD
 * NetBSD
-* Mac OSX
+* macOS
 * Solaris* (as long as the Solaris version supports POSIX 2008)
 * AIX
 * HP-UX* (except for history)
@@ -347,6 +347,8 @@ that is because it is more robust. See the [benchmarks][19].
 Below is a non-comprehensive list of extensions that this `bc` and `dc` have
 that all others do not.
 
+* **The `!` operator has higher precedence than the `!` operator in other `bc`
+  implementations.**
 * An extended math library. (See [here][30] for more information.)
 * A command-line prompt.
 * Turning on and off digit clamping. (Digit clamping is about how to treat
@@ -427,7 +429,7 @@ Other projects based on this bc are:
 * [FreeBSD `bc`][23]. While the `bc` in FreeBSD is kept up-to-date, it is better
   to [report bugs there][24], as well as [submit patches][25], and the
   maintainers of the package will contact me if necessary.
-* [Mac OSX `bc`][35]. Any bugs in that `bc` should be reported to me, but do
+* [macOS `bc`][35]. Any bugs in that `bc` should be reported to me, but do
   expect bugs because the version is old.
 * [Android Open Source `bc`][32]. Any bugs in that `bc` can be reported here.
 
diff --git a/contrib/bc/compile_flags.txt b/contrib/bc/compile_flags.txt
new file mode 100644
index 000000000000..7a08c87f3876
--- /dev/null
+++ b/contrib/bc/compile_flags.txt
@@ -0,0 +1,15 @@
+-Weverything
+-pedantic
+-Wno-unsafe-buffer-usage
+-D_POSIX_C_SOURCE=200809L
+-D_XOPEN_SOURCE=700
+-D_BSD_SOURCE
+-D_GNU_SOURCE
+-D_DEFAULT_SOURCE
+-Iinclude/
+-DBC_DEBUG=1
+-DBC_ENABLED=1
+-DDC_ENABLED=1
+-DBC_ENABLE_EXTRA_MATH=1
+-DBC_ENABLE_HISTORY=1
+-DBC_ENABLE_NLS=1
diff --git a/contrib/bc/configure.sh b/contrib/bc/configure.sh
index 9292f094bb17..43bb502ea817 100755
--- a/contrib/bc/configure.sh
+++ b/contrib/bc/configure.sh
@@ -2,7 +2,7 @@
 #
 # SPDX-License-Identifier: BSD-2-Clause
 #
-# Copyright (c) 2018-2023 Gavin D. Howard and contributors.
+# Copyright (c) 2018-2024 Gavin D. Howard and contributors.
 #
 # Redistribution and use in source and binary forms, with or without
 # modification, are permitted provided that the following conditions are met:
@@ -127,7 +127,7 @@ usage() {
 	printf '        If this option is given along with -e and -r, the last occurrence of\n'
 	printf '        all of the three is used.\n'
 	printf '    -k KARATSUBA_LEN, --karatsuba-len KARATSUBA_LEN\n'
-	printf '        Set the karatsuba length to KARATSUBA_LEN (default is 64).\n'
+	printf '        Set the karatsuba length to KARATSUBA_LEN (default is 32).\n'
 	printf '        It is an error if KARATSUBA_LEN is not a number or is less than 16.\n'
 	printf '    -l, --install-all-locales\n'
 	printf '        Installs all locales, regardless of how many are on the system. This\n'
@@ -163,7 +163,7 @@ usage() {
 	printf '        Enable the use of libreadline/readline. This is meant for those users\n'
 	printf '        that want vi-like or Emacs-like behavior in history. This option is\n'
 	printf '        ignored if history is disabled. If this option is given along with -e\n'
-	printf '        and -r, the last occurrence of all of the three is used.\n'
+	printf '        and -i, the last occurrence of all of the three is used.\n'
 	printf '    -s SETTING, --set-default-on SETTING\n'
 	printf '        Set the default named by SETTING to on. See below for possible values\n'
 	printf '        for SETTING. For multiple instances of the -s or -S for the the same\n'
@@ -1671,10 +1671,10 @@ else
 	CPPFLAGS="$CPPFLAGS -D_POSIX_C_SOURCE=200809L -D_XOPEN_SOURCE=700"
 fi
 
-# Test Mac OSX. This is not in an if statement because regardless of whatever
-# the user says, we need to know if we are on Mac OSX. If we are, we have to set
+# Test macOS. This is not in an if statement because regardless of whatever the
+# user says, we need to know if we are on macOS. If we are, we have to set
 # _DARWIN_C_SOURCE.
-printf 'Testing for Mac OSX...\n'
+printf 'Testing for macOS...\n'
 
 flags="-DBC_TEST_APPLE -DBC_ENABLE_AFL=0"
 "$CC" $CPPFLAGS $CFLAGS $flags "-I$scriptdir/include" -E "$scriptdir/src/vm.c" > /dev/null 2>&1
@@ -1682,15 +1682,15 @@ flags="-DBC_TEST_APPLE -DBC_ENABLE_AFL=0"
 err="$?"
 
 if [ "$err" -ne 0 ]; then
-	printf 'On Mac OSX. Using _DARWIN_C_SOURCE.\n\n'
+	printf 'On macOS. Using _DARWIN_C_SOURCE.\n\n'
 	apple="-D_DARWIN_C_SOURCE"
 else
-	printf 'Not on Mac OSX.\n\n'
+	printf 'Not on macOS.\n\n'
 	apple=""
 fi
 
-# We can't use the linker's strip flag on Mac OSX.
-if [ "$debug" -eq 0 ] && [ "$apple" == "" ] && [ "$strip_bin" -ne 0 ]; then
+# We can't use the linker's strip flag on macOS.
+if [ "$debug" -eq 0 ] && [ "$apple" = "" ] && [ "$strip_bin" -ne 0 ]; then
 	LDFLAGS="-s $LDFLAGS"
 fi
 
diff --git a/contrib/bc/gen/bc_help.txt b/contrib/bc/gen/bc_help.txt
index c51ba186db15..489b54a185f1 100644
--- a/contrib/bc/gen/bc_help.txt
+++ b/contrib/bc/gen/bc_help.txt
@@ -3,7 +3,7 @@
  *
  * SPDX-License-Identifier: BSD-2-Clause
  *
- * Copyright (c) 2018-2023 Gavin D. Howard and contributors.
+ * Copyright (c) 2018-2024 Gavin D. Howard and contributors.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions are met:
diff --git a/contrib/bc/gen/dc_help.txt b/contrib/bc/gen/dc_help.txt
index 7d9e7ec28d25..df4ede1583a2 100644
--- a/contrib/bc/gen/dc_help.txt
+++ b/contrib/bc/gen/dc_help.txt
@@ -3,7 +3,7 @@
  *
  * SPDX-License-Identifier: BSD-2-Clause
  *
- * Copyright (c) 2018-2023 Gavin D. Howard and contributors.
+ * Copyright (c) 2018-2024 Gavin D. Howard and contributors.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions are met:
diff --git a/contrib/bc/gen/lib.bc b/contrib/bc/gen/lib.bc
index b12b23176790..0c9389b8510d 100644
--- a/contrib/bc/gen/lib.bc
+++ b/contrib/bc/gen/lib.bc
@@ -3,7 +3,7 @@
  *
  * SPDX-License-Identifier: BSD-2-Clause
  *
- * Copyright (c) 2018-2023 Gavin D. Howard and contributors.
+ * Copyright (c) 2018-2024 Gavin D. Howard and contributors.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions are met:
diff --git a/contrib/bc/gen/lib2.bc b/contrib/bc/gen/lib2.bc
index df51d0c07a8d..d6d9f70fe063 100644
--- a/contrib/bc/gen/lib2.bc
+++ b/contrib/bc/gen/lib2.bc
@@ -3,7 +3,7 @@
  *
  * SPDX-License-Identifier: BSD-2-Clause
  *
- * Copyright (c) 2018-2023 Gavin D. Howard and contributors.
+ * Copyright (c) 2018-2024 Gavin D. Howard and contributors.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions are met:
diff --git a/contrib/bc/gen/strgen.c b/contrib/bc/gen/strgen.c
index 2cb3ed9e8475..1394a05c4a76 100644
--- a/contrib/bc/gen/strgen.c
+++ b/contrib/bc/gen/strgen.c
@@ -3,7 +3,7 @@
  *
  * SPDX-License-Identifier: BSD-2-Clause
  *
- * Copyright (c) 2018-2023 Gavin D. Howard and contributors.
+ * Copyright (c) 2018-2024 Gavin D. Howard and contributors.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions are met:
@@ -68,7 +68,7 @@ static const char* const bc_gen_ex_end = "{{ end }}";
 // This is exactly what it looks like. It just slaps a simple license header on
 // the generated C source file.
 static const char* const bc_gen_header =
-	"// Copyright (c) 2018-2023 Gavin D. Howard and contributors.\n"
+	"// Copyright (c) 2018-2024 Gavin D. Howard and contributors.\n"
 	"// Licensed under the 2-clause BSD license.\n"
 	"// *** AUTOMATICALLY GENERATED FROM %s. DO NOT MODIFY. ***\n\n";
 // clang-format on
diff --git a/contrib/bc/gen/strgen.sh b/contrib/bc/gen/strgen.sh
index 2b8927b5528e..8542bd40ee83 100755
--- a/contrib/bc/gen/strgen.sh
+++ b/contrib/bc/gen/strgen.sh
@@ -2,7 +2,7 @@
 #
 # SPDX-License-Identifier: BSD-2-Clause
 #
-# Copyright (c) 2018-2023 Gavin D. Howard and contributors.
+# Copyright (c) 2018-2024 Gavin D. Howard and contributors.
 #
 # Redistribution and use in source and binary forms, with or without
 # modification, are permitted provided that the following conditions are met:
@@ -96,7 +96,7 @@ if [ -n "$remove_tabs" ]; then
 fi
 
 cat<<EOF
-// Copyright (c) 2018-2023 Gavin D. Howard and contributors.
+// Copyright (c) 2018-2024 Gavin D. Howard and contributors.
 // Licensed under the 2-clause BSD license.
 // *** AUTOMATICALLY GENERATED FROM ${input}. DO NOT MODIFY. ***
 
diff --git a/contrib/bc/include/args.h b/contrib/bc/include/args.h
index 3174ba267590..f1e9f007bddf 100644
--- a/contrib/bc/include/args.h
+++ b/contrib/bc/include/args.h
@@ -3,7 +3,7 @@
  *
  * SPDX-License-Identifier: BSD-2-Clause
  *
- * Copyright (c) 2018-2023 Gavin D. Howard and contributors.
+ * Copyright (c) 2018-2024 Gavin D. Howard and contributors.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions are met:
diff --git a/contrib/bc/include/bc.h b/contrib/bc/include/bc.h
index 17fd0b9d171f..b25df09a174e 100644
--- a/contrib/bc/include/bc.h
+++ b/contrib/bc/include/bc.h
@@ -3,7 +3,7 @@
  *
  * SPDX-License-Identifier: BSD-2-Clause
  *
- * Copyright (c) 2018-2023 Gavin D. Howard and contributors.
+ * Copyright (c) 2018-2024 Gavin D. Howard and contributors.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions are met:
@@ -48,8 +48,9 @@
 /**
  * The main function for bc. It just sets variables and passes its arguments
  * through to @a bc_vm_boot().
+ * @return  A status.
  */
-void
+BcStatus
 bc_main(int argc, char* argv[]);
 
 // These are references to the help text, the library text, and the "filename"
@@ -88,10 +89,8 @@ typedef struct BcLexKeyword
 #define BC_LEX_KW_LEN(kw) ((size_t) ((kw)->data & ~(BC_LEX_CHAR_MSB(1))))
 
 /// A macro to easily build a keyword entry. See bc_lex_kws in src/data.c.
-#define BC_LEX_KW_ENTRY(a, b, c)                                              \
-	{                                                                         \
-		.data = ((b) & ~(BC_LEX_CHAR_MSB(1))) | BC_LEX_CHAR_MSB(c), .name = a \
-	}
+#define BC_LEX_KW_ENTRY(a, b, c) \
+	{ .data = ((b) & ~(BC_LEX_CHAR_MSB(1))) | BC_LEX_CHAR_MSB(c), .name = a }
 
 #if BC_ENABLE_EXTRA_MATH
 
@@ -234,7 +233,7 @@ bc_lex_token(BcLex* l);
  * @param t  The token to return operator data for.
  * @return   The operator data for @a t.
  */
-#define BC_PARSE_OP_DATA(t) bc_parse_ops[((t) -BC_LEX_OP_INC)]
+#define BC_PARSE_OP_DATA(t) bc_parse_ops[((t) - BC_LEX_OP_INC)]
 
 /**
  * Returns non-zero if operator @a op is left associative, zero otherwise.
@@ -341,7 +340,7 @@ bc_lex_token(BcLex* l);
  * @param t  The token to turn into an instruction.
  * @return   The token as an instruction.
  */
-#define BC_PARSE_TOKEN_INST(t) ((uchar) ((t) -BC_LEX_NEG + BC_INST_NEG))
+#define BC_PARSE_TOKEN_INST(t) ((uchar) ((t) - BC_LEX_NEG + BC_INST_NEG))
 
 /**
  * Returns true if the token is a bc keyword.
@@ -372,10 +371,8 @@ typedef struct BcParseNext
 
 /// A macro to generate a BcParseNext literal from BcParseNext data. See
 /// src/data.c for examples.
-#define BC_PARSE_NEXT(a, ...)                                 \
-	{                                                         \
-		.len = (uchar) (a), BC_PARSE_NEXT_TOKENS(__VA_ARGS__) \
-	}
+#define BC_PARSE_NEXT(a, ...) \
+	{ .len = (uchar) (a), BC_PARSE_NEXT_TOKENS(__VA_ARGS__) }
 
 /// A status returned by @a bc_parse_expr_err(). It can either return success or
 /// an error indicating an empty expression.
diff --git a/contrib/bc/include/bcl.h b/contrib/bc/include/bcl.h
index d3a9f42cdcf8..8e762b694f4d 100644
--- a/contrib/bc/include/bcl.h
+++ b/contrib/bc/include/bcl.h
@@ -3,7 +3,7 @@
  *
  * SPDX-License-Identifier: BSD-2-Clause
  *
- * Copyright (c) 2018-2023 Gavin D. Howard and contributors.
+ * Copyright (c) 2018-2024 Gavin D. Howard and contributors.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions are met:
diff --git a/contrib/bc/include/dc.h b/contrib/bc/include/dc.h
index 9a603c26d1a5..1328f1c63b38 100644
--- a/contrib/bc/include/dc.h
+++ b/contrib/bc/include/dc.h
@@ -3,7 +3,7 @@
  *
  * SPDX-License-Identifier: BSD-2-Clause
  *
- * Copyright (c) 2018-2023 Gavin D. Howard and contributors.
+ * Copyright (c) 2018-2024 Gavin D. Howard and contributors.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions are met:
@@ -45,8 +45,9 @@
 /**
  * The main function for dc. It just sets variables and passes its arguments
  * through to @a bc_vm_boot().
+ * @return  A status.
  */
-void
+BcStatus
 dc_main(int argc, char* argv[]);
 
 // A reference to the dc help text.
diff --git a/contrib/bc/include/file.h b/contrib/bc/include/file.h
index 95cfa861a734..86f368db11c6 100644
--- a/contrib/bc/include/file.h
+++ b/contrib/bc/include/file.h
@@ -3,7 +3,7 @@
  *
  * SPDX-License-Identifier: BSD-2-Clause
  *
- * Copyright (c) 2018-2023 Gavin D. Howard and contributors.
+ * Copyright (c) 2018-2024 Gavin D. Howard and contributors.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions are met:
@@ -54,6 +54,9 @@ typedef struct BcFile
 	// with the existing code as possible.
 	FILE* f;
 
+	// True if errors should be fatal, false otherwise.
+	bool errors_fatal;
+
 } BcFile;
 
 #else // BC_ENABLE_LINE_LIB
@@ -64,6 +67,9 @@ typedef struct BcFile
 	// The actual file descriptor.
 	int fd;
 
+	// True if errors should be fatal, false otherwise.
+	bool errors_fatal;
+
 	// The buffer for the file.
 	char* buf;
 
@@ -123,23 +129,25 @@ typedef enum BcFlushType
 
 /**
  * Initialize a file.
- * @param f     The file to initialize.
- * @param file  The stdio file.
+ * @param f             The file to initialize.
+ * @param file          The stdio file.
+ * @param errors_fatal  True if errors should be fatal, false otherwise.
  */
 void
-bc_file_init(BcFile* f, FILE* file);
+bc_file_init(BcFile* f, FILE* file, bool errors_fatal);
 
 #else // BC_ENABLE_LINE_LIB
 
 /**
  * Initialize a file.
- * @param f    The file to initialize.
- * @param fd   The file descriptor.
- * @param buf  The buffer for the file.
- * @param cap  The capacity of the buffer.
+ * @param f             The file to initialize.
+ * @param fd            The file descriptor.
+ * @param buf           The buffer for the file.
+ * @param cap           The capacity of the buffer.
+ * @param errors_fatal  True if errors should be fatal, false otherwise.
  */
 void
-bc_file_init(BcFile* f, int fd, char* buf, size_t cap);
+bc_file_init(BcFile* f, int fd, char* buf, size_t cap, bool errors_fatal);
 
 #endif // BC_ENABLE_LINE_LIB
 
diff --git a/contrib/bc/include/history.h b/contrib/bc/include/history.h
index 64402c4dffa1..460524bd7b87 100644
--- a/contrib/bc/include/history.h
+++ b/contrib/bc/include/history.h
@@ -3,7 +3,7 @@
  *
  * SPDX-License-Identifier: BSD-2-Clause
  *
- * Copyright (c) 2018-2023 Gavin D. Howard and contributors.
+ * Copyright (c) 2018-2024 Gavin D. Howard and contributors.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions are met:
diff --git a/contrib/bc/include/lang.h b/contrib/bc/include/lang.h
index 97aeeaa98da8..6c8245139719 100644
--- a/contrib/bc/include/lang.h
+++ b/contrib/bc/include/lang.h
@@ -3,7 +3,7 @@
  *
  * SPDX-License-Identifier: BSD-2-Clause
  *
- * Copyright (c) 2018-2023 Gavin D. Howard and contributors.
+ * Copyright (c) 2018-2024 Gavin D. Howard and contributors.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions are met:
diff --git a/contrib/bc/include/lex.h b/contrib/bc/include/lex.h
index ac9b7b6ea69c..d2be3c7526ef 100644
--- a/contrib/bc/include/lex.h
+++ b/contrib/bc/include/lex.h
@@ -3,7 +3,7 @@
  *
  * SPDX-License-Identifier: BSD-2-Clause
  *
- * Copyright (c) 2018-2023 Gavin D. Howard and contributors.
+ * Copyright (c) 2018-2024 Gavin D. Howard and contributors.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions are met:
diff --git a/contrib/bc/include/library.h b/contrib/bc/include/library.h
index 1edd3757444c..9942705a5f36 100644
--- a/contrib/bc/include/library.h
+++ b/contrib/bc/include/library.h
@@ -3,7 +3,7 @@
  *
  * SPDX-License-Identifier: BSD-2-Clause
  *
- * Copyright (c) 2018-2023 Gavin D. Howard and contributors.
+ * Copyright (c) 2018-2024 Gavin D. Howard and contributors.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions are met:
diff --git a/contrib/bc/include/num.h b/contrib/bc/include/num.h
index 6c9dee107f2f..6cead6eb3823 100644
--- a/contrib/bc/include/num.h
+++ b/contrib/bc/include/num.h
@@ -3,7 +3,7 @@
  *
  * SPDX-License-Identifier: BSD-2-Clause
  *
- * Copyright (c) 2018-2023 Gavin D. Howard and contributors.
+ * Copyright (c) 2018-2024 Gavin D. Howard and contributors.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions are met:
diff --git a/contrib/bc/include/opt.h b/contrib/bc/include/opt.h
index 28d9d99a7856..e60328994d8c 100644
--- a/contrib/bc/include/opt.h
+++ b/contrib/bc/include/opt.h
@@ -3,7 +3,7 @@
  *
  * SPDX-License-Identifier: BSD-2-Clause
  *
- * Copyright (c) 2018-2023 Gavin D. Howard and contributors.
+ * Copyright (c) 2018-2024 Gavin D. Howard and contributors.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions are met:
diff --git a/contrib/bc/include/parse.h b/contrib/bc/include/parse.h
index ece413e7bd74..7f0f8768b0db 100644
--- a/contrib/bc/include/parse.h
+++ b/contrib/bc/include/parse.h
@@ -3,7 +3,7 @@
  *
  * SPDX-License-Identifier: BSD-2-Clause
  *
- * Copyright (c) 2018-2023 Gavin D. Howard and contributors.
+ * Copyright (c) 2018-2024 Gavin D. Howard and contributors.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions are met:
diff --git a/contrib/bc/include/program.h b/contrib/bc/include/program.h
index 1df753afad22..e16e5c079d7d 100644
--- a/contrib/bc/include/program.h
+++ b/contrib/bc/include/program.h
@@ -3,7 +3,7 @@
  *
  * SPDX-License-Identifier: BSD-2-Clause
  *
- * Copyright (c) 2018-2023 Gavin D. Howard and contributors.
+ * Copyright (c) 2018-2024 Gavin D. Howard and contributors.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions are met:
diff --git a/contrib/bc/include/rand.h b/contrib/bc/include/rand.h
index e516295d7c5c..aee63b866cf6 100644
--- a/contrib/bc/include/rand.h
+++ b/contrib/bc/include/rand.h
@@ -13,7 +13,7 @@
  * This code is under the following license:
  *
  * Copyright (c) 2014-2017 Melissa O'Neill and PCG Project contributors
- * Copyright (c) 2018-2023 Gavin D. Howard and contributors.
+ * Copyright (c) 2018-2024 Gavin D. Howard and contributors.
  *
  * Permission is hereby granted, free of charge, to any person obtaining a copy
  * of this software and associated documentation files (the "Software"), to deal
@@ -241,10 +241,7 @@ typedef struct BcRandState
  * @param l  The low 64 bits.
  * @return   The constant built from @a h and @a l.
  */
-#define BC_RAND_CONSTANT(h, l) \
-	{                          \
-		.lo = (l), .hi = (h)   \
-	}
+#define BC_RAND_CONSTANT(h, l) { .lo = (l), .hi = (h) }
 
 /**
  * Truncates a PCG state to the number of bits in a random integer.
diff --git a/contrib/bc/include/read.h b/contrib/bc/include/read.h
index 867dcd7433a3..62e6897635a2 100644
--- a/contrib/bc/include/read.h
+++ b/contrib/bc/include/read.h
@@ -3,7 +3,7 @@
  *
  * SPDX-License-Identifier: BSD-2-Clause
  *
- * Copyright (c) 2018-2023 Gavin D. Howard and contributors.
+ * Copyright (c) 2018-2024 Gavin D. Howard and contributors.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions are met:
diff --git a/contrib/bc/include/status.h b/contrib/bc/include/status.h
index 242514edb476..f579df8c649b 100644
--- a/contrib/bc/include/status.h
+++ b/contrib/bc/include/status.h
@@ -3,7 +3,7 @@
  *
  * SPDX-License-Identifier: BSD-2-Clause
  *
- * Copyright (c) 2018-2023 Gavin D. Howard and contributors.
+ * Copyright (c) 2018-2024 Gavin D. Howard and contributors.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions are met:
@@ -60,10 +60,10 @@
 #endif // __FreeBSD__
 #endif // BC_TEST_FREEBSD
 
-// This is used by configure.sh to test for Mac OSX.
+// This is used by configure.sh to test for macOS.
 #ifdef BC_TEST_APPLE
 #ifdef __APPLE__
-#error On Mac OSX without _DARWIN_C_SOURCE
+#error On macOS without _DARWIN_C_SOURCE
 #endif // __APPLE__
 #endif // BC_TEST_APPLE
 
diff --git a/contrib/bc/include/vector.h b/contrib/bc/include/vector.h
index b86be1424537..cad5fc2aa7c3 100644
--- a/contrib/bc/include/vector.h
+++ b/contrib/bc/include/vector.h
@@ -3,7 +3,7 @@
  *
  * SPDX-License-Identifier: BSD-2-Clause
  *
- * Copyright (c) 2018-2023 Gavin D. Howard and contributors.
+ * Copyright (c) 2018-2024 Gavin D. Howard and contributors.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions are met:
diff --git a/contrib/bc/include/version.h b/contrib/bc/include/version.h
index e2576269345d..586691a6e7ef 100644
--- a/contrib/bc/include/version.h
+++ b/contrib/bc/include/version.h
@@ -3,7 +3,7 @@
  *
  * SPDX-License-Identifier: BSD-2-Clause
  *
- * Copyright (c) 2018-2023 Gavin D. Howard and contributors.
+ * Copyright (c) 2018-2024 Gavin D. Howard and contributors.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions are met:
@@ -37,6 +37,6 @@
 #define BC_VERSION_H
 
 /// The current version.
-#define VERSION 6.7.5
+#define VERSION 6.7.6
 
 #endif // BC_VERSION_H
diff --git a/contrib/bc/include/vm.h b/contrib/bc/include/vm.h
index c56cc8e7370a..052c1d14c237 100644
--- a/contrib/bc/include/vm.h
+++ b/contrib/bc/include/vm.h
@@ -3,7 +3,7 @@
  *
  * SPDX-License-Identifier: BSD-2-Clause
  *
- * Copyright (c) 2018-2023 Gavin D. Howard and contributors.
+ * Copyright (c) 2018-2024 Gavin D. Howard and contributors.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions are met:
@@ -493,7 +493,7 @@
 #define BC_VM_SAFE_RESULT(r) ((r)->t >= BC_RESULT_TEMP)
 
 /// The invalid locale catalog return value.
-#define BC_VM_INVALID_CATALOG ((nl_catd) -1)
+#define BC_VM_INVALID_CATALOG ((nl_catd) - 1)
 
 /**
  * Returns true if the *unsigned* multiplication overflows.
@@ -791,8 +791,9 @@ bc_vm_info(const char* const help);
  * The entrance point for bc/dc together.
  * @param argc  The count of arguments.
  * @param argv  The argument array.
+ * @return      A status.
  */
-void
+BcStatus
 bc_vm_boot(int argc, char* argv[]);
 
 /**
@@ -1045,8 +1046,9 @@ bc_vm_fatalError(BcErr e);
  * A function to call at exit.
  * @param status  The exit status.
  */
-int
-bc_vm_atexit(int status);
+BcStatus
+bc_vm_atexit(BcStatus status);
+
 #endif // BC_ENABLE_LIBRARY
 
 /// A reference to the copyright header.
diff --git a/contrib/bc/locales/de_DE.ISO8859-1.msg b/contrib/bc/locales/de_DE.ISO8859-1.msg
index 858a3946e8f8..9700ab070b2c 100644
--- a/contrib/bc/locales/de_DE.ISO8859-1.msg
+++ b/contrib/bc/locales/de_DE.ISO8859-1.msg
@@ -1,7 +1,7 @@
 $ $
 $ SPDX-License-Identifier: BSD-2-Clause
 $ $
-$ Copyright (c) 2018-2023 Gavin D. Howard and contributors.
+$ Copyright (c) 2018-2024 Gavin D. Howard and contributors.
 $ $
 $ Redistribution and use in source and binary forms, with or without
 $ modification, are permitted provided that the following conditions are met:
diff --git a/contrib/bc/locales/de_DE.UTF-8.msg b/contrib/bc/locales/de_DE.UTF-8.msg
index 25be4fd79cb9..7b918fc6d1cd 100644
--- a/contrib/bc/locales/de_DE.UTF-8.msg
+++ b/contrib/bc/locales/de_DE.UTF-8.msg
@@ -1,7 +1,7 @@
 $ $
 $ SPDX-License-Identifier: BSD-2-Clause
 $ $
-$ Copyright (c) 2018-2023 Gavin D. Howard and contributors.
+$ Copyright (c) 2018-2024 Gavin D. Howard and contributors.
 $ $
 $ Redistribution and use in source and binary forms, with or without
 $ modification, are permitted provided that the following conditions are met:
diff --git a/contrib/bc/locales/en_US.msg b/contrib/bc/locales/en_US.msg
index 5610496d6e71..4afcbcd1f813 100644
--- a/contrib/bc/locales/en_US.msg
+++ b/contrib/bc/locales/en_US.msg
@@ -1,7 +1,7 @@
 $ $
 $ SPDX-License-Identifier: BSD-2-Clause
 $ $
-$ Copyright (c) 2018-2023 Gavin D. Howard and contributors.
+$ Copyright (c) 2018-2024 Gavin D. Howard and contributors.
 $ $
 $ Redistribution and use in source and binary forms, with or without
 $ modification, are permitted provided that the following conditions are met:
diff --git a/contrib/bc/locales/es_ES.ISO8859-1.msg b/contrib/bc/locales/es_ES.ISO8859-1.msg
index 3bf70753559e..4d022d9bf664 100644
--- a/contrib/bc/locales/es_ES.ISO8859-1.msg
+++ b/contrib/bc/locales/es_ES.ISO8859-1.msg
@@ -1,7 +1,7 @@
 $ $
 $ SPDX-License-Identifier: BSD-2-Clause
 $ $
-$ Copyright (c) 2018-2023 Gavin D. Howard and contributors.
+$ Copyright (c) 2018-2024 Gavin D. Howard and contributors.
 $ $
 $ Redistribution and use in source and binary forms, with or without
 $ modification, are permitted provided that the following conditions are met:
diff --git a/contrib/bc/locales/es_ES.UTF-8.msg b/contrib/bc/locales/es_ES.UTF-8.msg
index 0a5cf26d1621..364cff6ee57f 100644
--- a/contrib/bc/locales/es_ES.UTF-8.msg
+++ b/contrib/bc/locales/es_ES.UTF-8.msg
@@ -1,7 +1,7 @@
 $ $
 $ SPDX-License-Identifier: BSD-2-Clause
 $ $
-$ Copyright (c) 2018-2023 Gavin D. Howard and contributors.
+$ Copyright (c) 2018-2024 Gavin D. Howard and contributors.
 $ $
 $ Redistribution and use in source and binary forms, with or without
 $ modification, are permitted provided that the following conditions are met:
diff --git a/contrib/bc/locales/fr_FR.ISO8859-1.msg b/contrib/bc/locales/fr_FR.ISO8859-1.msg
index f2e07e02b2dc..b4b39866c96e 100644
--- a/contrib/bc/locales/fr_FR.ISO8859-1.msg
+++ b/contrib/bc/locales/fr_FR.ISO8859-1.msg
@@ -1,7 +1,7 @@
 $ $
 $ SPDX-License-Identifier: BSD-2-Clause
 $ $
-$ Copyright (c) 2018-2023 Gavin D. Howard and contributors.
+$ Copyright (c) 2018-2024 Gavin D. Howard and contributors.
 $ $
 $ Redistribution and use in source and binary forms, with or without
 $ modification, are permitted provided that the following conditions are met:
diff --git a/contrib/bc/locales/fr_FR.UTF-8.msg b/contrib/bc/locales/fr_FR.UTF-8.msg
index 1e9e900746a5..c3387e31ae9f 100644
--- a/contrib/bc/locales/fr_FR.UTF-8.msg
+++ b/contrib/bc/locales/fr_FR.UTF-8.msg
@@ -1,7 +1,7 @@
 $ $
 $ SPDX-License-Identifier: BSD-2-Clause
 $ $
-$ Copyright (c) 2018-2023 Gavin D. Howard and contributors.
+$ Copyright (c) 2018-2024 Gavin D. Howard and contributors.
 $ $
 $ Redistribution and use in source and binary forms, with or without
 $ modification, are permitted provided that the following conditions are met:
diff --git a/contrib/bc/locales/ja_JP.UTF-8.msg b/contrib/bc/locales/ja_JP.UTF-8.msg
index d871e9bf6ad2..21640eb9f1cb 100644
--- a/contrib/bc/locales/ja_JP.UTF-8.msg
+++ b/contrib/bc/locales/ja_JP.UTF-8.msg
@@ -1,7 +1,7 @@
 $ $
 $ SPDX-License-Identifier: BSD-2-Clause
*** 23592 LINES SKIPPED ***