those who've otherwise worked on that item. For a list of
contributors names and identifiers please see the CONTRIBUTORS file.
+Changes from 2.2.0 to 2.2.1:
+
+ - Fix bug in code meant to skip over the current log file when --log
+ option is given.
+ - Updates to copyright notices in source code.
+
Changes from 2.1.2 to 2.2.0:
- Add --deferconfirmation option.
bin_PROGRAMS = fdupes
-if NO_NCURSES
fdupes_SOURCES = fdupes.c\
fdupes.h\
errormsg.c\
md5/md5.h
dist_man1_MANS = fdupes.1
-else
-fdupes_SOURCES = fdupes.c\
- fdupes.h\
- filegroup.h\
+if WITH_NCURSES
+fdupes_SOURCES += filegroup.h\
fileaction.h\
fileaction.c\
ncurses-commands.c\
ncurses-status.h\
commandidentifier.c\
commandidentifier.h\
- errormsg.c\
- errormsg.h\
wcs.c\
wcs.h\
- dir.c\
- dir.h\
- log.c\
- log.h\
- fmatch.c\
- fmatch.h\
- sigint.c\
- sigint.h\
- flags.c\
- flags.h\
- confirmmatch.c\
- confirmmatch.h\
- removeifnotchanged.c\
- removeifnotchanged.h\
- mbstowcs_escape_invalid.c\
- mbstowcs_escape_invalid.h\
positive_wcwidth.c\
- positive_wcwidth.h\
- md5/md5.c\
- md5/md5.h
-dist_man1_MANS = fdupes.1
+ positive_wcwidth.h
dist_man7_MANS = fdupes-help.7
endif
PRE_UNINSTALL = :
POST_UNINSTALL = :
bin_PROGRAMS = fdupes$(EXEEXT)
+@WITH_NCURSES_TRUE@am__append_1 = filegroup.h\
+@WITH_NCURSES_TRUE@ fileaction.h\
+@WITH_NCURSES_TRUE@ fileaction.c\
+@WITH_NCURSES_TRUE@ ncurses-commands.c\
+@WITH_NCURSES_TRUE@ ncurses-commands.h\
+@WITH_NCURSES_TRUE@ ncurses-getcommand.c\
+@WITH_NCURSES_TRUE@ ncurses-getcommand.h\
+@WITH_NCURSES_TRUE@ ncurses-interface.c\
+@WITH_NCURSES_TRUE@ ncurses-interface.h\
+@WITH_NCURSES_TRUE@ ncurses-print.c\
+@WITH_NCURSES_TRUE@ ncurses-print.h\
+@WITH_NCURSES_TRUE@ ncurses-prompt.c\
+@WITH_NCURSES_TRUE@ ncurses-prompt.h\
+@WITH_NCURSES_TRUE@ ncurses-status.c\
+@WITH_NCURSES_TRUE@ ncurses-status.h\
+@WITH_NCURSES_TRUE@ commandidentifier.c\
+@WITH_NCURSES_TRUE@ commandidentifier.h\
+@WITH_NCURSES_TRUE@ wcs.c\
+@WITH_NCURSES_TRUE@ wcs.h\
+@WITH_NCURSES_TRUE@ positive_wcwidth.c\
+@WITH_NCURSES_TRUE@ positive_wcwidth.h
+
subdir = .
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/configure.ac
am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)" \
"$(DESTDIR)$(man7dir)"
PROGRAMS = $(bin_PROGRAMS)
-am__fdupes_SOURCES_DIST = fdupes.c fdupes.h filegroup.h fileaction.h \
- fileaction.c ncurses-commands.c ncurses-commands.h \
- ncurses-getcommand.c ncurses-getcommand.h ncurses-interface.c \
- ncurses-interface.h ncurses-print.c ncurses-print.h \
- ncurses-prompt.c ncurses-prompt.h ncurses-status.c \
- ncurses-status.h commandidentifier.c commandidentifier.h \
- errormsg.c errormsg.h wcs.c wcs.h dir.c dir.h log.c log.h \
- fmatch.c fmatch.h sigint.c sigint.h flags.c flags.h \
- confirmmatch.c confirmmatch.h removeifnotchanged.c \
- removeifnotchanged.h mbstowcs_escape_invalid.c \
- mbstowcs_escape_invalid.h positive_wcwidth.c \
- positive_wcwidth.h md5/md5.c md5/md5.h
+am__fdupes_SOURCES_DIST = fdupes.c fdupes.h errormsg.c errormsg.h \
+ dir.c dir.h log.c log.h fmatch.c fmatch.h sigint.c sigint.h \
+ flags.c flags.h confirmmatch.c confirmmatch.h \
+ removeifnotchanged.c removeifnotchanged.h \
+ mbstowcs_escape_invalid.c mbstowcs_escape_invalid.h md5/md5.c \
+ md5/md5.h filegroup.h fileaction.h fileaction.c \
+ ncurses-commands.c ncurses-commands.h ncurses-getcommand.c \
+ ncurses-getcommand.h ncurses-interface.c ncurses-interface.h \
+ ncurses-print.c ncurses-print.h ncurses-prompt.c \
+ ncurses-prompt.h ncurses-status.c ncurses-status.h \
+ commandidentifier.c commandidentifier.h wcs.c wcs.h \
+ positive_wcwidth.c positive_wcwidth.h
am__dirstamp = $(am__leading_dot)dirstamp
-@NO_NCURSES_FALSE@am_fdupes_OBJECTS = fdupes.$(OBJEXT) \
-@NO_NCURSES_FALSE@ fileaction.$(OBJEXT) \
-@NO_NCURSES_FALSE@ ncurses-commands.$(OBJEXT) \
-@NO_NCURSES_FALSE@ ncurses-getcommand.$(OBJEXT) \
-@NO_NCURSES_FALSE@ ncurses-interface.$(OBJEXT) \
-@NO_NCURSES_FALSE@ ncurses-print.$(OBJEXT) \
-@NO_NCURSES_FALSE@ ncurses-prompt.$(OBJEXT) \
-@NO_NCURSES_FALSE@ ncurses-status.$(OBJEXT) \
-@NO_NCURSES_FALSE@ commandidentifier.$(OBJEXT) \
-@NO_NCURSES_FALSE@ errormsg.$(OBJEXT) wcs.$(OBJEXT) \
-@NO_NCURSES_FALSE@ dir.$(OBJEXT) log.$(OBJEXT) fmatch.$(OBJEXT) \
-@NO_NCURSES_FALSE@ sigint.$(OBJEXT) flags.$(OBJEXT) \
-@NO_NCURSES_FALSE@ confirmmatch.$(OBJEXT) \
-@NO_NCURSES_FALSE@ removeifnotchanged.$(OBJEXT) \
-@NO_NCURSES_FALSE@ mbstowcs_escape_invalid.$(OBJEXT) \
-@NO_NCURSES_FALSE@ positive_wcwidth.$(OBJEXT) md5/md5.$(OBJEXT)
-@NO_NCURSES_TRUE@am_fdupes_OBJECTS = fdupes.$(OBJEXT) \
-@NO_NCURSES_TRUE@ errormsg.$(OBJEXT) dir.$(OBJEXT) \
-@NO_NCURSES_TRUE@ log.$(OBJEXT) fmatch.$(OBJEXT) \
-@NO_NCURSES_TRUE@ sigint.$(OBJEXT) flags.$(OBJEXT) \
-@NO_NCURSES_TRUE@ confirmmatch.$(OBJEXT) \
-@NO_NCURSES_TRUE@ removeifnotchanged.$(OBJEXT) \
-@NO_NCURSES_TRUE@ mbstowcs_escape_invalid.$(OBJEXT) \
-@NO_NCURSES_TRUE@ md5/md5.$(OBJEXT)
+@WITH_NCURSES_TRUE@am__objects_1 = fileaction.$(OBJEXT) \
+@WITH_NCURSES_TRUE@ ncurses-commands.$(OBJEXT) \
+@WITH_NCURSES_TRUE@ ncurses-getcommand.$(OBJEXT) \
+@WITH_NCURSES_TRUE@ ncurses-interface.$(OBJEXT) \
+@WITH_NCURSES_TRUE@ ncurses-print.$(OBJEXT) \
+@WITH_NCURSES_TRUE@ ncurses-prompt.$(OBJEXT) \
+@WITH_NCURSES_TRUE@ ncurses-status.$(OBJEXT) \
+@WITH_NCURSES_TRUE@ commandidentifier.$(OBJEXT) wcs.$(OBJEXT) \
+@WITH_NCURSES_TRUE@ positive_wcwidth.$(OBJEXT)
+am_fdupes_OBJECTS = fdupes.$(OBJEXT) errormsg.$(OBJEXT) dir.$(OBJEXT) \
+ log.$(OBJEXT) fmatch.$(OBJEXT) sigint.$(OBJEXT) \
+ flags.$(OBJEXT) confirmmatch.$(OBJEXT) \
+ removeifnotchanged.$(OBJEXT) mbstowcs_escape_invalid.$(OBJEXT) \
+ md5/md5.$(OBJEXT) $(am__objects_1)
fdupes_OBJECTS = $(am_fdupes_OBJECTS)
fdupes_LDADD = $(LDADD)
AM_V_P = $(am__v_P_@AM_V@)
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
-@NO_NCURSES_FALSE@fdupes_SOURCES = fdupes.c\
-@NO_NCURSES_FALSE@ fdupes.h\
-@NO_NCURSES_FALSE@ filegroup.h\
-@NO_NCURSES_FALSE@ fileaction.h\
-@NO_NCURSES_FALSE@ fileaction.c\
-@NO_NCURSES_FALSE@ ncurses-commands.c\
-@NO_NCURSES_FALSE@ ncurses-commands.h\
-@NO_NCURSES_FALSE@ ncurses-getcommand.c\
-@NO_NCURSES_FALSE@ ncurses-getcommand.h\
-@NO_NCURSES_FALSE@ ncurses-interface.c\
-@NO_NCURSES_FALSE@ ncurses-interface.h\
-@NO_NCURSES_FALSE@ ncurses-print.c\
-@NO_NCURSES_FALSE@ ncurses-print.h\
-@NO_NCURSES_FALSE@ ncurses-prompt.c\
-@NO_NCURSES_FALSE@ ncurses-prompt.h\
-@NO_NCURSES_FALSE@ ncurses-status.c\
-@NO_NCURSES_FALSE@ ncurses-status.h\
-@NO_NCURSES_FALSE@ commandidentifier.c\
-@NO_NCURSES_FALSE@ commandidentifier.h\
-@NO_NCURSES_FALSE@ errormsg.c\
-@NO_NCURSES_FALSE@ errormsg.h\
-@NO_NCURSES_FALSE@ wcs.c\
-@NO_NCURSES_FALSE@ wcs.h\
-@NO_NCURSES_FALSE@ dir.c\
-@NO_NCURSES_FALSE@ dir.h\
-@NO_NCURSES_FALSE@ log.c\
-@NO_NCURSES_FALSE@ log.h\
-@NO_NCURSES_FALSE@ fmatch.c\
-@NO_NCURSES_FALSE@ fmatch.h\
-@NO_NCURSES_FALSE@ sigint.c\
-@NO_NCURSES_FALSE@ sigint.h\
-@NO_NCURSES_FALSE@ flags.c\
-@NO_NCURSES_FALSE@ flags.h\
-@NO_NCURSES_FALSE@ confirmmatch.c\
-@NO_NCURSES_FALSE@ confirmmatch.h\
-@NO_NCURSES_FALSE@ removeifnotchanged.c\
-@NO_NCURSES_FALSE@ removeifnotchanged.h\
-@NO_NCURSES_FALSE@ mbstowcs_escape_invalid.c\
-@NO_NCURSES_FALSE@ mbstowcs_escape_invalid.h\
-@NO_NCURSES_FALSE@ positive_wcwidth.c\
-@NO_NCURSES_FALSE@ positive_wcwidth.h\
-@NO_NCURSES_FALSE@ md5/md5.c\
-@NO_NCURSES_FALSE@ md5/md5.h
-
-@NO_NCURSES_TRUE@fdupes_SOURCES = fdupes.c\
-@NO_NCURSES_TRUE@ fdupes.h\
-@NO_NCURSES_TRUE@ errormsg.c\
-@NO_NCURSES_TRUE@ errormsg.h\
-@NO_NCURSES_TRUE@ dir.c\
-@NO_NCURSES_TRUE@ dir.h\
-@NO_NCURSES_TRUE@ log.c\
-@NO_NCURSES_TRUE@ log.h\
-@NO_NCURSES_TRUE@ fmatch.c\
-@NO_NCURSES_TRUE@ fmatch.h\
-@NO_NCURSES_TRUE@ sigint.c\
-@NO_NCURSES_TRUE@ sigint.h\
-@NO_NCURSES_TRUE@ flags.c\
-@NO_NCURSES_TRUE@ flags.h\
-@NO_NCURSES_TRUE@ confirmmatch.c\
-@NO_NCURSES_TRUE@ confirmmatch.h\
-@NO_NCURSES_TRUE@ removeifnotchanged.c\
-@NO_NCURSES_TRUE@ removeifnotchanged.h\
-@NO_NCURSES_TRUE@ mbstowcs_escape_invalid.c\
-@NO_NCURSES_TRUE@ mbstowcs_escape_invalid.h\
-@NO_NCURSES_TRUE@ md5/md5.c\
-@NO_NCURSES_TRUE@ md5/md5.h
-
-@NO_NCURSES_FALSE@dist_man1_MANS = fdupes.1
-@NO_NCURSES_TRUE@dist_man1_MANS = fdupes.1
-@NO_NCURSES_FALSE@dist_man7_MANS = fdupes-help.7
+fdupes_SOURCES = fdupes.c fdupes.h errormsg.c errormsg.h dir.c dir.h \
+ log.c log.h fmatch.c fmatch.h sigint.c sigint.h flags.c \
+ flags.h confirmmatch.c confirmmatch.h removeifnotchanged.c \
+ removeifnotchanged.h mbstowcs_escape_invalid.c \
+ mbstowcs_escape_invalid.h md5/md5.c md5/md5.h $(am__append_1)
+dist_man1_MANS = fdupes.1
+@WITH_NCURSES_TRUE@dist_man7_MANS = fdupes-help.7
EXTRA_DIST = testdir CHANGES CONTRIBUTORS
all: config.h
$(MAKE) $(AM_MAKEFLAGS) all-am
-/* Copyright (c) 2018 Adrian Lopez
+/* Copyright (c) 2018-2022 Adrian Lopez
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
-/* Copyright (c) 2018 Adrian Lopez
+/* Copyright (c) 2018-2022 Adrian Lopez
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
#! /bin/sh
# Wrapper for compilers which do not understand '-c -o'.
-scriptversion=2018-03-07.03; # UTC
+scriptversion=2012-10-14.11; # UTC
-# Copyright (C) 1999-2018 Free Software Foundation, Inc.
+# Copyright (C) 1999-2013 Free Software Foundation, Inc.
# Written by Tom Tromey <tromey@cygnus.com>.
#
# This program is free software; you can redistribute it and/or modify
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
-# along with this program. If not, see <https://www.gnu.org/licenses/>.
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
# As a special exception to the GNU General Public License, if you
# distribute this file as part of a program that contains a
echo "compile $scriptversion"
exit $?
;;
- cl | *[/\\]cl | cl.exe | *[/\\]cl.exe | \
- icl | *[/\\]icl | icl.exe | *[/\\]icl.exe )
+ cl | *[/\\]cl | cl.exe | *[/\\]cl.exe )
func_cl_wrapper "$@" # Doesn't return...
;;
esac
# Local Variables:
# mode: shell-script
# sh-indentation: 2
-# eval: (add-hook 'before-save-hook 'time-stamp)
+# eval: (add-hook 'write-file-hooks 'time-stamp)
# time-stamp-start: "scriptversion="
# time-stamp-format: "%:y-%02m-%02d.%02H"
-# time-stamp-time-zone: "UTC0"
+# time-stamp-time-zone: "UTC"
# time-stamp-end: "; # UTC"
# End:
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for fdupes 2.2.0.
+# Generated by GNU Autoconf 2.69 for fdupes 2.2.1.
#
#
# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
# Identity of this package.
PACKAGE_NAME='fdupes'
PACKAGE_TARNAME='fdupes'
-PACKAGE_VERSION='2.2.0'
-PACKAGE_STRING='fdupes 2.2.0'
+PACKAGE_VERSION='2.2.1'
+PACKAGE_STRING='fdupes 2.2.1'
PACKAGE_BUGREPORT=''
PACKAGE_URL=''
am__EXEEXT_TRUE
LTLIBOBJS
LIBOBJS
-NO_NCURSES_FALSE
-NO_NCURSES_TRUE
+WITH_NCURSES_FALSE
+WITH_NCURSES_TRUE
NCURSES_LIBS
NCURSES_CFLAGS
EGREP
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF
-\`configure' configures fdupes 2.2.0 to adapt to many kinds of systems.
+\`configure' configures fdupes 2.2.1 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of fdupes 2.2.0:";;
+ short | recursive ) echo "Configuration of fdupes 2.2.1:";;
esac
cat <<\_ACEOF
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-fdupes configure 2.2.0
+fdupes configure 2.2.1
generated by GNU Autoconf 2.69
Copyright (C) 2012 Free Software Foundation, Inc.
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
-It was created by fdupes $as_me 2.2.0, which was
+It was created by fdupes $as_me 2.2.1, which was
generated by GNU Autoconf 2.69. Invocation command line was
$ $0 $@
# Define the identity of the package.
PACKAGE='fdupes'
- VERSION='2.2.0'
+ VERSION='2.2.1'
cat >>confdefs.h <<_ACEOF
fi
- if test x"$with_ncurses" = x"no"; then
- NO_NCURSES_TRUE=
- NO_NCURSES_FALSE='#'
+ if test x"$with_ncurses" != x"no"; then
+ WITH_NCURSES_TRUE=
+ WITH_NCURSES_FALSE='#'
else
- NO_NCURSES_TRUE='#'
- NO_NCURSES_FALSE=
+ WITH_NCURSES_TRUE='#'
+ WITH_NCURSES_FALSE=
fi
as_fn_error $? "conditional \"am__fastdepCC\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
fi
-if test -z "${NO_NCURSES_TRUE}" && test -z "${NO_NCURSES_FALSE}"; then
- as_fn_error $? "conditional \"NO_NCURSES\" was never defined.
+if test -z "${WITH_NCURSES_TRUE}" && test -z "${WITH_NCURSES_FALSE}"; then
+ as_fn_error $? "conditional \"WITH_NCURSES\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
fi
if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then
# report actual input values of CONFIG_FILES etc. instead of their
# values after options handling.
ac_log="
-This file was extended by fdupes $as_me 2.2.0, which was
+This file was extended by fdupes $as_me 2.2.1, which was
generated by GNU Autoconf 2.69. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
ac_cs_version="\\
-fdupes config.status 2.2.0
+fdupes config.status 2.2.1
configured by $0, generated by GNU Autoconf 2.69,
with options \\"\$ac_cs_config\\"
-AC_INIT([fdupes], [2.2.0])
+AC_INIT([fdupes], [2.2.1])
AM_INIT_AUTOMAKE([foreign subdir-objects])
[AC_DEFINE([NO_NCURSES], [], [Do not compile against ncurses])]
)
-AM_CONDITIONAL([NO_NCURSES], [test x"$with_ncurses" = x"no"])
+AM_CONDITIONAL([WITH_NCURSES], [test x"$with_ncurses" != x"no"])
unescaped_program_transform_name=`echo "${program_transform_name}"|sed -e "s&\\\\$\\\\$&\\\\$&g"`
transformed_program_name=`echo "${PACKAGE_NAME}"|sed -e "${unescaped_program_transform_name}"|sed -e "s&\\\\\\\\&\\\\\\\\\\\\\\\\&g"`
#! /bin/sh
# depcomp - compile a program generating dependencies as side-effects
-scriptversion=2018-03-07.03; # UTC
+scriptversion=2013-05-30.07; # UTC
-# Copyright (C) 1999-2018 Free Software Foundation, Inc.
+# Copyright (C) 1999-2013 Free Software Foundation, Inc.
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# GNU General Public License for more details.
# You should have received a copy of the GNU General Public License
-# along with this program. If not, see <https://www.gnu.org/licenses/>.
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
# As a special exception to the GNU General Public License, if you
# distribute this file as part of a program that contains a
# Local Variables:
# mode: shell-script
# sh-indentation: 2
-# eval: (add-hook 'before-save-hook 'time-stamp)
+# eval: (add-hook 'write-file-hooks 'time-stamp)
# time-stamp-start: "scriptversion="
# time-stamp-format: "%:y-%02m-%02d.%02H"
-# time-stamp-time-zone: "UTC0"
+# time-stamp-time-zone: "UTC"
# time-stamp-end: "; # UTC"
# End:
-/* Copyright (c) 2018 Adrian Lopez
+/* Copyright (c) 2018-2022 Adrian Lopez
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
-/* Copyright (c) 2018 Adrian Lopez
+/* Copyright (c) 2018-2022 Adrian Lopez
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
-/* Copyright (c) 2018 Adrian Lopez
+/* Copyright (c) 2018-2022 Adrian Lopez
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
-/* Copyright (c) 2018 Adrian Lopez
+/* Copyright (c) 2018-2022 Adrian Lopez
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
-/* FDUPES Copyright (c) 1999-2018 Adrian Lopez
+/* FDUPES Copyright (c) 1999-2022 Adrian Lopez
Permission is hereby granted, free of charge, to any person
obtaining a copy of this software and associated documentation files
}
/* ignore logfile */
- if (info.st_dev == logfile_status->st_dev && info.st_ino == logfile_status->st_ino)
+ if (logfile_status != 0 && info.st_dev == logfile_status->st_dev && info.st_ino == logfile_status->st_ino)
{
free(newfile->d_name);
free(newfile);
/* F_RECURSE is not set for directories before --recurse: */
for (x = optind; x < firstrecurse; x++)
- filecount += grokdir(argv[x], &files, &logfile_status);
+ filecount += grokdir(argv[x], &files, logfile ? &logfile_status : 0);
/* Set F_RECURSE for directories after --recurse: */
SETFLAG(flags, F_RECURSE);
for (x = firstrecurse; x < argc; x++)
- filecount += grokdir(argv[x], &files, &logfile_status);
+ filecount += grokdir(argv[x], &files, logfile ? &logfile_status : 0);
} else {
for (x = optind; x < argc; x++)
- filecount += grokdir(argv[x], &files, &logfile_status);
+ filecount += grokdir(argv[x], &files, logfile ? &logfile_status : 0);
}
if (!files) {
-/* FDUPES Copyright (c) 2018 Adrian Lopez
+/* FDUPES Copyright (c) 2018-2022 Adrian Lopez
Permission is hereby granted, free of charge, to any person
obtaining a copy of this software and associated documentation files
-/* FDUPES Copyright (c) 2018 Adrian Lopez
+/* FDUPES Copyright (c) 2018-2022 Adrian Lopez
Permission is hereby granted, free of charge, to any person
obtaining a copy of this software and associated documentation files
-/* Copyright (c) 2018 Adrian Lopez
+/* Copyright (c) 2018-2022 Adrian Lopez
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
-/* Copyright (c) 2018 Adrian Lopez
+/* Copyright (c) 2018-2022 Adrian Lopez
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
#!/bin/sh
# install - install a program, script, or datafile
-scriptversion=2018-03-11.20; # UTC
+scriptversion=2011-11-20.07; # UTC
# This originates from X11R5 (mit/util/scripts/install.sh), which was
# later released in X11R6 (xc/config/util/install.sh) with the
# This script is compatible with the BSD install script, but was written
# from scratch.
-tab=' '
nl='
'
-IFS=" $tab$nl"
+IFS=" "" $nl"
-# Set DOITPROG to "echo" to test this script.
+# set DOITPROG to echo to test this script
+# Don't use :- since 4.3BSD and earlier shells don't like it.
doit=${DOITPROG-}
-doit_exec=${doit:-exec}
+if test -z "$doit"; then
+ doit_exec=exec
+else
+ doit_exec=$doit
+fi
# Put in absolute file names if you don't have them in your path;
# or use environment vars.
rmprog=${RMPROG-rm}
stripprog=${STRIPPROG-strip}
+posix_glob='?'
+initialize_posix_glob='
+ test "$posix_glob" != "?" || {
+ if (set -f) 2>/dev/null; then
+ posix_glob=
+ else
+ posix_glob=:
+ fi
+ }
+'
+
posix_mkdir=
# Desired mode of installed file.
dst_arg=
copy_on_change=false
-is_target_a_directory=possibly
+no_target_directory=
usage="\
Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
-d) dir_arg=true;;
-g) chgrpcmd="$chgrpprog $2"
- shift;;
+ shift;;
--help) echo "$usage"; exit $?;;
-m) mode=$2
- case $mode in
- *' '* | *"$tab"* | *"$nl"* | *'*'* | *'?'* | *'['*)
- echo "$0: invalid mode: $mode" >&2
- exit 1;;
- esac
- shift;;
+ case $mode in
+ *' '* | *' '* | *'
+'* | *'*'* | *'?'* | *'['*)
+ echo "$0: invalid mode: $mode" >&2
+ exit 1;;
+ esac
+ shift;;
-o) chowncmd="$chownprog $2"
- shift;;
+ shift;;
-s) stripcmd=$stripprog;;
- -t)
- is_target_a_directory=always
- dst_arg=$2
- # Protect names problematic for 'test' and other utilities.
- case $dst_arg in
- -* | [=\(\)!]) dst_arg=./$dst_arg;;
- esac
- shift;;
+ -t) dst_arg=$2
+ # Protect names problematic for 'test' and other utilities.
+ case $dst_arg in
+ -* | [=\(\)!]) dst_arg=./$dst_arg;;
+ esac
+ shift;;
- -T) is_target_a_directory=never;;
+ -T) no_target_directory=true;;
--version) echo "$0 $scriptversion"; exit $?;;
- --) shift
- break;;
+ --) shift
+ break;;
- -*) echo "$0: invalid option: $1" >&2
- exit 1;;
+ -*) echo "$0: invalid option: $1" >&2
+ exit 1;;
*) break;;
esac
shift
done
-# We allow the use of options -d and -T together, by making -d
-# take the precedence; this is for compatibility with GNU install.
-
-if test -n "$dir_arg"; then
- if test -n "$dst_arg"; then
- echo "$0: target directory not allowed when installing a directory." >&2
- exit 1
- fi
-fi
-
if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then
# When -d is used, all remaining arguments are directories to create.
# When -t is used, the destination is already specified.
fi
if test -z "$dir_arg"; then
- if test $# -gt 1 || test "$is_target_a_directory" = always; then
- if test ! -d "$dst_arg"; then
- echo "$0: $dst_arg: Is not a directory." >&2
- exit 1
- fi
- fi
-fi
-
-if test -z "$dir_arg"; then
do_exit='(exit $ret); exit $ret'
trap "ret=129; $do_exit" 1
trap "ret=130; $do_exit" 2
*[0-7])
if test -z "$stripcmd"; then
- u_plus_rw=
+ u_plus_rw=
else
- u_plus_rw='% 200'
+ u_plus_rw='% 200'
fi
cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;;
*)
if test -z "$stripcmd"; then
- u_plus_rw=
+ u_plus_rw=
else
- u_plus_rw=,u+rw
+ u_plus_rw=,u+rw
fi
cp_umask=$mode$u_plus_rw;;
esac
fi
dst=$dst_arg
- # If destination is a directory, append the input filename.
+ # If destination is a directory, append the input filename; won't work
+ # if double slashes aren't ignored.
if test -d "$dst"; then
- if test "$is_target_a_directory" = never; then
- echo "$0: $dst_arg: Is a directory" >&2
- exit 1
+ if test -n "$no_target_directory"; then
+ echo "$0: $dst_arg: Is a directory" >&2
+ exit 1
fi
dstdir=$dst
- dstbase=`basename "$src"`
- case $dst in
- */) dst=$dst$dstbase;;
- *) dst=$dst/$dstbase;;
- esac
+ dst=$dstdir/`basename "$src"`
dstdir_status=0
else
- dstdir=`dirname "$dst"`
+ # Prefer dirname, but fall back on a substitute if dirname fails.
+ dstdir=`
+ (dirname "$dst") 2>/dev/null ||
+ expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$dst" : 'X\(//\)[^/]' \| \
+ X"$dst" : 'X\(//\)$' \| \
+ X"$dst" : 'X\(/\)' \| . 2>/dev/null ||
+ echo X"$dst" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'
+ `
+
test -d "$dstdir"
dstdir_status=$?
fi
fi
- case $dstdir in
- */) dstdirslash=$dstdir;;
- *) dstdirslash=$dstdir/;;
- esac
-
obsolete_mkdir_used=false
if test $dstdir_status != 0; then
case $posix_mkdir in
'')
- # Create intermediate dirs using mode 755 as modified by the umask.
- # This is like FreeBSD 'install' as of 1997-10-28.
- umask=`umask`
- case $stripcmd.$umask in
- # Optimize common cases.
- *[2367][2367]) mkdir_umask=$umask;;
- .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;;
-
- *[0-7])
- mkdir_umask=`expr $umask + 22 \
- - $umask % 100 % 40 + $umask % 20 \
- - $umask % 10 % 4 + $umask % 2
- `;;
- *) mkdir_umask=$umask,go-w;;
- esac
-
- # With -d, create the new directory with the user-specified mode.
- # Otherwise, rely on $mkdir_umask.
- if test -n "$dir_arg"; then
- mkdir_mode=-m$mode
- else
- mkdir_mode=
- fi
-
- posix_mkdir=false
- case $umask in
- *[123567][0-7][0-7])
- # POSIX mkdir -p sets u+wx bits regardless of umask, which
- # is incompatible with FreeBSD 'install' when (umask & 300) != 0.
- ;;
- *)
- # Note that $RANDOM variable is not portable (e.g. dash); Use it
- # here however when possible just to lower collision chance.
- tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
-
- trap 'ret=$?; rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" 2>/dev/null; exit $ret' 0
-
- # Because "mkdir -p" follows existing symlinks and we likely work
- # directly in world-writeable /tmp, make sure that the '$tmpdir'
- # directory is successfully created first before we actually test
- # 'mkdir -p' feature.
- if (umask $mkdir_umask &&
- $mkdirprog $mkdir_mode "$tmpdir" &&
- exec $mkdirprog $mkdir_mode -p -- "$tmpdir/a/b") >/dev/null 2>&1
- then
- if test -z "$dir_arg" || {
- # Check for POSIX incompatibilities with -m.
- # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
- # other-writable bit of parent directory when it shouldn't.
- # FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
- test_tmpdir="$tmpdir/a"
- ls_ld_tmpdir=`ls -ld "$test_tmpdir"`
- case $ls_ld_tmpdir in
- d????-?r-*) different_mode=700;;
- d????-?--*) different_mode=755;;
- *) false;;
- esac &&
- $mkdirprog -m$different_mode -p -- "$test_tmpdir" && {
- ls_ld_tmpdir_1=`ls -ld "$test_tmpdir"`
- test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
- }
- }
- then posix_mkdir=:
- fi
- rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir"
- else
- # Remove any dirs left behind by ancient mkdir implementations.
- rmdir ./$mkdir_mode ./-p ./-- "$tmpdir" 2>/dev/null
- fi
- trap '' 0;;
- esac;;
+ # Create intermediate dirs using mode 755 as modified by the umask.
+ # This is like FreeBSD 'install' as of 1997-10-28.
+ umask=`umask`
+ case $stripcmd.$umask in
+ # Optimize common cases.
+ *[2367][2367]) mkdir_umask=$umask;;
+ .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;;
+
+ *[0-7])
+ mkdir_umask=`expr $umask + 22 \
+ - $umask % 100 % 40 + $umask % 20 \
+ - $umask % 10 % 4 + $umask % 2
+ `;;
+ *) mkdir_umask=$umask,go-w;;
+ esac
+
+ # With -d, create the new directory with the user-specified mode.
+ # Otherwise, rely on $mkdir_umask.
+ if test -n "$dir_arg"; then
+ mkdir_mode=-m$mode
+ else
+ mkdir_mode=
+ fi
+
+ posix_mkdir=false
+ case $umask in
+ *[123567][0-7][0-7])
+ # POSIX mkdir -p sets u+wx bits regardless of umask, which
+ # is incompatible with FreeBSD 'install' when (umask & 300) != 0.
+ ;;
+ *)
+ tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
+ trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0
+
+ if (umask $mkdir_umask &&
+ exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1
+ then
+ if test -z "$dir_arg" || {
+ # Check for POSIX incompatibilities with -m.
+ # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
+ # other-writable bit of parent directory when it shouldn't.
+ # FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
+ ls_ld_tmpdir=`ls -ld "$tmpdir"`
+ case $ls_ld_tmpdir in
+ d????-?r-*) different_mode=700;;
+ d????-?--*) different_mode=755;;
+ *) false;;
+ esac &&
+ $mkdirprog -m$different_mode -p -- "$tmpdir" && {
+ ls_ld_tmpdir_1=`ls -ld "$tmpdir"`
+ test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
+ }
+ }
+ then posix_mkdir=:
+ fi
+ rmdir "$tmpdir/d" "$tmpdir"
+ else
+ # Remove any dirs left behind by ancient mkdir implementations.
+ rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null
+ fi
+ trap '' 0;;
+ esac;;
esac
if
$posix_mkdir && (
- umask $mkdir_umask &&
- $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir"
+ umask $mkdir_umask &&
+ $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir"
)
then :
else
# directory the slow way, step by step, checking for races as we go.
case $dstdir in
- /*) prefix='/';;
- [-=\(\)!]*) prefix='./';;
- *) prefix='';;
+ /*) prefix='/';;
+ [-=\(\)!]*) prefix='./';;
+ *) prefix='';;
esac
+ eval "$initialize_posix_glob"
+
oIFS=$IFS
IFS=/
- set -f
+ $posix_glob set -f
set fnord $dstdir
shift
- set +f
+ $posix_glob set +f
IFS=$oIFS
prefixes=
for d
do
- test X"$d" = X && continue
-
- prefix=$prefix$d
- if test -d "$prefix"; then
- prefixes=
- else
- if $posix_mkdir; then
- (umask=$mkdir_umask &&
- $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
- # Don't fail if two instances are running concurrently.
- test -d "$prefix" || exit 1
- else
- case $prefix in
- *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;;
- *) qprefix=$prefix;;
- esac
- prefixes="$prefixes '$qprefix'"
- fi
- fi
- prefix=$prefix/
+ test X"$d" = X && continue
+
+ prefix=$prefix$d
+ if test -d "$prefix"; then
+ prefixes=
+ else
+ if $posix_mkdir; then
+ (umask=$mkdir_umask &&
+ $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
+ # Don't fail if two instances are running concurrently.
+ test -d "$prefix" || exit 1
+ else
+ case $prefix in
+ *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;;
+ *) qprefix=$prefix;;
+ esac
+ prefixes="$prefixes '$qprefix'"
+ fi
+ fi
+ prefix=$prefix/
done
if test -n "$prefixes"; then
- # Don't fail if two instances are running concurrently.
- (umask $mkdir_umask &&
- eval "\$doit_exec \$mkdirprog $prefixes") ||
- test -d "$dstdir" || exit 1
- obsolete_mkdir_used=true
+ # Don't fail if two instances are running concurrently.
+ (umask $mkdir_umask &&
+ eval "\$doit_exec \$mkdirprog $prefixes") ||
+ test -d "$dstdir" || exit 1
+ obsolete_mkdir_used=true
fi
fi
fi
else
# Make a couple of temp file names in the proper directory.
- dsttmp=${dstdirslash}_inst.$$_
- rmtmp=${dstdirslash}_rm.$$_
+ dsttmp=$dstdir/_inst.$$_
+ rmtmp=$dstdir/_rm.$$_
# Trap to clean up those temp files at exit.
trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
# If -C, don't bother to copy if it wouldn't change the file.
if $copy_on_change &&
- old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` &&
- new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` &&
- set -f &&
+ old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` &&
+ new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` &&
+
+ eval "$initialize_posix_glob" &&
+ $posix_glob set -f &&
set X $old && old=:$2:$4:$5:$6 &&
set X $new && new=:$2:$4:$5:$6 &&
- set +f &&
+ $posix_glob set +f &&
+
test "$old" = "$new" &&
$cmpprog "$dst" "$dsttmp" >/dev/null 2>&1
then
# to itself, or perhaps because mv is so ancient that it does not
# support -f.
{
- # Now remove or move aside any old file at destination location.
- # We try this two ways since rm can't unlink itself on some
- # systems and the destination file might be busy for other
- # reasons. In this case, the final cleanup might fail but the new
- # file should still install successfully.
- {
- test ! -f "$dst" ||
- $doit $rmcmd -f "$dst" 2>/dev/null ||
- { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null &&
- { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; }
- } ||
- { echo "$0: cannot unlink or rename $dst" >&2
- (exit 1); exit 1
- }
- } &&
-
- # Now rename the file to the real destination.
- $doit $mvcmd "$dsttmp" "$dst"
+ # Now remove or move aside any old file at destination location.
+ # We try this two ways since rm can't unlink itself on some
+ # systems and the destination file might be busy for other
+ # reasons. In this case, the final cleanup might fail but the new
+ # file should still install successfully.
+ {
+ test ! -f "$dst" ||
+ $doit $rmcmd -f "$dst" 2>/dev/null ||
+ { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null &&
+ { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; }
+ } ||
+ { echo "$0: cannot unlink or rename $dst" >&2
+ (exit 1); exit 1
+ }
+ } &&
+
+ # Now rename the file to the real destination.
+ $doit $mvcmd "$dsttmp" "$dst"
}
fi || exit 1
done
# Local variables:
-# eval: (add-hook 'before-save-hook 'time-stamp)
+# eval: (add-hook 'write-file-hooks 'time-stamp)
# time-stamp-start: "scriptversion="
# time-stamp-format: "%:y-%02m-%02d.%02H"
-# time-stamp-time-zone: "UTC0"
+# time-stamp-time-zone: "UTC"
# time-stamp-end: "; # UTC"
# End:
-/* Copyright (c) 2018 Adrian Lopez
+/* Copyright (c) 2018-2022 Adrian Lopez
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
-/* Copyright (c) 2018 Adrian Lopez
+/* Copyright (c) 2018-2022 Adrian Lopez
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
-/* Copyright (c) 2019 Adrian Lopez
+/* Copyright (c) 2019-2022 Adrian Lopez
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
-/* Copyright (c) 2019 Adrian Lopez
+/* Copyright (c) 2019-2022 Adrian Lopez
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
#! /bin/sh
# Common wrapper for a few potentially missing GNU programs.
-scriptversion=2018-03-07.03; # UTC
+scriptversion=2013-10-28.13; # UTC
-# Copyright (C) 1996-2018 Free Software Foundation, Inc.
+# Copyright (C) 1996-2014 Free Software Foundation, Inc.
# Originally written by Fran,cois Pinard <pinard@iro.umontreal.ca>, 1996.
# This program is free software; you can redistribute it and/or modify
# GNU General Public License for more details.
# You should have received a copy of the GNU General Public License
-# along with this program. If not, see <https://www.gnu.org/licenses/>.
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
# As a special exception to the GNU General Public License, if you
# distribute this file as part of a program that contains a
exit $st
fi
-perl_URL=https://www.perl.org/
-flex_URL=https://github.com/westes/flex
-gnu_software_URL=https://www.gnu.org/software
+perl_URL=http://www.perl.org/
+flex_URL=http://flex.sourceforge.net/
+gnu_software_URL=http://www.gnu.org/software
program_details ()
{
exit $st
# Local variables:
-# eval: (add-hook 'before-save-hook 'time-stamp)
+# eval: (add-hook 'write-file-hooks 'time-stamp)
# time-stamp-start: "scriptversion="
# time-stamp-format: "%:y-%02m-%02d.%02H"
-# time-stamp-time-zone: "UTC0"
+# time-stamp-time-zone: "UTC"
# time-stamp-end: "; # UTC"
# End:
-/* FDUPES Copyright (c) 2018 Adrian Lopez
+/* FDUPES Copyright (c) 2018-2022 Adrian Lopez
Permission is hereby granted, free of charge, to any person
obtaining a copy of this software and associated documentation files
-/* FDUPES Copyright (c) 2018 Adrian Lopez
+/* FDUPES Copyright (c) 2018-2022 Adrian Lopez
Permission is hereby granted, free of charge, to any person
obtaining a copy of this software and associated documentation files
-/* FDUPES Copyright (c) 2018 Adrian Lopez
+/* FDUPES Copyright (c) 2018-2022 Adrian Lopez
Permission is hereby granted, free of charge, to any person
obtaining a copy of this software and associated documentation files
-/* FDUPES Copyright (c) 2018 Adrian Lopez
+/* FDUPES Copyright (c) 2018-2022 Adrian Lopez
Permission is hereby granted, free of charge, to any person
obtaining a copy of this software and associated documentation files
-/* FDUPES Copyright (c) 2018 Adrian Lopez
+/* FDUPES Copyright (c) 2018-2022 Adrian Lopez
Permission is hereby granted, free of charge, to any person
obtaining a copy of this software and associated documentation files
-/* FDUPES Copyright (c) 2018 Adrian Lopez
+/* FDUPES Copyright (c) 2018-2022 Adrian Lopez
Permission is hereby granted, free of charge, to any person
obtaining a copy of this software and associated documentation files
-/* FDUPES Copyright (c) 2018 Adrian Lopez
+/* FDUPES Copyright (c) 2018-2022 Adrian Lopez
Permission is hereby granted, free of charge, to any person
obtaining a copy of this software and associated documentation files
-/* FDUPES Copyright (c) 2018 Adrian Lopez
+/* FDUPES Copyright (c) 2018-2022 Adrian Lopez
Permission is hereby granted, free of charge, to any person
obtaining a copy of this software and associated documentation files
-/* FDUPES Copyright (c) 2018 Adrian Lopez
+/* FDUPES Copyright (c) 2018-2022 Adrian Lopez
Permission is hereby granted, free of charge, to any person
obtaining a copy of this software and associated documentation files
-/* FDUPES Copyright (c) 2018 Adrian Lopez
+/* FDUPES Copyright (c) 2018-2022 Adrian Lopez
Permission is hereby granted, free of charge, to any person
obtaining a copy of this software and associated documentation files
-/* FDUPES Copyright (c) 2018 Adrian Lopez
+/* FDUPES Copyright (c) 2018-2022 Adrian Lopez
Permission is hereby granted, free of charge, to any person
obtaining a copy of this software and associated documentation files
-/* FDUPES Copyright (c) 2018 Adrian Lopez
+/* FDUPES Copyright (c) 2018-2022 Adrian Lopez
Permission is hereby granted, free of charge, to any person
obtaining a copy of this software and associated documentation files
-/* Copyright (c) 2019 Adrian Lopez
+/* Copyright (c) 2019-2022 Adrian Lopez
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
-/* Copyright (c) 2019 Adrian Lopez
+/* Copyright (c) 2019-2022 Adrian Lopez
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
-/* Copyright (c) 2018 Adrian Lopez
+/* Copyright (c) 2018-2022 Adrian Lopez
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
-/* Copyright (c) 2018 Adrian Lopez
+/* Copyright (c) 2018-2022 Adrian Lopez
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
-/* Copyright (c) 2018 Adrian Lopez
+/* Copyright (c) 2018-2022 Adrian Lopez
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
-/* Copyright (c) 2018 Adrian Lopez
+/* Copyright (c) 2018-2022 Adrian Lopez
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages