Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package calc for openSUSE:Factory checked in 
at 2025-08-25 20:39:02
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/calc (Old)
 and      /work/SRC/openSUSE:Factory/.calc.new.30751 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "calc"

Mon Aug 25 20:39:02 2025 rev:43 rq:1301218 version:2.16.0.0

Changes:
--------
--- /work/SRC/openSUSE:Factory/calc/calc.changes        2024-11-25 
23:22:06.188181208 +0100
+++ /work/SRC/openSUSE:Factory/.calc.new.30751/calc.changes     2025-08-25 
20:41:09.563785813 +0200
@@ -1,0 +2,43 @@
+Mon Aug 18 07:43:30 UTC 2025 - Michael Vetter <[email protected]>
+
+- Update to 2.16.0.0:
+  * Starting with calc version 2.16.0.0, the ability to perform arithmetic
+    on addresses of values in calc objects has been greatly restricted.
+  * Most arithmetic on of value addresses could easily cause calc to
+    crash.  For example, prior to calc version 2.16.0.0, the following
+    command was likely to crash calc: calc '*((&.)+1e9)'
+  * Subtracting two value addresses is permitted, however there is NO
+    guarantee that the address of a value will remain consistent across
+    calc runs.  Addresses of values depend on the circumstances of when
+    the calc values were formed.
+  * The above restrictions and caveats apply to addresses of values.
+    Such restrictions and caveats to NOT apply to the addresses of
+    octets, NOR to the addresses within strings.  If isptr(x) == 2, then
+    x is value-pointer and the above mentioned restrictions and caveats apply.
+  * See "help address" for more information on value address arithmetic.
+  * Added E_INVALID_DEREF (10610) error code to indicate the invalid
+    dereferencing a non-variable.
+  * Added E_INVALID_ADDR_OP (10611) error code to indicate an invalid
+    arithmetic address operation.
+
+-------------------------------------------------------------------
+Thu Aug 14 05:33:26 UTC 2025 - Michael Vetter <[email protected]>
+
+- Update to 2.15.1.2:
+  * Removed use of HAVE_MEMMOVE as well have_memmv.c.
+  * Removed the building and including of have_memmv.h.
+  * Removed the memmove() function in blkcpy.c, used when HAVE_MEMMOVE was NOT 
defined.
+  * The libc memmove(3) function as defined by <string.h> is now
+    required to compile calc because the replacement code in
+    blkcpy.c q was problematic, especially when regions overlap.
+  * The HAVE_MEMMOVE make symbol was removed from Makefile.config.
+
+-------------------------------------------------------------------
+Fri Apr 25 13:32:08 UTC 2025 - Michael Vetter <[email protected]>
+
+- Update to 2.15.1.1:
+  * Change Makefile.config to, if not using not HomeBrew, then try to
+    detect macports and/or using /opt/local/{lib,include}.
+  * Put full date range (1989-2025) of calc source into version.h.
+
+-------------------------------------------------------------------

Old:
----
  calc-2.15.1.0.tar.bz2

New:
----
  calc-2.16.0.0.tar.bz2

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ calc.spec ++++++
--- /var/tmp/diff_new_pack.LWOoEd/_old  2025-08-25 20:41:10.207812794 +0200
+++ /var/tmp/diff_new_pack.LWOoEd/_new  2025-08-25 20:41:10.211812962 +0200
@@ -1,7 +1,7 @@
 #
 # spec file for package calc
 #
-# Copyright (c) 2024 SUSE LLC
+# Copyright (c) 2025 SUSE LLC and contributors
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -16,10 +16,10 @@
 #
 
 
-%define soname 2_15_1_0
+%define soname 2_16_0_0
 %define libname libcalc%{soname}
 Name:           calc
-Version:        2.15.1.0
+Version:        2.16.0.0
 Release:        0
 Summary:        C-style arbitrary precision calculator
 License:        LGPL-2.1-only

++++++ calc-2.15.1.0.tar.bz2 -> calc-2.16.0.0.tar.bz2 ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/calc-2.15.1.0/CHANGES new/calc-2.16.0.0/CHANGES
--- old/calc-2.15.1.0/CHANGES   2024-07-12 07:45:17.000000000 +0200
+++ new/calc-2.16.0.0/CHANGES   2025-08-15 03:12:36.000000000 +0200
@@ -1,3 +1,57 @@
+The following are the changes from calc version 2.15.1.2 to 2.16.0.0:
+
+    Starting with calc version 2.16.0.0, the ability to perform arithmetic
+    on addresses of values in calc objects has been greatly restricted.
+
+    Most arithmetic on of value addresses could easily cause calc to
+    crash.  For example, prior to calc version 2.16.0.0, the following
+    command was likely to crash calc:
+
+        calc '*((&.)+1e9)'
+
+    Subtracting two value addresses is permitted, however there is NO
+    guarantee that the address of a value will remain consistent across
+    calc runs.  Addresses of values depend on the circumstances of when
+    the calc values were formed.
+
+    The above restrictions and caveats apply to addresses of values.
+    Such restrictions and caveats to NOT apply to the addresses of
+    octets, NOR to the addresses within strings.  If isptr(x) == 2, then
+    x is value-pointer and the above mentioned restrictions and caveats apply.
+
+    See "help address" for more information on value address arithmetic.
+
+    Added E_INVALID_DEREF (10610) error code to indicate the invalid
+    dereferencing a non-variable.
+
+    Added E_INVALID_ADDR_OP (10611) error code to indicate an invalid
+    arithmetic address operation.
+
+    We plan to let this most recent change settle down before performing
+    the calc v2 to calc v3 fork.  Therefore, version 2.16.1.0 will form
+    the basis for the calc v2 to calc v3 fork.
+
+
+The following are the changes from calc version 2.15.1.2 to 2.15.1.2:
+
+    Removed use of HAVE_MEMMOVE as well have_memmv.c.  Removed the
+    building and including of have_memmv.h.  Removed the memmove()
+    function in blkcpy.c, used when HAVE_MEMMOVE was NOT defined.
+    The libc memmove(3) function as defined by <string.h> is now
+    required to compile calc because the replacement code in
+    blkcpy.c q was problematic, especially when regions overlap.
+    The HAVE_MEMMOVE make symbol was removed from Makefile.config.
+    Thanks to GitHub user @skeeto for reporting this problem.
+
+
+The following are the changes from calc version 2.15.1.1 to 2.15.1.1:
+
+    Change Makefile.config to, if not using not HomeBrew, then try to
+    detect macports and/or using /opt/local/{lib,include}.
+
+    Put full date range (1989-2025) of calc source into version.h.
+
+
 The following are the changes from calc version 2.15.0.7 to 2.15.1.0:
 
     Converted all ASCII tabs to ASCII spaces using a 8 character
@@ -8,8 +62,6 @@
     Fixed trailblank.  It was pruning . in its find search.
     Added check for ASCII tabs is non-Makefiles.
 
-    This version will form the basis for the calc v2 to calc v3 fork.
-
 
 The following are the changes from calc version 2.15.0.6 to 2.15.0.7:
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/calc-2.15.1.0/Makefile new/calc-2.16.0.0/Makefile
--- old/calc-2.15.1.0/Makefile  2024-07-12 06:58:22.000000000 +0200
+++ new/calc-2.16.0.0/Makefile  2025-08-15 03:32:50.000000000 +0200
@@ -2,7 +2,7 @@
 #
 # calc - arbitrary precision calculator
 #
-# Copyright (C) 1999-2018,2021-2023  Landon Curt Noll
+# Copyright (C) 1999-2018,2021-2025  Landon Curt Noll
 #
 # Suggestion: Read the HOWTO.INSTALL file.
 #
@@ -173,7 +173,7 @@
 BUILD_H_SRC= align32.h args.h charbit.h conf.h endian_calc.h errsym.h 
fposval.h \
        have_arc4random.h have_ban_pragma.h have_const.h have_environ.h \
        have_fgetsetpos.h have_fpos_pos.h have_getpgid.h have_getprid.h \
-       have_getsid.h have_gettime.h have_inttypes.h have_limits.h have_memmv.h 
\
+       have_getsid.h have_gettime.h have_inttypes.h have_limits.h \
        have_newstr.h have_offscl.h have_posscl.h have_rusage.h have_statfs.h \
        have_stdbool.h have_stdint.h have_stdlib.h have_strdup.h have_string.h \
        have_strlcat.h have_strlcpy.h have_sys_mount.h have_sys_param.h \
