summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--NEWS4
-rw-r--r--config.c2
-rw-r--r--config.h.in3
-rwxr-xr-xconfigure4
-rw-r--r--configure.in4
-rw-r--r--debian/changelog7
-rw-r--r--floppyd.12
-rw-r--r--floppyd_installtest.12
-rw-r--r--floppyd_io.c2
-rw-r--r--mattrib.12
-rw-r--r--mbadblocks.12
-rw-r--r--mcat.12
-rw-r--r--mcd.12
-rw-r--r--mcopy.12
-rw-r--r--mdel.12
-rw-r--r--mdeltree.12
-rw-r--r--mdir.12
-rw-r--r--mdu.12
-rw-r--r--mformat.12
-rw-r--r--minfo.12
-rw-r--r--mkmanifest.12
-rw-r--r--mlabel.12
-rw-r--r--mmd.12
-rw-r--r--mmount.12
-rw-r--r--mmove.12
-rw-r--r--mpartition.12
-rw-r--r--mrd.12
-rw-r--r--mren.12
-rw-r--r--mshortname.12
-rw-r--r--mshowfat.12
-rw-r--r--mtools.14
-rw-r--r--mtools.54
-rw-r--r--mtools.h4
-rw-r--r--mtools.info6
-rw-r--r--mtools.spec5
-rw-r--r--mtools.tmpl.14
-rw-r--r--mtools.tmpl.54
-rw-r--r--mtoolstest.12
-rw-r--r--mtype.12
-rw-r--r--mzip.12
-rw-r--r--patchlevel.c6
-rw-r--r--strtonum.c4
-rw-r--r--version.texi6
43 files changed, 66 insertions, 59 deletions
diff --git a/NEWS b/NEWS
index d64bfa9..4f71285 100644
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,7 @@
+v4_0_39
+ - Rename strtoi to strosi (string to signed int). The strtoi
+ function on BSD does something else (returns an intmax, not
+ an int)
v4_0_38
- Make sure case byte is cleared when making the special
directory entries "." and ".."
diff --git a/config.c b/config.c
index 173eae0..2349552 100644
--- a/config.c
+++ b/config.c
@@ -266,7 +266,7 @@ static void get_env_conf(void)
errno = 0;
switch(global_switches[i].type) {
case T_INT:
- * ((int *)global_switches[i].address) = strtoi(s,0,0);
+ * ((int *)global_switches[i].address) = strtosi(s,0,0);
break;
case T_UINT:
* ((unsigned int *)global_switches[i].address) = strtoui(s,0,0);
diff --git a/config.h.in b/config.h.in
index 601d4f0..3541f17 100644
--- a/config.h.in
+++ b/config.h.in
@@ -243,9 +243,6 @@
/* Define to 1 if you have the `strspn' function. */
#undef HAVE_STRSPN
-/* Define to 1 if you have the `strtoi' function. */
-#undef HAVE_STRTOI
-
/* Define to 1 if you have the `strtol' function. */
#undef HAVE_STRTOL
diff --git a/configure b/configure
index 256f170..d62f27d 100755
--- a/configure
+++ b/configure
@@ -4970,7 +4970,7 @@ $as_echo "#define HAVE_STDBOOL_H 1" >>confdefs.h
fi
-for ac_header in getopt.h stdarg.h stdlib.h unistd.h linux/unistd.h \
+for ac_header in getopt.h stdarg.h stdlib.h inttypes.h unistd.h linux/unistd.h \
libc.h fcntl.h limits.h sys/file.h sys/ioctl.h sys/time.h strings.h string.h \
sys/param.h memory.h malloc.h io.h signal.h sys/signal.h utime.h sgtty.h \
sys/floppy.h mntent.h sys/sysmacros.h netinet/in.h netinet/tcp.h assert.h \
@@ -6004,7 +6004,7 @@ _ACEOF
for ac_func in strerror random srandom strchr strrchr lockf flock \
strcasecmp strncasecmp strnlen atexit on_exit getpass memmove \
-strdup strndup strcspn strspn strtoul strtol strtoll strtoi strtoui \
+strdup strndup strcspn strspn strtoul strtol strtoll strtoui \
memcpy strpbrk memset setenv seteuid setresuid setpgrp \
tcsetattr tcflush basename fchdir media_oldaliases \
snprintf setlocale toupper_l strncasecmp_l \
diff --git a/configure.in b/configure.in
index 72cf205..42a8711 100644
--- a/configure.in
+++ b/configure.in
@@ -105,7 +105,7 @@ dnl Checks for header files.
AC_HEADER_STDC
AC_HEADER_SYS_WAIT
AC_HEADER_STDBOOL
-AC_CHECK_HEADERS(getopt.h stdarg.h stdlib.h unistd.h linux/unistd.h \
+AC_CHECK_HEADERS(getopt.h stdarg.h stdlib.h inttypes.h unistd.h linux/unistd.h \
libc.h fcntl.h limits.h sys/file.h sys/ioctl.h sys/time.h strings.h string.h \
sys/param.h memory.h malloc.h io.h signal.h sys/signal.h utime.h sgtty.h \
sys/floppy.h mntent.h sys/sysmacros.h netinet/in.h netinet/tcp.h assert.h \
@@ -218,7 +218,7 @@ dnl Checks for library functions.
AC_TYPE_SIGNAL
AC_CHECK_FUNCS(strerror random srandom strchr strrchr lockf flock \
strcasecmp strncasecmp strnlen atexit on_exit getpass memmove \
-strdup strndup strcspn strspn strtoul strtol strtoll strtoi strtoui \
+strdup strndup strcspn strspn strtoul strtol strtoll strtoui \
memcpy strpbrk memset setenv seteuid setresuid setpgrp \
tcsetattr tcflush basename fchdir media_oldaliases \
snprintf setlocale toupper_l strncasecmp_l \
diff --git a/debian/changelog b/debian/changelog
index 7b9ad91..3201e30 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,10 @@
+mtools (4.0.39) stable; urgency=low
+
+ * Rename strtoi to strosi (string to signed int). The strtoi
+ function on BSD does something else (returns an intmax, not an
+ int)
+
+ -- Alain Knaff <alain@knaff.lu> Sun, 10 Apr 2022 19:19:40 +0200
mtools (4.0.38) stable; urgency=low
* Make sure case byte is cleared when making the special
diff --git a/floppyd.1 b/floppyd.1
index 2cb54ee..48ca9db 100644
--- a/floppyd.1
+++ b/floppyd.1
@@ -1,5 +1,5 @@
'\" t
-.TH floppyd 1 "03Mar22" mtools-4.0.38
+.TH floppyd 1 "10Apr22" mtools-4.0.39
.SH Name
floppyd - floppy daemon for remote access to floppy drive
'\" t
diff --git a/floppyd_installtest.1 b/floppyd_installtest.1
index 0e8e1cf..dc1fc7b 100644
--- a/floppyd_installtest.1
+++ b/floppyd_installtest.1
@@ -1,5 +1,5 @@
'\" t
-.TH floppyd_installtest 1 "03Mar22" mtools-4.0.38
+.TH floppyd_installtest 1 "10Apr22" mtools-4.0.39
.SH Name
floppyd_installtest - tests whether floppyd is installed and running
'\" t
diff --git a/floppyd_io.c b/floppyd_io.c
index d884f94..9d1b9d1 100644
--- a/floppyd_io.c
+++ b/floppyd_io.c
@@ -470,7 +470,7 @@ static int get_host_and_port_and_drive(const char* name, char** hostname,
p++;
*drive = 0;
if(*p >= '0' && *p <= '9')
- *drive = strtoi(p, &p, 0);
+ *drive = strtosi(p, &p, 0);
*display = strdup(newname);
diff --git a/mattrib.1 b/mattrib.1
index e73489f..c202c92 100644
--- a/mattrib.1
+++ b/mattrib.1
@@ -1,5 +1,5 @@
'\" t
-.TH mattrib 1 "03Mar22" mtools-4.0.38
+.TH mattrib 1 "10Apr22" mtools-4.0.39
.SH Name
mattrib - change MSDOS file attribute flags
'\" t
diff --git a/mbadblocks.1 b/mbadblocks.1
index 25e1197..0912650 100644
--- a/mbadblocks.1
+++ b/mbadblocks.1
@@ -1,5 +1,5 @@
'\" t
-.TH mbadblocks 1 "03Mar22" mtools-4.0.38
+.TH mbadblocks 1 "10Apr22" mtools-4.0.39
.SH Name
mbadblocks - tests a floppy disk, and marks the bad blocks in the FAT
'\" t
diff --git a/mcat.1 b/mcat.1
index 287431c..718f34f 100644
--- a/mcat.1
+++ b/mcat.1
@@ -1,5 +1,5 @@
'\" t
-.TH mcat 1 "03Mar22" mtools-4.0.38
+.TH mcat 1 "10Apr22" mtools-4.0.39
.SH Name
mcat - dump raw disk image
'\" t
diff --git a/mcd.1 b/mcd.1
index c84fcd1..f80cea9 100644
--- a/mcd.1
+++ b/mcd.1
@@ -1,5 +1,5 @@
'\" t
-.TH mcd 1 "03Mar22" mtools-4.0.38
+.TH mcd 1 "10Apr22" mtools-4.0.39
.SH Name
mcd - change MSDOS directory
'\" t
diff --git a/mcopy.1 b/mcopy.1
index 1320640..7861ec8 100644
--- a/mcopy.1
+++ b/mcopy.1
@@ -1,5 +1,5 @@
'\" t
-.TH mcopy 1 "03Mar22" mtools-4.0.38
+.TH mcopy 1 "10Apr22" mtools-4.0.39
.SH Name
mcopy - copy MSDOS files to/from Unix
'\" t
diff --git a/mdel.1 b/mdel.1
index bdea315..72d416f 100644
--- a/mdel.1
+++ b/mdel.1
@@ -1,5 +1,5 @@
'\" t
-.TH mdel 1 "03Mar22" mtools-4.0.38
+.TH mdel 1 "10Apr22" mtools-4.0.39
.SH Name
mdel - delete an MSDOS file
'\" t
diff --git a/mdeltree.1 b/mdeltree.1
index 5c511cc..f2c11cc 100644
--- a/mdeltree.1
+++ b/mdeltree.1
@@ -1,5 +1,5 @@
'\" t
-.TH mdeltree 1 "03Mar22" mtools-4.0.38
+.TH mdeltree 1 "10Apr22" mtools-4.0.39
.SH Name
mdeltree - recursively delete an MSDOS directory and its contents
'\" t
diff --git a/mdir.1 b/mdir.1
index e1e65a4..6852706 100644
--- a/mdir.1
+++ b/mdir.1
@@ -1,5 +1,5 @@
'\" t
-.TH mdir 1 "03Mar22" mtools-4.0.38
+.TH mdir 1 "10Apr22" mtools-4.0.39
.SH Name
mdir - display an MSDOS directory
'\" t
diff --git a/mdu.1 b/mdu.1
index 7798510..3701925 100644
--- a/mdu.1
+++ b/mdu.1
@@ -1,5 +1,5 @@
'\" t
-.TH mdu 1 "03Mar22" mtools-4.0.38
+.TH mdu 1 "10Apr22" mtools-4.0.39
.SH Name
mdu - display the amount of space occupied by an MSDOS directory
'\" t
diff --git a/mformat.1 b/mformat.1
index 25163fa..b0eed76 100644
--- a/mformat.1
+++ b/mformat.1
@@ -1,5 +1,5 @@
'\" t
-.TH mformat 1 "03Mar22" mtools-4.0.38
+.TH mformat 1 "10Apr22" mtools-4.0.39
.SH Name
mformat - add an MSDOS filesystem to a low-level formatted floppy disk
'\" t
diff --git a/minfo.1 b/minfo.1
index 7031341..a22b37a 100644
--- a/minfo.1
+++ b/minfo.1
@@ -1,5 +1,5 @@
'\" t
-.TH minfo 1 "03Mar22" mtools-4.0.38
+.TH minfo 1 "10Apr22" mtools-4.0.39
.SH Name
minfo - print the parameters of a MSDOS filesystem
'\" t
diff --git a/mkmanifest.1 b/mkmanifest.1
index 7231928..5a920b1 100644
--- a/mkmanifest.1
+++ b/mkmanifest.1
@@ -1,5 +1,5 @@
'\" t
-.TH mkmanifest 1 "03Mar22" mtools-4.0.38
+.TH mkmanifest 1 "10Apr22" mtools-4.0.39
.SH Name
mkmanifest - makes list of file names and their DOS 8+3 equivalent
'\" t
diff --git a/mlabel.1 b/mlabel.1
index 0f0caca..391a8b2 100644
--- a/mlabel.1
+++ b/mlabel.1
@@ -1,5 +1,5 @@
'\" t
-.TH mlabel 1 "03Mar22" mtools-4.0.38
+.TH mlabel 1 "10Apr22" mtools-4.0.39
.SH Name
mlabel - make an MSDOS volume label
'\" t
diff --git a/mmd.1 b/mmd.1
index 8602b48..4a4c1d0 100644
--- a/mmd.1
+++ b/mmd.1
@@ -1,5 +1,5 @@
'\" t
-.TH mmd 1 "03Mar22" mtools-4.0.38
+.TH mmd 1 "10Apr22" mtools-4.0.39
.SH Name
mmd - make an MSDOS subdirectory
'\" t
diff --git a/mmount.1 b/mmount.1
index a9549ea..199fd59 100644
--- a/mmount.1
+++ b/mmount.1
@@ -1,5 +1,5 @@
'\" t
-.TH mmount 1 "03Mar22" mtools-4.0.38
+.TH mmount 1 "10Apr22" mtools-4.0.39
.SH Name
mmount - mount an MSDOS disk
'\" t
diff --git a/mmove.1 b/mmove.1
index e43c586..bc6c8be 100644
--- a/mmove.1
+++ b/mmove.1
@@ -1,5 +1,5 @@
'\" t
-.TH mmove 1 "03Mar22" mtools-4.0.38
+.TH mmove 1 "10Apr22" mtools-4.0.39
.SH Name
mmove - move or rename an MSDOS file or subdirectory
'\" t
diff --git a/mpartition.1 b/mpartition.1
index 3ecc540..9a8cad9 100644
--- a/mpartition.1
+++ b/mpartition.1
@@ -1,5 +1,5 @@
'\" t
-.TH mpartition 1 "03Mar22" mtools-4.0.38
+.TH mpartition 1 "10Apr22" mtools-4.0.39
.SH Name
mpartition - partition an MSDOS hard disk
'\" t
diff --git a/mrd.1 b/mrd.1
index 6c40ec6..cfef8b2 100644
--- a/mrd.1
+++ b/mrd.1
@@ -1,5 +1,5 @@
'\" t
-.TH mrd 1 "03Mar22" mtools-4.0.38
+.TH mrd 1 "10Apr22" mtools-4.0.39
.SH Name
mrd - remove an MSDOS subdirectory
'\" t
diff --git a/mren.1 b/mren.1
index 1a8b3bb..e3242f0 100644
--- a/mren.1
+++ b/mren.1
@@ -1,5 +1,5 @@
'\" t
-.TH mren 1 "03Mar22" mtools-4.0.38
+.TH mren 1 "10Apr22" mtools-4.0.39
.SH Name
mren - rename an existing MSDOS file
'\" t
diff --git a/mshortname.1 b/mshortname.1
index 361f790..40b1f7e 100644
--- a/mshortname.1
+++ b/mshortname.1
@@ -1,5 +1,5 @@
'\" t
-.TH mshortname 1 "03Mar22" mtools-4.0.38
+.TH mshortname 1 "10Apr22" mtools-4.0.39
.SH Name
mshortname - shows short name of a file
'\" t
diff --git a/mshowfat.1 b/mshowfat.1
index cbe279c..5b43539 100644
--- a/mshowfat.1
+++ b/mshowfat.1
@@ -1,5 +1,5 @@
'\" t
-.TH mshowfat 1 "03Mar22" mtools-4.0.38
+.TH mshowfat 1 "10Apr22" mtools-4.0.39
.SH Name
mshowfat - shows FAT clusters allocated to file
'\" t
diff --git a/mtools.1 b/mtools.1
index c67b2ba..e492c1d 100644
--- a/mtools.1
+++ b/mtools.1
@@ -1,5 +1,5 @@
'\" t
-.TH mtools 1 "08Jan22" mtools-4.0.37
+.TH mtools 1 "03Mar22" mtools-4.0.38
.SH Name
mtools - utilities to access DOS disks in Unix.
'\" t
@@ -36,7 +36,7 @@ Mtools can be found at the following places (and their mirrors):
.nf
.ft 3
.in +0.3i
-http://ftp.gnu.org/gnu/mtools/mtools-4.0.37.tar.gz
+http://ftp.gnu.org/gnu/mtools/mtools-4.0.38.tar.gz
.fi
.in -0.3i
.ft R
diff --git a/mtools.5 b/mtools.5
index 6263006..c104c9e 100644
--- a/mtools.5
+++ b/mtools.5
@@ -1,5 +1,5 @@
'\" t
-.TH mtools 5 "08Jan22" MTOOLS MTOOLS
+.TH mtools 5 "03Mar22" MTOOLS MTOOLS
.SH Name
mtools.conf - mtools configuration files
'\" t
@@ -13,7 +13,7 @@ mtools.conf - mtools configuration files
.tr \(if`
.tr \(pd"
-.ds St Mtools\ 4.0.37
+.ds St Mtools\ 4.0.38
.PP
.SH Description
.PP
diff --git a/mtools.h b/mtools.h
index b3fd3c8..1636a64 100644
--- a/mtools.h
+++ b/mtools.h
@@ -188,9 +188,7 @@ off_t str_to_offset(char *str);
uint32_t parseSize(char *sizeStr);
unsigned int strtoui(const char *nptr, char **endptr, int base);
unsigned int atoui(const char *nptr);
-#ifndef HAVE_STRTOI
-int strtoi(const char *nptr, char **endptr, int base);
-#endif
+int strtosi(const char *nptr, char **endptr, int base);
unsigned long atoul(const char *nptr);
uint8_t strtou8(const char *nptr, char **endptr, int base);
uint8_t atou8(const char *str);
diff --git a/mtools.info b/mtools.info
index 22061c5..b3add54 100644
--- a/mtools.info
+++ b/mtools.info
@@ -1,6 +1,6 @@
This is mtools.info, produced by makeinfo version 6.7 from mtools.texi.
-This manual is for Mtools (version 4.0.38, March 2022), which is a
+This manual is for Mtools (version 4.0.39, April 2022), which is a
collection of tools to allow Unix systems to manipulate MS-DOS files.
Copyright (C) 2007, 2009 Free Software Foundation, Inc. Copyright
@@ -53,7 +53,7 @@ preliminary mounting or initialization (assuming the default
'/etc/mtools.conf' works on your machine). With mtools, one can change
floppies too without unmounting and mounting.
- This manual is for Mtools (version 4.0.38, March 2022), which is a
+ This manual is for Mtools (version 4.0.39, April 2022), which is a
collection of tools to allow Unix systems to manipulate MS-DOS files.
Copyright (C) 2007, 2009 Free Software Foundation, Inc. Copyright
@@ -87,7 +87,7 @@ File: mtools.info, Node: Location, Next: Common features, Prev: Top, Up: Top
*********************
Mtools can be found at the following places (and their mirrors):
- http://ftp.gnu.org/gnu/mtools/mtools-4.0.38.tar.gz
+ http://ftp.gnu.org/gnu/mtools/mtools-4.0.39.tar.gz
These patches are named 'mtools-'VERSION'-'DDMM'.taz', where version
stands for the base version, DD for the day and MM for the month. Due
diff --git a/mtools.spec b/mtools.spec
index c41ba3e..512d9a1 100644
--- a/mtools.spec
+++ b/mtools.spec
@@ -1,7 +1,7 @@
%define _binary_payload w9.gzdio
Name: mtools
Summary: mtools, read/write/list/format DOS disks under Unix
-Version: 4.0.38
+Version: 4.0.39
Release: 1
License: GPLv3+
Group: Utilities/System
@@ -133,6 +133,9 @@ if [ -f %{_bindir}/install-info ] ; then
fi
%changelog
+* Sun Apr 10 2022 Alain Knaff <alain@knaff.lu>
+- Rename strtoi to strosi (string to signed int). The strtoi function
+ on BSD does something else (returns an intmax, not an int)
* Thu Mar 03 2022 Alain Knaff <alain@knaff.lu>
- Make sure case byte is cleared when making the special
directory entries "." and ".."
diff --git a/mtools.tmpl.1 b/mtools.tmpl.1
index ce5f9c7..01e5bcc 100644
--- a/mtools.tmpl.1
+++ b/mtools.tmpl.1
@@ -1,5 +1,5 @@
'\" t
-.TH mtools 1 "03Mar22" mtools-4.0.38
+.TH mtools 1 "10Apr22" mtools-4.0.39
.SH Name
mtools - utilities to access DOS disks in Unix.
'\" t
@@ -36,7 +36,7 @@ Mtools can be found at the following places (and their mirrors):
.nf
.ft 3
.in +0.3i
-http://ftp.gnu.org/gnu/mtools/mtools-4.0.38.tar.gz
+http://ftp.gnu.org/gnu/mtools/mtools-4.0.39.tar.gz
.fi
.in -0.3i
.ft R
diff --git a/mtools.tmpl.5 b/mtools.tmpl.5
index df9e48a..32c4c7e 100644
--- a/mtools.tmpl.5
+++ b/mtools.tmpl.5
@@ -1,5 +1,5 @@
'\" t
-.TH mtools 5 "03Mar22" MTOOLS MTOOLS
+.TH mtools 5 "10Apr22" MTOOLS MTOOLS
.SH Name
mtools.conf - mtools configuration files
'\" t
@@ -13,7 +13,7 @@ mtools.conf - mtools configuration files
.tr \(if`
.tr \(pd"
-.ds St Mtools\ 4.0.38
+.ds St Mtools\ 4.0.39
.PP
.SH Description
.PP
diff --git a/mtoolstest.1 b/mtoolstest.1
index 451ff59..57f7145 100644
--- a/mtoolstest.1
+++ b/mtoolstest.1
@@ -1,5 +1,5 @@
'\" t
-.TH mtoolstest 1 "03Mar22" mtools-4.0.38
+.TH mtoolstest 1 "10Apr22" mtools-4.0.39
.SH Name
mtoolstest - tests and displays the configuration
'\" t
diff --git a/mtype.1 b/mtype.1
index 71dbaa4..c5e8b43 100644
--- a/mtype.1
+++ b/mtype.1
@@ -1,5 +1,5 @@
'\" t
-.TH mtype 1 "03Mar22" mtools-4.0.38
+.TH mtype 1 "10Apr22" mtools-4.0.39
.SH Name
mtype - display contents of an MSDOS file
'\" t
diff --git a/mzip.1 b/mzip.1
index 03516a6..e7ba5ef 100644
--- a/mzip.1
+++ b/mzip.1
@@ -1,5 +1,5 @@
'\" t
-.TH mzip 1 "03Mar22" mtools-4.0.38
+.TH mzip 1 "10Apr22" mtools-4.0.39
.SH Name
mzip - change protection mode and eject disk on Zip/Jaz drive
'\" t
diff --git a/patchlevel.c b/patchlevel.c
index f201322..028828c 100644
--- a/patchlevel.c
+++ b/patchlevel.c
@@ -18,10 +18,10 @@
#include "sysincludes.h"
#include "msdos.h"
-const char *mversion="4.0.38";
+const char *mversion="4.0.39";
/* Multiple releases on same day should be marked with (b), (cd), (d) after
* date string below */
-const char *mdate = "March 3rd, 2022";
+const char *mdate = "April 10th, 2022";
-const char *mformat_banner = "MTOO4038";
+const char *mformat_banner = "MTOO4039";
diff --git a/strtonum.c b/strtonum.c
index defa18d..41fd994 100644
--- a/strtonum.c
+++ b/strtonum.c
@@ -52,11 +52,9 @@ unsigned int atoui(const char *str) {
return strtoui(str, 0, 0);
}
-#ifndef HAVE_STRTOI
-int strtoi(const char *nptr, char **endptr, int base) {
+int strtosi(const char *nptr, char **endptr, int base) {
return (int) strtol_with_range(nptr, endptr, base, INT_MIN, INT_MAX);
}
-#endif
unsigned long atoul(const char *str) {
return strtoul(str, 0, 0);
diff --git a/version.texi b/version.texi
index beae0cc..023e2e4 100644
--- a/version.texi
+++ b/version.texi
@@ -1,3 +1,3 @@
-@set EDITION 4.0.38
-@set VERSION 4.0.38
-@set UPDATED March 2022
+@set EDITION 4.0.39
+@set VERSION 4.0.39
+@set UPDATED April 2022