@@ -191,7 +191,7 @@
 UTIL_C_SRC= align32.c charbit.c chk_c.c endian.c fposval.c have_arc4random.c \
        have_ban_pragma.c have_const.c have_environ.c have_fgetsetpos.c \
        have_fpos_pos.c have_getpgid.c have_getprid.c have_getsid.c \
-       have_gettime.c have_memmv.c have_newstr.c have_offscl.c have_posscl.c \
+       have_gettime.c have_newstr.c have_offscl.c have_posscl.c \
        have_rusage.c have_statfs.c have_stdvs.c have_strdup.c have_strlcat.c \
        have_strlcpy.c have_uid_t.c have_unused.c have_ustat.c have_varvs.c \
        longbits.c
@@ -207,7 +207,7 @@
 #
 UTIL_OBJS= endian.o longbits.o have_newstr.o have_uid_t.o \
        have_const.o fposval.o have_fgetsetpos.o have_fpos_pos.o \
-       try_strarg.o have_stdvs.o have_varvs.o have_posscl.o have_memmv.o \
+       try_strarg.o have_stdvs.o have_varvs.o have_posscl.o \
        have_ustat.o have_getsid.o have_getpgid.o have_environ.o \
        have_gettime.o have_getprid.o ver_calc.o have_rusage.o have_strdup.o \
        have_unused.o have_ban_pragma.o have_strlcpy.o have_strlcat.o \
@@ -216,7 +216,7 @@
 # these temp files may be created (and removed) during the build of BUILD_C_SRC
 #
 UTIL_TMP= ll_tmp fpos_tmp fposval_tmp const_tmp uid_tmp newstr_tmp vs_tmp \
-       memmv_tmp offscl_tmp posscl_tmp newstr_tmp \
+       offscl_tmp posscl_tmp newstr_tmp \
        getsid_tmp gettime_tmp getprid_tmp rusage_tmp strdup_tmp
 
 # these utility executables may be created in the process of
@@ -1234,7 +1234,7 @@
 
 fposval.h: fposval.c have_fgetsetpos.h have_fpos_pos.h have_offscl.h 
have_posscl.h \
           endian_calc.h banned.h have_ban_pragma.h fposval.h.def alloc.h \
-          have_newstr.h have_memmv.h have_string.h have_const.h have_string.h \
+          have_newstr.h have_string.h have_const.h have_string.h \
           have_unused.h have_stdbool.h ${MK_SET}
        ${Q} ${RM} -f fposval_tmp $@
        ${H} echo 'forming $@'
@@ -1622,46 +1622,6 @@
            ${TRUE}; \
        fi
 
-have_memmv.h: have_memmv.c banned.h have_ban_pragma.h have_string.h ${MK_SET}
-       ${Q} ${RM} -f have_memmv have_memmv.o memmv_tmp $@
-       ${H} echo 'forming $@'
-       ${Q} echo '/*' > $@
-       ${Q} echo ' * DO NOT EDIT -- generated by the Makefile rule $@' >> $@
-       ${Q} echo ' */' >> $@
-       ${Q} echo '' >> $@
-       ${Q} echo '' >> $@
-       ${Q} echo '#if !defined(CALC_HAVE_MEMMV_H)' >> $@
-       ${Q} echo '#define CALC_HAVE_MEMMV_H' >> $@
-       ${Q} echo '' >> $@
-       ${Q} echo '' >> $@
-       ${Q} echo '/* do we have or want memmove()? */' >> $@
-       ${Q} ${RM} -f have_memmv.o have_memmv
-       -${Q} ${LCC} ${ICFLAGS} ${HAVE_MEMMOVE} have_memmv.c -c ${S} \
-               || ${TRUE}
-       -${Q} ${LCC} ${ILDFLAGS} have_memmv.o -o have_memmv${EXT} ${S} \
-               || ${TRUE}
-       -${Q} ./have_memmv${EXT} > memmv_tmp ${E} \
-               || ${TRUE}
-       -${Q} if [ -s memmv_tmp ]; then \
-           ${CAT} memmv_tmp >> $@; \
-       else \
-           echo '#undef HAVE_MEMMOVE /* no */' >> $@; \
-       fi
-       ${Q} echo '' >> $@
-       ${Q} echo '' >> $@
-       ${Q} echo '#endif /* !CALC_HAVE_MEMMV_H */' >> $@
-       ${Q} ${RM} -f have_memmv have_memmv.o memmv_tmp
-       ${H} echo '$@ formed'
-       -@if [ -z "${Q}" ]; then \
-           echo ''; \
-           echo '=-=-= start of $@ =-=-='; \
-           ${CAT} $@; \
-           echo '=-=-= end of $@ =-=-='; \
-           echo ''; \
-       else \
-           ${TRUE}; \
-       fi
-
 have_ustat.h: have_ustat.c banned.h have_ban_pragma.h ${MK_SET}
        ${Q} ${RM} -f ustat_tmp $@
        ${H} echo 'forming $@'
@@ -2207,7 +2167,7 @@
        fi
 
 errcode${EXT}: errtbl.c attribute.h bool.h errtbl.h have_const.h 
have_stdbool.h have_newstr.h \
-              have_memmv.h endian_calc.h longbits.h ${MK_SET}
+              endian_calc.h longbits.h ${MK_SET}
        ${RM} -f $@
        ${LCC} ${ICFLAGS} ${ILDFLAGS} -DERRCODE_SRC errtbl.c -o $@
 
@@ -2650,7 +2610,7 @@
        @echo ${VERSION}
 
 ver_calc${EXT}: version.c strl.c have_string.h have_const.h have_newstr.h \
-       have_strlcpy.h have_memmv.h have_strlcat.h endian_calc.h longbits.h \
+       have_strlcpy.h have_strlcat.h endian_calc.h longbits.h \
        have_unused.h charbit.h have_stdbool.h
        ${RM} -f $@
        ${LCC} ${ICFLAGS} -DCALC_VER ${ILDFLAGS} version.c strl.c -o $@
@@ -2922,7 +2882,6 @@
        @echo 'HAVE_GETTIME=${HAVE_GETTIME}'; echo ''
        @echo 'HAVE_INTTYPES_H=${HAVE_INTTYPES_H}'; echo ''
        @echo 'HAVE_LIMITS_H=${HAVE_LIMITS_H}'; echo ''
-       @echo 'HAVE_MEMMOVE=${HAVE_MEMMOVE}'; echo ''
        @echo 'HAVE_NEWSTR=${HAVE_NEWSTR}'; echo ''
        @echo 'HAVE_OFFSCL=${HAVE_OFFSCL}'; echo ''
        @echo 'HAVE_POSSCL=${HAVE_POSSCL}'; echo ''
@@ -3248,7 +3207,7 @@
        ${Q}echo '=-=-=-=-=-= end of ${MAKE} chk =-=-=-=-=-='
        ${Q}echo
        @${Q}if ! ./chk_tree >/dev/null 2>&1; then \
-           echo almost satifactory except for chk_tree; \
+           echo almost satisfactory except for chk_tree; \
        else \
            echo All is OK; \
        fi
@@ -4082,7 +4041,6 @@
 addop.o: have_ban_pragma.h
 addop.o: have_const.h
 addop.o: have_limits.h
-addop.o: have_memmv.h
 addop.o: have_newstr.h
 addop.o: have_stdbool.h
 addop.o: have_stdlib.h
@@ -4124,7 +4082,6 @@
 assocfunc.o: have_ban_pragma.h
 assocfunc.o: have_const.h
 assocfunc.o: have_limits.h
-assocfunc.o: have_memmv.h
 assocfunc.o: have_newstr.h
 assocfunc.o: have_stdbool.h
 assocfunc.o: have_stdlib.h
@@ -4159,7 +4116,6 @@
 blkcpy.o: have_const.h
 blkcpy.o: have_fgetsetpos.h
 blkcpy.o: have_limits.h
-blkcpy.o: have_memmv.h
 blkcpy.o: have_newstr.h
 blkcpy.o: have_stdbool.h
 blkcpy.o: have_stdlib.h
@@ -4190,7 +4146,6 @@
 block.o: have_ban_pragma.h
 block.o: have_const.h
 block.o: have_limits.h
-block.o: have_memmv.h
 block.o: have_newstr.h
 block.o: have_stdbool.h
 block.o: have_stdlib.h
@@ -4218,7 +4173,6 @@
 byteswap.o: have_ban_pragma.h
 byteswap.o: have_const.h
 byteswap.o: have_limits.h
-byteswap.o: have_memmv.h
 byteswap.o: have_newstr.h
 byteswap.o: have_stdbool.h
 byteswap.o: have_stdlib.h
@@ -4250,7 +4204,6 @@
 calc.o: have_ban_pragma.h
 calc.o: have_const.h
 calc.o: have_limits.h
-calc.o: have_memmv.h
 calc.o: have_newstr.h
 calc.o: have_stdbool.h
 calc.o: have_stdlib.h
@@ -4309,7 +4262,6 @@
 codegen.o: have_ban_pragma.h
 codegen.o: have_const.h
 codegen.o: have_limits.h
-codegen.o: have_memmv.h
 codegen.o: have_newstr.h
 codegen.o: have_stdbool.h
 codegen.o: have_stdlib.h
@@ -4347,7 +4299,6 @@
 comfunc.o: have_ban_pragma.h
 comfunc.o: have_const.h
 comfunc.o: have_limits.h
-comfunc.o: have_memmv.h
 comfunc.o: have_newstr.h
 comfunc.o: have_stdbool.h
 comfunc.o: have_stdlib.h
@@ -4372,7 +4323,6 @@
 commath.o: have_ban_pragma.h
 commath.o: have_const.h
 commath.o: have_limits.h
-commath.o: have_memmv.h
 commath.o: have_newstr.h
 commath.o: have_stdbool.h
 commath.o: have_stdlib.h
@@ -4401,7 +4351,6 @@
 config.o: have_ban_pragma.h
 config.o: have_const.h
 config.o: have_limits.h
-config.o: have_memmv.h
 config.o: have_newstr.h
 config.o: have_stdbool.h
 config.o: have_stdlib.h
@@ -4440,7 +4389,6 @@
 const.o: have_ban_pragma.h
 const.o: have_const.h
 const.o: have_limits.h
-const.o: have_memmv.h
 const.o: have_newstr.h
 const.o: have_stdbool.h
 const.o: have_stdlib.h
@@ -4473,7 +4421,6 @@
 custom.o: have_ban_pragma.h
 custom.o: have_const.h
 custom.o: have_limits.h
-custom.o: have_memmv.h
 custom.o: have_newstr.h
 custom.o: have_stdbool.h
 custom.o: have_stdlib.h
@@ -4509,7 +4456,6 @@
 errtbl.o: hash.h
 errtbl.o: have_const.h
 errtbl.o: have_limits.h
-errtbl.o: have_memmv.h
 errtbl.o: have_newstr.h
 errtbl.o: have_stdbool.h
 errtbl.o: have_stdlib.h
@@ -4546,7 +4492,6 @@
 file.o: have_fgetsetpos.h
 file.o: have_fpos_pos.h
 file.o: have_limits.h
-file.o: have_memmv.h
 file.o: have_newstr.h
 file.o: have_stdbool.h
 file.o: have_stdlib.h
@@ -4576,7 +4521,6 @@
 fposval.o: have_fgetsetpos.h
 fposval.o: have_fpos_pos.h
 fposval.o: have_limits.h
-fposval.o: have_memmv.h
 fposval.o: have_newstr.h
 fposval.o: have_offscl.h
 fposval.o: have_posscl.h
@@ -4610,7 +4554,6 @@
 func.o: have_const.h
 func.o: have_fgetsetpos.h
 func.o: have_limits.h
-func.o: have_memmv.h
 func.o: have_newstr.h
 func.o: have_rusage.h
 func.o: have_stdbool.h
@@ -4657,7 +4600,6 @@
 hash.o: have_ban_pragma.h
 hash.o: have_const.h
 hash.o: have_limits.h
-hash.o: have_memmv.h
 hash.o: have_newstr.h
 hash.o: have_stdbool.h
 hash.o: have_stdlib.h
@@ -4709,10 +4651,6 @@
 have_gettime.o: banned.h
 have_gettime.o: have_ban_pragma.h
 have_gettime.o: have_gettime.c
-have_memmv.o: banned.h
-have_memmv.o: have_ban_pragma.h
-have_memmv.o: have_memmv.c
-have_memmv.o: have_string.h
 have_newstr.o: banned.h
 have_newstr.o: have_ban_pragma.h
 have_newstr.o: have_newstr.c
@@ -4787,7 +4725,6 @@
 help.o: have_ban_pragma.h
 help.o: have_const.h
 help.o: have_limits.h
-help.o: have_memmv.h
 help.o: have_newstr.h
 help.o: have_stdbool.h
 help.o: have_stdlib.h
@@ -4821,7 +4758,6 @@
 hist.o: have_ban_pragma.h
 hist.o: have_const.h
 hist.o: have_limits.h
-hist.o: have_memmv.h
 hist.o: have_newstr.h
 hist.o: have_stdbool.h
 hist.o: have_stdlib.h
@@ -4862,7 +4798,6 @@
 input.o: have_ban_pragma.h
 input.o: have_const.h
 input.o: have_limits.h
-input.o: have_memmv.h
 input.o: have_newstr.h
 input.o: have_stdbool.h
 input.o: have_stdlib.h
@@ -4906,7 +4841,6 @@
 label.o: have_ban_pragma.h
 label.o: have_const.h
 label.o: have_limits.h
-label.o: have_memmv.h
 label.o: have_newstr.h
 label.o: have_stdbool.h
 label.o: have_stdlib.h
@@ -4944,7 +4878,6 @@
 lib_calc.o: have_ban_pragma.h
 lib_calc.o: have_const.h
 lib_calc.o: have_limits.h
-lib_calc.o: have_memmv.h
 lib_calc.o: have_newstr.h
 lib_calc.o: have_stdbool.h
 lib_calc.o: have_stdlib.h
@@ -4982,7 +4915,6 @@
 lib_util.o: have_ban_pragma.h
 lib_util.o: have_const.h
 lib_util.o: have_limits.h
-lib_util.o: have_memmv.h
 lib_util.o: have_newstr.h
 lib_util.o: have_stdbool.h
 lib_util.o: have_stdlib.h
@@ -5009,7 +4941,6 @@
 listfunc.o: have_ban_pragma.h
 listfunc.o: have_const.h
 listfunc.o: have_limits.h
-listfunc.o: have_memmv.h
 listfunc.o: have_newstr.h
 listfunc.o: have_stdbool.h
 listfunc.o: have_stdlib.h
@@ -5048,7 +4979,6 @@
 matfunc.o: have_ban_pragma.h
 matfunc.o: have_const.h
 matfunc.o: have_limits.h
-matfunc.o: have_memmv.h
 matfunc.o: have_newstr.h
 matfunc.o: have_stdbool.h
 matfunc.o: have_stdlib.h
@@ -5083,7 +5013,6 @@
 math_error.o: have_ban_pragma.h
 math_error.o: have_const.h
 math_error.o: have_limits.h
-math_error.o: have_memmv.h
 math_error.o: have_newstr.h
 math_error.o: have_stdbool.h
 math_error.o: have_stdlib.h
@@ -5117,7 +5046,6 @@
 obj.o: have_ban_pragma.h
 obj.o: have_const.h
 obj.o: have_limits.h
-obj.o: have_memmv.h
 obj.o: have_newstr.h
 obj.o: have_stdbool.h
 obj.o: have_stdlib.h
@@ -5159,7 +5087,6 @@
 opcodes.o: have_const.h
 opcodes.o: have_fgetsetpos.h
 opcodes.o: have_limits.h
-opcodes.o: have_memmv.h
 opcodes.o: have_newstr.h
 opcodes.o: have_stdbool.h
 opcodes.o: have_stdlib.h
@@ -5191,7 +5118,6 @@
 pix.o: have_ban_pragma.h
 pix.o: have_const.h
 pix.o: have_limits.h
-pix.o: have_memmv.h
 pix.o: have_newstr.h
 pix.o: have_stdbool.h
 pix.o: have_stdlib.h
@@ -5219,7 +5145,6 @@
 poly.o: have_ban_pragma.h
 poly.o: have_const.h
 poly.o: have_limits.h
-poly.o: have_memmv.h
 poly.o: have_newstr.h
 poly.o: have_stdbool.h
 poly.o: have_stdlib.h
@@ -5243,7 +5168,6 @@
 prime.o: have_ban_pragma.h
 prime.o: have_const.h
 prime.o: have_limits.h
-prime.o: have_memmv.h
 prime.o: have_newstr.h
 prime.o: have_stdbool.h
 prime.o: have_stdlib.h
@@ -5269,7 +5193,6 @@
 qfunc.o: have_ban_pragma.h
 qfunc.o: have_const.h
 qfunc.o: have_limits.h
-qfunc.o: have_memmv.h
 qfunc.o: have_newstr.h
 qfunc.o: have_stdbool.h
 qfunc.o: have_stdlib.h
@@ -5296,7 +5219,6 @@
 qio.o: have_ban_pragma.h
 qio.o: have_const.h
 qio.o: have_limits.h
-qio.o: have_memmv.h
 qio.o: have_newstr.h
 qio.o: have_stdbool.h
 qio.o: have_stdlib.h
@@ -5322,7 +5244,6 @@
 qmath.o: have_ban_pragma.h
 qmath.o: have_const.h
 qmath.o: have_limits.h
-qmath.o: have_memmv.h
 qmath.o: have_newstr.h
 qmath.o: have_stdbool.h
 qmath.o: have_stdlib.h
@@ -5347,7 +5268,6 @@
 qmod.o: have_ban_pragma.h
 qmod.o: have_const.h
 qmod.o: have_limits.h
-qmod.o: have_memmv.h
 qmod.o: have_newstr.h
 qmod.o: have_stdbool.h
 qmod.o: have_stdlib.h
@@ -5372,7 +5292,6 @@
 qtrans.o: have_ban_pragma.h
 qtrans.o: have_const.h
 qtrans.o: have_limits.h
-qtrans.o: have_memmv.h
 qtrans.o: have_newstr.h
 qtrans.o: have_stdbool.h
 qtrans.o: have_stdlib.h
@@ -5400,7 +5319,6 @@
 quickhash.o: have_ban_pragma.h
 quickhash.o: have_const.h
 quickhash.o: have_limits.h
-quickhash.o: have_memmv.h
 quickhash.o: have_newstr.h
 quickhash.o: have_stdbool.h
 quickhash.o: have_stdlib.h
@@ -5434,7 +5352,6 @@
 sample_many.o: have_ban_pragma.h
 sample_many.o: have_const.h
 sample_many.o: have_limits.h
-sample_many.o: have_memmv.h
 sample_many.o: have_newstr.h
 sample_many.o: have_stdbool.h
 sample_many.o: have_stdlib.h
@@ -5468,7 +5385,6 @@
 sample_rand.o: have_ban_pragma.h
 sample_rand.o: have_const.h
 sample_rand.o: have_limits.h
-sample_rand.o: have_memmv.h
 sample_rand.o: have_newstr.h
 sample_rand.o: have_stdbool.h
 sample_rand.o: have_stdlib.h
@@ -5500,7 +5416,6 @@
 seed.o: have_getsid.h
 seed.o: have_gettime.h
 seed.o: have_limits.h
-seed.o: have_memmv.h
 seed.o: have_newstr.h
 seed.o: have_rusage.h
 seed.o: have_statfs.h
@@ -5538,7 +5453,6 @@
 sha1.o: have_ban_pragma.h
 sha1.o: have_const.h
 sha1.o: have_limits.h
-sha1.o: have_memmv.h
 sha1.o: have_newstr.h
 sha1.o: have_stdbool.h
 sha1.o: have_stdlib.h
@@ -5569,7 +5483,6 @@
 size.o: have_ban_pragma.h
 size.o: have_const.h
 size.o: have_limits.h
-size.o: have_memmv.h
 size.o: have_newstr.h
 size.o: have_stdbool.h
 size.o: have_stdlib.h
@@ -5603,7 +5516,6 @@
 str.o: have_ban_pragma.h
 str.o: have_const.h
 str.o: have_limits.h
-str.o: have_memmv.h
 str.o: have_newstr.h
 str.o: have_stdbool.h
 str.o: have_stdlib.h
@@ -5625,7 +5537,6 @@
 strl.o: decl.h
 strl.o: have_ban_pragma.h
 strl.o: have_const.h
-strl.o: have_memmv.h
 strl.o: have_newstr.h
 strl.o: have_string.h
 strl.o: have_strlcat.h
@@ -5651,7 +5562,6 @@
 symbol.o: have_ban_pragma.h
 symbol.o: have_const.h
 symbol.o: have_limits.h
-symbol.o: have_memmv.h
 symbol.o: have_newstr.h
 symbol.o: have_stdbool.h
 symbol.o: have_stdlib.h
@@ -5688,7 +5598,6 @@
 token.o: have_ban_pragma.h
 token.o: have_const.h
 token.o: have_limits.h
-token.o: have_memmv.h
 token.o: have_newstr.h
 token.o: have_stdbool.h
 token.o: have_stdlib.h
@@ -5725,7 +5634,6 @@
 value.o: have_const.h
 value.o: have_fgetsetpos.h
 value.o: have_limits.h
-value.o: have_memmv.h
 value.o: have_newstr.h
 value.o: have_stdbool.h
 value.o: have_stdlib.h
@@ -5762,7 +5670,6 @@
 version.o: have_ban_pragma.h
 version.o: have_const.h
 version.o: have_limits.h
-version.o: have_memmv.h
 version.o: have_newstr.h
 version.o: have_stdbool.h
 version.o: have_stdlib.h
@@ -5793,7 +5700,6 @@
 zfunc.o: have_ban_pragma.h
 zfunc.o: have_const.h
 zfunc.o: have_limits.h
-zfunc.o: have_memmv.h
 zfunc.o: have_newstr.h
 zfunc.o: have_stdbool.h
 zfunc.o: have_stdlib.h
@@ -5817,7 +5723,6 @@
 zio.o: have_ban_pragma.h
 zio.o: have_const.h
 zio.o: have_limits.h
-zio.o: have_memmv.h
 zio.o: have_newstr.h
 zio.o: have_stdbool.h
 zio.o: have_stdlib.h
@@ -5842,7 +5747,6 @@
 zmath.o: have_const.h
 zmath.o: have_inttypes.h
 zmath.o: have_limits.h
-zmath.o: have_memmv.h
 zmath.o: have_newstr.h
 zmath.o: have_stdbool.h
 zmath.o: have_stdint.h
@@ -5868,7 +5772,6 @@
 zmod.o: have_ban_pragma.h
 zmod.o: have_const.h
 zmod.o: have_limits.h
-zmod.o: have_memmv.h
 zmod.o: have_newstr.h
 zmod.o: have_stdbool.h
 zmod.o: have_stdlib.h
@@ -5893,7 +5796,6 @@
 zmul.o: have_ban_pragma.h
 zmul.o: have_const.h
 zmul.o: have_limits.h
-zmul.o: have_memmv.h
 zmul.o: have_newstr.h
 zmul.o: have_stdbool.h
 zmul.o: have_stdlib.h
@@ -5921,7 +5823,6 @@
 zprime.o: have_ban_pragma.h
 zprime.o: have_const.h
 zprime.o: have_limits.h
-zprime.o: have_memmv.h
 zprime.o: have_newstr.h
 zprime.o: have_stdbool.h
 zprime.o: have_stdlib.h
@@ -5955,7 +5856,6 @@
 zrand.o: have_ban_pragma.h
 zrand.o: have_const.h
 zrand.o: have_limits.h
-zrand.o: have_memmv.h
 zrand.o: have_newstr.h
 zrand.o: have_stdbool.h
 zrand.o: have_stdlib.h
@@ -5988,7 +5888,6 @@
 zrandom.o: have_ban_pragma.h
 zrandom.o: have_const.h
 zrandom.o: have_limits.h
-zrandom.o: have_memmv.h
 zrandom.o: have_newstr.h
 zrandom.o: have_stdbool.h
 zrandom.o: have_stdlib.h
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/calc-2.15.1.0/Makefile.config 
new/calc-2.16.0.0/Makefile.config
--- old/calc-2.15.1.0/Makefile.config   2024-07-12 07:55:31.000000000 +0200
+++ new/calc-2.16.0.0/Makefile.config   2025-08-15 03:36:56.000000000 +0200
@@ -2,7 +2,7 @@
 #
 # Makefile.config - Calc configuration and compile configuration values
 #
-# Copyright (C) 2023  Landon Curt Noll
+# Copyright (C) 2023,2025  Landon Curt Noll
 #
 # Suggestion: Read the HOWTO.INSTALL file.
 #
@@ -436,18 +436,6 @@
 HAVE_NEWSTR=
 #HAVE_NEWSTR= -DHAVE_NO_NEWSTR
 
-# Determine if we have memmove()
-#
-# If HAVE_MEMMOVE is empty, this Makefile will run the have_memmv program
-# to determine if memmove() is supported.  If HAVE_MEMMOVE is set to
-# -DHAVE_NO_MEMMOVE, then calc will use internal functions to simulate
-# the memory move function that does correct overlapping memory moves.
-#
-# If in doubt, leave HAVE_MEMMOVE empty and this Makefile will figure it out.
-#
-HAVE_MEMMOVE=
-#HAVE_MEMMOVE= -DHAVE_NO_MEMMOVE
-
 # Determine if we have ustat()
 #
 # If HAVE_USTAT is empty, this Makefile will run the have_ustat program
@@ -1112,6 +1100,9 @@
 #READLINE_LIB= -L${PREFIX}/lib -lreadline
 #READLINE_EXTRAS= -lhistory -lncurses
 #
+#READLINE_LIB= -L/opt/local/lib -lreadline
+#READLINE_EXTRAS= -lhistory -lncurses
+#
 # For Apple OS X: install fink from http://fink.sourceforge.net
 #                and then do a 'fink install readline' and then use:
 #
@@ -1130,6 +1121,7 @@
 READLINE_INCLUDE=
 #READLINE_INCLUDE= -I/usr/gnu/include
 #READLINE_INCLUDE= -I${PREFIX}/include
+#READLINE_INCLUDE= -I/opt/local/include
 
 # Handle the case where macOS is being used with HomeBrew
 # # and using the readline, history, and ncurses libraries.
@@ -1137,6 +1129,16 @@
 ifneq ($(HOMEBREW_PREFIX),)
 READLINE_LIB:= -L${HOMEBREW_PREFIX}/opt/readline/lib -lreadline
 READLINE_INCLUDE:= -I${HOMEBREW_PREFIX}/opt/readline/include
+
+# If not HomeBrew, then try to detect macports and/or using 
/opt/local/{lib,include}
+#
+else   # perhaps macports and/or using /opt/local/{lib,include} ?
+ifneq ($(wildcard /opt/local/lib/*),)
+READLINE_LIB:= -L/opt/local/lib -lreadline
+endif
+ifneq ($(wildcard /opt/local/incliude/*),)
+READLINE_INCLUDE:= -I/opt/local/include
+endif
 endif  # ($(HOMEBREW_PREFIX),)
 
 # If $PAGER is not set, use this program to display a help file
@@ -1243,11 +1245,11 @@
 
 # The calc version in the form of x.y.z.w
 #
-VERSION= 2.15.1.0
+VERSION= 2.16.0.0
 
 # The calc major version in the form of x.y.z
 #
-VER= 2.15.1
+VER= 2.16.0
 
 # Names of shared libraries with versions
 #
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/calc-2.15.1.0/README.md new/calc-2.16.0.0/README.md
--- old/calc-2.15.1.0/README.md 2024-07-12 06:56:33.000000000 +0200
+++ new/calc-2.16.0.0/README.md 2025-04-28 05:32:26.000000000 +0200
@@ -8,7 +8,7 @@
 on RHEL:    sudo dnf install calc
 on Ubuntu:  sudo apt install calc
 via Termux: apt install calc
-via src:    sudo make clobber all chk instsll
+via src:    sudo make clobber all chk install
 ```
 
 ## TL;DR Run calc
@@ -283,3 +283,8 @@
 
 It contains information about differences between C and calc
 that may surprise C programmers.
+
+
+# Reporting Security Issues
+
+To report a security issue, please visit "[Reporting Security 
Issues](https://github.com/lcn2/calc/security/policy)".
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/calc-2.15.1.0/alloc.h new/calc-2.16.0.0/alloc.h
--- old/calc-2.15.1.0/alloc.h   2024-07-12 06:56:29.000000000 +0200
+++ new/calc-2.16.0.0/alloc.h   2025-08-13 21:43:13.000000000 +0200
@@ -1,7 +1,7 @@
 /*
  * alloc - storage allocation and storage debug macros
  *
- * Copyright (C) 1999-2007,2014  David I. Bell
+ * Copyright (C) 1999-2007,2014,2025  David I. Bell
  *
  * Calc is open software; you can redistribute it and/or modify it under
  * the terms of the version 2.1 of the GNU Lesser General Public License
@@ -29,13 +29,15 @@
 
 
 #if defined(CALC_SRC)   /* if we are building from the calc source tree */
+# include "decl.h"
 # include "have_newstr.h"
 # include "have_string.h"
-# include "have_memmv.h"
+# include "have_const.h"
 #else
+# include <calc/decl.h>
 # include <calc/have_newstr.h>
 # include <calc/have_string.h>
-# include <calc/have_memmv.h>
+# include <calc/have_const.h>
 #endif
 
 #ifdef HAVE_STRING_H
@@ -75,15 +77,4 @@
 #define strchr(s, c) index(s, c)
 #endif /* HAVE_NEWSTR */
 
-#if !defined(HAVE_MEMMOVE)
-# undef MEMMOVE_SIZE_T
-#if defined(FORCE_STDC) || \
-   (defined(__STDC__) && __STDC__ != 0) || defined(__cplusplus)
-#  define MEMMOVE_SIZE_T size_t
-# else
-#  define MEMMOVE_SIZE_T long
-# endif
-E_FUNC void *memmove(void *s1, CONST void *s2, MEMMOVE_SIZE_T n);
-#endif
-
 #endif /* !INCLUDE_ALLOC_H */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/calc-2.15.1.0/blkcpy.c new/calc-2.16.0.0/blkcpy.c
--- old/calc-2.15.1.0/blkcpy.c  2024-07-12 06:56:29.000000000 +0200
+++ new/calc-2.16.0.0/blkcpy.c  2025-08-13 21:43:13.000000000 +0200
@@ -1,7 +1,7 @@
 /*
  * blkcpy - general values and related routines used by the calculator
  *
- * Copyright (C) 1999-2007,2021-2023  Landon Curt Noll and Ernest Bowen
+ * Copyright (C) 1999-2007,2021-2023,2025  Landon Curt Noll and Ernest Bowen
  *
  * Primary author:  Landon Curt Noll
  *
@@ -924,62 +924,6 @@
                 dblk->datalen = newlen;
         return 0;
 }
-#if !defined(HAVE_MEMMOVE)
-/*
- * memmove - simulate the memory move function that deals with overlap
- *
- * Copying between objects that overlap will take place correctly.
- *
- * given:
- *      s1      destination
- *      s2      source
- *      n       octet count
- *
- * returns:
- *      s1
- */
-void *
-memmove(void *s1, CONST void *s2, MEMMOVE_SIZE_T n)
-{
-        /*
-         * firewall
-         */
-        if (s1 == NULL || s2 == NULL) {
-                math_error("bogus memmove NULL ptr");
-                not_reached();
-        }
-        if (n <= 0) {
-                /* neg or 0 count does nothing */
-                return s1;
-        }
-        if ((char *)s1 == (char *)s2) {
-                /* copy to same location does nothing */
-                return s1;
-        }
-
-        /*
-         * determine if we need to deal with overlap copy
-         */
-        if ((char *)s1 > (char *)s2 && (char *)s1 < (char *)s2+n) {
-
-                /*
-                 * we have to copy backwards ... slowly
-                 */
-                while (n-- > 0) {
-                        ((char *)s1)[n] = ((char *)s2)[n];
-                }
-
-        } else {
-
-                /*
-                 * safe ... no overlap problems
-                 */
-                (void) memcpy(s1, s2, n);
-
-        }
-        return s1;
-}
-#endif
 
 
 /*
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/calc-2.15.1.0/cal/regress.cal 
new/calc-2.16.0.0/cal/regress.cal
--- old/calc-2.15.1.0/cal/regress.cal   2024-07-12 06:56:29.000000000 +0200
+++ new/calc-2.16.0.0/cal/regress.cal   2025-08-15 02:45:22.000000000 +0200
@@ -7916,7 +7916,7 @@
  */
 define test_ptr()
 {
-        local a, b, c, A, B, B1, B2, M, L, p, q, p0, q0;
+        local a, b, c, A, B, B1, B2, M, L, p, q, r, p0, q0;
 
         print '7500: Beginning test_ptr';
 
@@ -8042,22 +8042,21 @@
         p = &M[0], *p = 5;
         print                           '7587: p = &M[0], *p = 5;';
         vrfy(M[0] == 5,                 '7588: M[0] == 5');
-        *++p = 6;
-        print                           '7589: *++p = 6;';
-        vrfy(M[1] == 6,                 '7590: M[1] == 6');
-        q = p++;
-        print                           '7591: q = p++;';
+        q = &M[1], *q = 6;
+        print                           '7589: q = &M[1], *q = 6;';
+        vrfy(M[1] == 6,                 '7588: M[1] == 6');
+        vrfy(M[0] == 5,                 '7588: M[0] == 5');
         vrfy(q == &M[1],                '7592: q == &M[1]');
-        vrfy(p == &M[2],                '7593: p == &M[2]');
+        vrfy(p == &M[0],                '7593: p == &M[0]');
         quomod(17,5,*q,*p);
         print                           '7594: quomod(17,5,*p,*q);';
-        vrfy(M[1] == 3 && M[2] == 2,    '7595: M[1] == 3 && M[2] == 2');
+        vrfy(M[1] == 3 && M[0] == 2,    '7595: M[1] == 3 && M[0] == 2');
         swap(*p, *q);
         print                           '7596: swap(*p, *q);';
-        vrfy(M[1] == 2 && M[2] == 3,    '7597: M[1] == 2 && M[2] == 3');
+        vrfy(M[1] == 2 && M[0] == 3,    '7597: M[1] == 2 && M[0] == 3');
         A = *M = {7,8};
         print                           '7598: A = *M = {7,8};';
-        vrfy(M == (mat[4] = {5,2,3,4}), '7599: M == (mat[4] = {5,2,3,4})');
+        vrfy(M == (mat[4] = {3,2,3,4}), '7599: M == (mat[4] = {3,2,3,4})');
         vrfy(A == (mat[4] = {7,8,3,4}), '7600: A == (mat[4] = {7,8,3,4})');
 
         /* Values which point to themselves */
@@ -8069,46 +8068,64 @@
         print                           '7603: A = &B, B = &A;';
         vrfy(**A == A && ***A == B,     '7604: **A == A && ***A == B');
 
-        /* Testing functions that return pointers */
+        /* verify arithmetic value address operation restrictions */
 
-        M[3] = 7;
-        print                           '7605: M[3] = 7;';
-        vrfy(*g7500b(&M[1], 2) == 7,    '7606: *g7500b(&M[1], 2) == 7');
-
-        *g7500b(&M[1], 2) = 8;
-        print                           '7607: *g7500b(&M[1], 2) = 8;';
-        vrfy(M[3] == 8,                 '7608: M[3] == 8');
-        M[3] = list(9,10);
-        print                           '7609: M[3] = list(9,10);';
-        vrfy((*g7500b(&M[1], 2))[[1]] == 10,
-                                '7610: (*g7500b(&M[1], 2))[[1]] == 10');
+        M = mat[10] = {0,1,2,3,4,5,6,7,8,9};
+        print                           '7605: M = mat[10] = 
{0,1,2,3,4,5,6,7,8,9};';
+        /* NOTE: The next set of tests will trigger 10 errors by design */
+        ecnt += 10;
+        print                           '7606: ecnt += 10';
+        p = &M[3];
+        print                           '7607: p = &M[3]';
+        ++p;
+        print                           '7608: ++p';
+        vrfy(p == error("E_INVALID_ADDR_OP"),
+                                    '7609: p == error("E_INVALID_ADDR_OP")');
+        p = &M[4];
+        print                           '7610: p = &M[4]';
+        p++;
+        print                           '7611: p++';
+        vrfy(p == error("E_INVALID_ADDR_OP"),
+                                    '7612: p == error("E_INVALID_ADDR_OP")');
+        p = &M[5];
+        print                           '7613: p = &M[5]';
+        q = &M[8];
+        print                           '7614: q = &M[8]';
+        vrfy(q+5 == error("E_INVALID_ADDR_OP"),
+                                    '7615: q+5 == error("E_INVALID_ADDR_OP")');
+        vrfy(q-7 == error("E_INVALID_ADDR_OP"),
+                                    '7616: q-7 == error("E_INVALID_ADDR_OP")');
+        vrfy(p+q == error("E_INVALID_ADDR_OP"),
+                                    '7617: p+q == error("E_INVALID_ADDR_OP")');
+        r = p-q;
+        print                           '7618: r = p-q;';
 
         /* Testing number and string pointers */
 
         a = 24, b = 4 * 6, c = 4!;
-        print                           '7611: a = 24, b = 4 * 6, c= 4!;';
-        vrfy(isptr(&*a) == 4,           '7612: isptr(&*a) == 4');
-        vrfy(&*a == &24,                '7613: &*a == &24');
-        vrfy(&*a == &*b,                '7614: &*a == &*b');
-        vrfy(&*a != &*c,                '7615: &*a != &*c');
+        print                           '7619: a = 24, b = 4 * 6, c= 4!;';
+        vrfy(isptr(&*a) == 4,           '7620: isptr(&*a) == 4');
+        vrfy(&*a == &24,                '7621: &*a == &24');
+        vrfy(&*a == &*b,                '7622: &*a == &*b');
+        vrfy(&*a != &*c,                '7623: &*a != &*c');
 
         a = b = "abc", c = strcat("a", "bc");
-        print                   '7616: a = b = "abc", c = strcat("a", "bc");';
-        vrfy(isptr(&*a) == 3,           '7617: isptr(&*a) == 3');
-        vrfy(&*a == &"abc",             '7618: &*a == &"abc"');
-        vrfy(&*a == &*b,                '7619: &*a == &*b');
-        vrfy(&*a != &*c,                '7620: &*a != &*c');
+        print                   '7624: a = b = "abc", c = strcat("a", "bc");';
+        vrfy(isptr(&*a) == 3,           '7625: isptr(&*a) == 3');
+        vrfy(&*a == &"abc",             '7626: &*a == &"abc"');
+        vrfy(&*a == &*b,                '7627: &*a == &*b');
+        vrfy(&*a != &*c,                '7628: &*a != &*c');
         a = c;
-        print                           '7621: a = c;';
-        vrfy(&*a == &*c,                '7622: &*a == &*c');
+        print                           '7629: a = c;';
+        vrfy(&*a == &*c,                '7630: &*a == &*c');
 
         /* Verifying null-ness of freed numbers */
 
         c = 4!, p = &*c, free(c);
-        print                           '7623: c = 4!, p = &*c, free(c)';
-        vrfy(isnull(*p),                '7624: isnull(*p)');
+        print                           '7631: c = 4!, p = &*c, free(c)';
+        vrfy(isnull(*p),                '7632: isnull(*p)');
 
-        print '7625: Ending test_ptr';
+        print '7633: Ending test_ptr';
 }
 print '181: parsed test_ptr()';
 
@@ -9165,8 +9182,8 @@
 print '8902: about to run test8900(1,,8903)';
 testnum = test8900(1,,8903);
 print "8941: ecnt ==", ecnt;
-print '8942: ecnt = 214;'
-ecnt = 214;
+print '8942: ecnt = 224;'
+ecnt = 224;
 
 
 /*
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/calc-2.15.1.0/custom/Makefile 
new/calc-2.16.0.0/custom/Makefile
--- old/calc-2.15.1.0/custom/Makefile   2024-07-12 06:58:22.000000000 +0200
+++ new/calc-2.16.0.0/custom/Makefile   2025-08-13 21:43:13.000000000 +0200
@@ -2,7 +2,7 @@
 #
 # custom - makefile for calc custom routines
 #
-# Copyright (C) 1999-2006,2014,2017-2018,2021,2023  Landon Curt Noll
+# Copyright (C) 1999-2006,2014,2017-2018,2021,2023,2025  Landon Curt Noll
 #
 # Suggestion: Read the ../HOWTO.INSTALL file.
 #
@@ -728,7 +728,6 @@
 c_argv.o: ../have_ban_pragma.h
 c_argv.o: ../have_const.h
 c_argv.o: ../have_limits.h
-c_argv.o: ../have_memmv.h
 c_argv.o: ../have_newstr.h
 c_argv.o: ../have_stdbool.h
 c_argv.o: ../have_stdlib.h
@@ -761,7 +760,6 @@
 c_devnull.o: ../have_ban_pragma.h
 c_devnull.o: ../have_const.h
 c_devnull.o: ../have_limits.h
-c_devnull.o: ../have_memmv.h
 c_devnull.o: ../have_newstr.h
 c_devnull.o: ../have_stdbool.h
 c_devnull.o: ../have_stdlib.h
@@ -795,7 +793,6 @@
 c_help.o: ../have_ban_pragma.h
 c_help.o: ../have_const.h
 c_help.o: ../have_limits.h
-c_help.o: ../have_memmv.h
 c_help.o: ../have_newstr.h
 c_help.o: ../have_stdbool.h
 c_help.o: ../have_stdlib.h
@@ -829,7 +826,6 @@
 c_pmodm127.o: ../have_ban_pragma.h
 c_pmodm127.o: ../have_const.h
 c_pmodm127.o: ../have_limits.h
-c_pmodm127.o: ../have_memmv.h
 c_pmodm127.o: ../have_newstr.h
 c_pmodm127.o: ../have_stdbool.h
 c_pmodm127.o: ../have_stdlib.h
@@ -862,7 +858,6 @@
 c_pzasusb8.o: ../have_ban_pragma.h
 c_pzasusb8.o: ../have_const.h
 c_pzasusb8.o: ../have_limits.h
-c_pzasusb8.o: ../have_memmv.h
 c_pzasusb8.o: ../have_newstr.h
 c_pzasusb8.o: ../have_stdbool.h
 c_pzasusb8.o: ../have_stdlib.h
@@ -896,7 +891,6 @@
 c_register.o: ../have_ban_pragma.h
 c_register.o: ../have_const.h
 c_register.o: ../have_limits.h
-c_register.o: ../have_memmv.h
 c_register.o: ../have_newstr.h
 c_register.o: ../have_stdbool.h
 c_register.o: ../have_stdlib.h
@@ -932,7 +926,6 @@
 c_sysinfo.o: ../have_ban_pragma.h
 c_sysinfo.o: ../have_const.h
 c_sysinfo.o: ../have_limits.h
-c_sysinfo.o: ../have_memmv.h
 c_sysinfo.o: ../have_newstr.h
 c_sysinfo.o: ../have_stdbool.h
 c_sysinfo.o: ../have_stdlib.h
@@ -970,7 +963,6 @@
 custtbl.o: ../have_ban_pragma.h
 custtbl.o: ../have_const.h
 custtbl.o: ../have_limits.h
-custtbl.o: ../have_memmv.h
 custtbl.o: ../have_newstr.h
 custtbl.o: ../have_stdbool.h
 custtbl.o: ../have_stdlib.h
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/calc-2.15.1.0/errtbl.c new/calc-2.16.0.0/errtbl.c
--- old/calc-2.15.1.0/errtbl.c  2024-07-12 06:56:30.000000000 +0200
+++ new/calc-2.16.0.0/errtbl.c  2025-08-15 02:45:22.000000000 +0200
@@ -759,6 +759,8 @@
         { 10607,        "E_LOG_5",              "Cannot calculate log of 0" },
         { 10608,        "E_LOG2_4",             "Cannot calculate log base 2 
of 0" },
         { 10609,        "E_LOGN_6",             "Cannot calculate log base n 
of 0" },
+        { 10610,        "E_INVALID_DEREF",      "Dereferencing a non-variable" 
},
+        { 10611,        "E_INVALID_ADDR_OP",    "Invalid arithmetic address 
operation" },
         /* IMPORTANT NOTE: add new entries above here and be sure their errnum 
numeric value is consecutive! */
 
         /* The next NULL entry must be last */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/calc-2.15.1.0/fposval.c new/calc-2.16.0.0/fposval.c
--- old/calc-2.15.1.0/fposval.c 2024-07-12 06:56:30.000000000 +0200
+++ new/calc-2.16.0.0/fposval.c 2025-08-13 21:43:13.000000000 +0200
@@ -1,7 +1,7 @@
 /*
  * fposval - Determine information about the file position type
  *
- * Copyright (C) 1999,2021,2023  Landon Curt Noll
+ * Copyright (C) 1999,2021,2023,2025  Landon Curt Noll
  *
  * Calc is open software; you can redistribute it and/or modify it under
  * the terms of the version 2.1 of the GNU Lesser General Public License
@@ -71,7 +71,6 @@
 #include "have_fpos_pos.h"
 #include "alloc.h"
 #include "have_unused.h"
-#include "have_memmv.h"
 #include "zmath.h"
 
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/calc-2.15.1.0/have_memmv.c 
new/calc-2.16.0.0/have_memmv.c
--- old/calc-2.15.1.0/have_memmv.c      2024-07-12 06:56:30.000000000 +0200
+++ new/calc-2.16.0.0/have_memmv.c      1970-01-01 01:00:00.000000000 +0100
@@ -1,73 +0,0 @@
-/*
- * have_memmv - Determine if we have memmove()
- *
- * Copyright (C) 1999,2021  Landon Curt Noll
- *
- * Calc is open software; you can redistribute it and/or modify it under
- * the terms of the version 2.1 of the GNU Lesser General Public License
- * as published by the Free Software Foundation.
- *
- * Calc 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 Lesser General
- * Public License for more details.
- *
- * A copy of version 2.1 of the GNU Lesser General Public License is
- * distributed with calc under the filename COPYING-LGPL.  You should have
- * received a copy with calc; if not, write to Free Software Foundation, Inc.
- * 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
- *
- * Under source code control:   1997/04/16 02:02:34
- * File existed as early as:    1997
- *
- * chongo <was here> /\oo/\     http://www.isthe.com/chongo/
- * Share and enjoy!  :-)        http://www.isthe.com/chongo/tech/comp/calc/
- */
-
-/*
- * usage:
- *      have_memmv
- *
- * Not all systems with memcpy() have memmove() functions, so this may not
- * compile on your system.
- *
- * This prog outputs several defines:
- *
- *      HAVE_MEMMOVE
- *              defined ==> use memmove()
- *              undefined ==> use internal slow memmove() instead
- */
-
-#include <stdio.h>
-#include "have_string.h"
-#ifdef HAVE_STRING_H
-# include <string.h>
-#endif
-
-
-#include "banned.h"     /* include after system header <> includes */
-
-
-#define MOVELEN 3
-
-char src[] = "chongo was here";
-char dest[MOVELEN+1];
-
-int
-main(void)
-{
-#if defined(HAVE_NO_MEMMOVE)
-
-        printf("#undef HAVE_MEMMOVE /* no */\n");
-
-#else /* HAVE_NO_MEMMOVE */
-
-        (void) memmove(dest, src, MOVELEN);
-
-        printf("#define HAVE_MEMMOVE /* yes */\n");
-
-#endif /* HAVE_NO_MEMMOVE */
-
-        /* exit(0); */
-        return 0;
-}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/calc-2.15.1.0/help/address 
new/calc-2.16.0.0/help/address
--- old/calc-2.15.1.0/help/address      2024-07-12 06:56:30.000000000 +0200
+++ new/calc-2.16.0.0/help/address      2025-08-15 03:13:20.000000000 +0200
@@ -113,7 +113,7 @@
 
     (the case of f(0) is exceptional since 27 + 0 simply copies the 27
     rather than creating a new number value).  Here it is clearly more
-    efficient to use
+    efficient to use:
 
         ; A = B = C = f(2);
 
@@ -125,11 +125,74 @@
     and number-pointer respectively, and 0 otherwise.
 
     The output when addresses are printed consists of a description (o_ptr,
-    v_ptr, s_ptr, n_ptr) followed by : and the address printed in
-    %p format.
+    v_ptr, s_ptr, n_ptr) followed by : and the address printed in %p format.
 
-    Iteration of & is not permitted; &&X causes a "non-variable operand"
-    scan error.
+    Iteration of & is not permitted; &(&X) causes a "Addressing
+    non-addressable type" scan error.
+
+RESTRICTIONS ON VALUE ADDRESS ARITHMETIC
+    Most arithmetic operations on addresses of values are not permitted.
+    For example one may not perform arithmetic operations (like +, ++,
+    -, --, *, /, etc.) on an address of a value with a numeric value.
+
+    The reason why most arithmetic operations were removed from calc
+    because arithmetic on addresses of calc objects could easily cause
+    calc to crash.  Consider this horrific expression that was allowed
+    in calc prior to version 2.16.0.0:
+
+        ; *((&.)+1e9)           /* INVALID: for calc version >= 2.16.0.0 */
+
+    Prior to calc version 2.16.0.0, some arithmetic operations on
+    addresses of values were permitted.  Starting with calc version
+    2.16.0.0, arithmetic operations between an addresses and an integer
+    will return an error code:
+
+        ; ++p;                  /* INVALID: will be set to E_INVALID_ADDR_OP */
+        ; r = q - 2;            /* INVALID: will be set to E_INVALID_ADDR_OP */
+
+    Adding two value addresses is NOT permitted:
+
+        ; mat A[3];
+        ; p = &A[1];
+        ; q = &A[2];
+        ; s = p + q;            /* INVALID: will be set to E_INVALID_ADDR_OP */
+
+    Subtracting two value addresses is permitted, however there is NO
+    guarantee that the address of a value will remain consistent across
+    calc runs.  Addresses of values depend on the circumstances of when
+    the calc values were formed.  For example:
+
+        ; a = 3; pa = &a;
+        ; /* ... stuff happens ... */
+        ; b = 5; pb = &b;
+        ; t = pa - pb;          /* permitted: value depends on circumstances */
+
+    Subtracting value addresses of components with the same compound
+    object, such as a matrix, is permitted.  For example:
+
+        ; mat M[10] = {0,1,2,3,4,5,6,7,8,9};
+        ; i = 4; j = 5;
+        ; p = &M[i]; q = &M[j];
+        ; v = p - q;            /* permitted: value depends on circumstances */
+
+    Comparison between two value addresses is permitted, however the
+    same caveats apply as to the subtracting of addresses:
+
+        ; if (p < q) {
+        ;;    print "permitted: p is less than q";
+        ;; } else if (p == q) {
+        ;;    print "permitted: p is equal to q";
+        ;; } else {
+        ;;    print "permitted: p is greater than q";
+        ;; }
+
+    PLEASE NOTE:
+
+        The above restrictions and caveats apply to addresses of values.
+        Such restrictions and caveats to NOT apply to the addresses of
+        octets, NOR to the addresses within strings.  If isptr(x) == 2,
+        then x is value-pointer and the above mentioned restrictions
+        and caveats apply it.
 
 EXAMPLE
     Addresses for particular systems may differ from those displayed here.
@@ -160,7 +223,7 @@
 SEE ALSO
     dereference, isptr
 
-## Copyright (C) 1999-2006,2021  Landon Curt Noll
+## Copyright (C) 1999-2006,2021,2025  Landon Curt Noll
 ##
 ## Calc is open software; you can redistribute it and/or modify it under
 ## the terms of the version 2.1 of the GNU Lesser General Public License
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/calc-2.15.1.0/help/log2 new/calc-2.16.0.0/help/log2
--- old/calc-2.15.1.0/help/log2 2024-07-12 06:56:32.000000000 +0200
+++ new/calc-2.16.0.0/help/log2 2025-08-13 19:55:49.000000000 +0200
@@ -1,5 +1,5 @@
 NAME
-    log2 -  base 10 logarithm
+    log2 -  base 2 logarithm
 
 SYNOPSIS
     log2(x [,eps])
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/calc-2.15.1.0/opcodes.c new/calc-2.16.0.0/opcodes.c
--- old/calc-2.15.1.0/opcodes.c 2024-07-12 06:56:33.000000000 +0200
+++ new/calc-2.16.0.0/opcodes.c 2025-08-15 02:45:22.000000000 +0200
@@ -959,8 +959,8 @@
                 return;
         }
         if (stack->v_type != V_ADDR) {
-                math_error("Dereferencing a non-variable");
-                not_reached();
+                *stack = error_value(E_INVALID_DEREF);
+                return;
         }
         vp = vp->v_addr;
         switch (vp->v_type) {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/calc-2.15.1.0/value.c new/calc-2.16.0.0/value.c
--- old/calc-2.15.1.0/value.c   2024-07-12 06:56:33.000000000 +0200
+++ new/calc-2.16.0.0/value.c   2025-08-15 02:45:23.000000000 +0200
@@ -434,6 +434,8 @@
                         *vres = error_value(E_STRADD);
                 return;
         case TWOVAL(V_VPTR, V_NUM):
+#if defined(PERMIT_DANGEROUS_ADDRESS_ARITHMETIC)
+                /* NOTE: Defining PERMIT_DANGEROUS_ADDRESS_ARITHMETIC is NOT 
supported! */
                 q = v2->v_num;
                 if (qisfrac(q)) {
                         math_error("Adding non-integer to address");
@@ -442,6 +444,12 @@
                 i = qtoi(q);
                 vres->v_addr = v1->v_addr + i;
                 vres->v_type = V_VPTR;
+#else /* Disable arithmetic on addresses */
+                *vres = error_value(E_INVALID_ADDR_OP);
+#endif /* Disable arithmetic on addresses */
+                return;
+        case TWOVAL(V_VPTR, V_VPTR):
+                *vres = error_value(E_INVALID_ADDR_OP);
                 return;
         case TWOVAL(V_OPTR, V_NUM):
                 q = v2->v_num;
@@ -515,6 +523,8 @@
                         *vres = error_value(E_STRSUB);
                 return;
         case TWOVAL(V_VPTR, V_NUM):
+#if defined(PERMIT_DANGEROUS_ADDRESS_ARITHMETIC)
+                /* NOTE: Defining PERMIT_DANGEROUS_ADDRESS_ARITHMETIC is NOT 
supported! */
                 q = v2->v_num;
                 if (qisfrac(q)) {
                         math_error("Subtracting non-integer from address");
@@ -523,6 +533,9 @@
                 i = qtoi(q);
                 vres->v_addr = v1->v_addr - i;
                 vres->v_type = V_VPTR;
+#else /* Disable arithmetic on addresses */
+                *vres = error_value(E_INVALID_ADDR_OP);
+#endif /* Disable arithmetic on addresses */
                 return;
         case TWOVAL(V_OPTR, V_NUM):
                 q = v2->v_num;
@@ -1407,7 +1420,12 @@
                 vres->v_octet = vp->v_octet + 1;
                 break;
         case V_VPTR:
+#if defined(PERMIT_DANGEROUS_ADDRESS_ARITHMETIC)
+                /* NOTE: Defining PERMIT_DANGEROUS_ADDRESS_ARITHMETIC is NOT 
supported! */
                 vres->v_addr = vp->v_addr + 1;
+#else /* Disable arithmetic on addresses */
+                *vres = error_value(E_INVALID_ADDR_OP);
+#endif /* Disable arithmetic on addresses */
                 break;
         default:
                 if (vp->v_type > 0)
@@ -1443,7 +1461,12 @@
                 vres->v_octet = vp->v_octet - 1;
                 break;
         case V_VPTR:
+#if defined(PERMIT_DANGEROUS_ADDRESS_ARITHMETIC)
+                /* NOTE: Defining PERMIT_DANGEROUS_ADDRESS_ARITHMETIC is NOT 
supported! */
                 vres->v_addr = vp->v_addr - 1;
+#else /* Disable arithmetic on addresses */
+                *vres = error_value(E_INVALID_ADDR_OP);
+#endif /* Disable arithmetic on addresses */
                 break;
         default:
                 if (vp->v_type >= 0)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/calc-2.15.1.0/version.h new/calc-2.16.0.0/version.h
--- old/calc-2.15.1.0/version.h 2024-07-12 07:46:58.000000000 +0200
+++ new/calc-2.16.0.0/version.h 2025-08-15 03:30:52.000000000 +0200
@@ -1,7 +1,7 @@
 /*
  * version - determine the version of calc
  *
- * Copyright (C) 2023  David I. Bell and Landon Curt Noll
+ * Copyright (C) 1989-2025  David I. Bell and Landon Curt Noll
  *
  * Calc is open software; you can redistribute it and/or modify it under
  * the terms of the version 2.1 of the GNU Lesser General Public License
@@ -62,9 +62,22 @@
  *      bug fix and improvement updates will cause MINOR_PATCH to increment.
  */
 #define MAJOR_VER       2       /* level 1: major library version */
-#define MINOR_VER       15      /* level 2: minor library version */
-#define MAJOR_PATCH     1       /* level 3: major software version level */
+#define MINOR_VER       16      /* level 2: minor library version */
+#define MAJOR_PATCH     0       /* level 3: major software version level */
 #define MINOR_PATCH     0       /* level 4: minor software version level */
 
+/*
+ * Defining PERMIT_DANGEROUS_ADDRESS_ARITHMETIC is NOT supported!
+ *
+ * If someone were to be a foolish as to permit dangerous address arithmetic, 
then we
+ * negate the major version to further "disavow" such a calc compile.
+ */
+#if defined(PERMIT_DANGEROUS_ADDRESS_ARITHMETIC)
+#  undef TEMP_MAJOR_VER
+#  define TEMP_MAJOR_VER MAJOR_VER
+#  undef MAJOR_VER
+#  define MAJOR_VER (-TEMP_MAJOR_VER)
+#  undef TEMP_MAJOR_VER
+#endif
 
 #endif /* !INCLUDE_VERSION_H*/

Reply via email to