Revert "coreutils: update to 9.4"
This reverts commit ddf66eac751e30292a5d2a0fa5fda2a3aebcad33. See https://github.com/msys2/MSYS2-packages/pull/4060#issuecomment-1731397672
This commit is contained in:
parent
d75da61bca
commit
61ffc00323
1083
coreutils/001-coreutils-8.30.patch
Normal file
1083
coreutils/001-coreutils-8.30.patch
Normal file
File diff suppressed because it is too large
Load Diff
31
coreutils/002-coreutils-8.32-enable-stdbuf.patch
Normal file
31
coreutils/002-coreutils-8.32-enable-stdbuf.patch
Normal file
@ -0,0 +1,31 @@
|
||||
--- coreutils-8.32/configure.ac
|
||||
+++ coreutils-8.32/configure.ac
|
||||
@@ -509,7 +509,7 @@
|
||||
],
|
||||
[stdbuf_supported=yes])
|
||||
AC_MSG_RESULT([$stdbuf_supported])
|
||||
-if test "$stdbuf_supported" = "yes" && test -z "$EXEEXT"; then
|
||||
+if test "$stdbuf_supported" = "yes"; then
|
||||
gl_ADD_PROG([optional_bin_progs], [stdbuf])
|
||||
fi
|
||||
CFLAGS=$ac_save_CFLAGS
|
||||
@@ -530,7 +530,7 @@
|
||||
# Note it adding to pkglibexec_PROGRAMS, $(transform) in src/local.mk
|
||||
# may need to be updated accordingly.
|
||||
case " $optional_bin_progs " in
|
||||
- *' stdbuf '*) pkglibexec_PROGRAMS='src/libstdbuf.so';;
|
||||
+ *' stdbuf '*) pkglibexec_PROGRAMS='src/libstdbuf.so$(EXEEXT)';;
|
||||
*) pkglibexec_PROGRAMS='';;
|
||||
esac
|
||||
|
||||
--- coreutils-8.32/src/stdbuf.c
|
||||
+++ coreutils-8.32/src/stdbuf.c
|
||||
@@ -33,7 +33,7 @@
|
||||
|
||||
/* The official name of this program (e.g., no 'g' prefix). */
|
||||
#define PROGRAM_NAME "stdbuf"
|
||||
-#define LIB_NAME "libstdbuf.so" /* FIXME: don't hardcode */
|
||||
+#define LIB_NAME "libstdbuf.dll" /* FIXME: don't hardcode */
|
||||
|
||||
#define AUTHORS proper_name ("Padraig Brady")
|
||||
|
||||
11
coreutils/003-coreutils-8.32-fix-test-cases.patch
Normal file
11
coreutils/003-coreutils-8.32-fix-test-cases.patch
Normal file
@ -0,0 +1,11 @@
|
||||
--- coreutils-8.32/tests/init.sh
|
||||
+++ coreutils-8.32/tests/init.sh
|
||||
@@ -349,7 +349,7 @@
|
||||
|
||||
# It must have 0700 permissions. Handle sticky "S" bits.
|
||||
perms=`ls -dgo "$d" 2>/dev/null` &&
|
||||
- case $perms in drwx--[-S]---*) :;; *) false;; esac && {
|
||||
+ case $perms in drwx*) :;; *) false;; esac && {
|
||||
echo "$d"
|
||||
return
|
||||
}
|
||||
@ -1,136 +1,48 @@
|
||||
# Maintainer: Alexey Pavlov <alexpux@gmail.com>
|
||||
|
||||
pkgname=coreutils
|
||||
pkgver=9.4
|
||||
pkgrel=1
|
||||
pkgver=8.32
|
||||
pkgrel=5
|
||||
pkgdesc="The basic file, shell and text manipulation utilities of the GNU operating system"
|
||||
arch=('i686' 'x86_64')
|
||||
license=('spdx:GPL-3.0-or-later' AND 'spdx:GFDL-1.3-or-later')
|
||||
license=('GPL3')
|
||||
url="https://www.gnu.org/software/coreutils"
|
||||
depends=('gmp' 'libiconv' 'libintl')
|
||||
makedepends=('groff' 'gmp-devel' 'libiconv-devel' 'gettext-devel' 'help2man' 'autotools' 'gcc')
|
||||
source=(https://ftp.gnu.org/gnu/${pkgname}/${pkgname}-${pkgver}.tar.xz{,.sig}
|
||||
coreutils-8.32-configure.ac.patch
|
||||
coreutils-8.32-doc-coreutils.texi.patch
|
||||
coreutils-8.32-lib-freopen.c.patch
|
||||
coreutils-8.32-lib-hash-pjw.c.patch
|
||||
coreutils-8.32-lib-hash-pjw.h.patch
|
||||
coreutils-8.32-lib-local.mk.patch
|
||||
coreutils-9.1-lib-root-dev-ino.h.patch
|
||||
coreutils-9.4-lib-root-dev-ino.c.patch
|
||||
coreutils-8.32-lib-same.c.patch
|
||||
coreutils-9.4-src-chcon.c.patch
|
||||
coreutils-8.32-src-chgrp.c.patch
|
||||
coreutils-9.4-src-chmod.c.patch
|
||||
coreutils-8.32-src-chown.c.patch
|
||||
coreutils-9.4-src-chown-core.h.patch
|
||||
coreutils-8.32-src-chroot.c.patch
|
||||
coreutils-9.4-src-copy.c.patch
|
||||
coreutils-8.32-src-dd.c.patch
|
||||
coreutils-8.32-src-dircolors.c.patch
|
||||
coreutils-9.4-src-install.c.patch
|
||||
coreutils-9.4-src-ls.c.patch
|
||||
coreutils-9.1-src-mv.c.patch
|
||||
coreutils-8.32-src-pwd.c.patch
|
||||
coreutils-9.4-src-remove.h.patch
|
||||
coreutils-8.32-src-rm.c.patch
|
||||
coreutils-9.4-src-stat.c.patch
|
||||
coreutils-9-src-dircolors-hin.patch
|
||||
004-msystem-osname-cygwin.patch
|
||||
cygwin.h
|
||||
cygwin.c)
|
||||
sha256sums=('ea613a4cf44612326e917201bbbcdfbd301de21ffc3b59b6e5c07e040b275e52'
|
||||
001-coreutils-8.30.patch
|
||||
002-coreutils-8.32-enable-stdbuf.patch
|
||||
003-coreutils-8.32-fix-test-cases.patch
|
||||
004-msystem-osname-cygwin.patch)
|
||||
sha256sums=('4458d8de7849df44ccab15e16b1548b285224dbba5f08fac070c1c0e0bcc4cfa'
|
||||
'SKIP'
|
||||
'40052d667830078c3fbdd62db99b92310d3f3be4674c50be1debcd11d8ec6b3c'
|
||||
'dee3138601ccc3183418bc571359d5ebd49c9a0678778432c8b71cbe79431213'
|
||||
'553a798fd493d7537dc93d2b18d9329ee7e964a330fc088f261b440049a5d284'
|
||||
'6326eba2c476001b4a07abfc5a59aac881e6349e269252d006a7c71ed2b289ac'
|
||||
'5ceffc6464e006e53888a599ca4a29b752e8c345b530e90b3a8a19a8f7c28743'
|
||||
'bc9b1f0434fa9ca3b98d2fe6fcd821c64fc9b358516f3fe8873de1080afc3749'
|
||||
'055f99c882c6fff3273c1fbfc2838729a9167fb3be437fb64caf06646ecbda0d'
|
||||
'8b511b9155928a7027f7ceb9fd8ece9d532f6c3ff77c75edf28a61c25c4b9ce7'
|
||||
'06b089c5225273684e420f8b6e486e55400ff20a240a7d78d2e6cc9cabdeae8b'
|
||||
'2b42f8ab3832cef7337f6eace7dfc8dce4fb04ed9ebbdda99b1189e89c2025c7'
|
||||
'e0ef98efbae37297109f4b50f3922c08c3abd7c20401aaa520122667da6c1590'
|
||||
'9d3ca2197ea04d12696534526e75f4f1f01450701cc1f192a5465075d82faab5'
|
||||
'7951ec47a030444b74542a712a70fd5d8d6cdcb5a5a85a1886b3f35b60042365'
|
||||
'467689d047ebfc1d6c78d3047b8e44f026aa546929501a16d66af675053450b5'
|
||||
'fdcb5871c63ba2e4ca6a6c23c357c4a10fba2ab6975ee4f528f1eca1c3619aa8'
|
||||
'a2165a1444aebbc90eecd7d632ef6901a03497bdefd96961f06c98c022f499dd'
|
||||
'0cbe20d9280be2aa9a055131ea8d2aff041fd5879b2ec80203a359e64d3d523a'
|
||||
'05dc41601dd7276fc38f57ca0eadc9fd060d6f2724c6e48382f71209bf30ef66'
|
||||
'1adbee994448de83f02f3c5401b0c89210e0668e5e76c94b8374f0a268a55001'
|
||||
'52a8ec786692a15ee79db100c25e781cf538b5f61e3cefc21af001b37f3753ed'
|
||||
'a2e4b54690958cbf86262930aac240d18f607bf6b34dd006b337a5d1afc015ec'
|
||||
'1057b97007e65fb597ad4be036977303ac9be2e2a46c44c30fce0537ac04e96a'
|
||||
'dd381cc10b944ae84b5d942543d86569f838167dc390e16e17262a27a6a3b7b3'
|
||||
'bc3fb774431005318cb89f723175c79e9f18808c7ef6010c410d7ea9495f854e'
|
||||
'07ddcca3f127e60631e63012aa1553721e939b44dafe0220b85ecd727445681f'
|
||||
'f08f69c6089192dcb295c3110c8b0d59af30438894bb3eb8a817d162b14ae3e1'
|
||||
'3922afd54b2323772f5cbd0638d0887ef858199bbaf4076a1db318173021c3dc'
|
||||
'602faa31be04e3cba6cf39921f4da397fbca4a66baa5a1186e070a16dc65391a'
|
||||
'8dce514ac47518d78a31fd07addc6300912cb2965915798ad1381208d36c887c')
|
||||
'467bde24da0ccea48260f58d3c94a84de4e027ab598a926003642f791da47ca2'
|
||||
'e3be62b9aceb3231f09f05bc3bd8b18f6aaa495f5063781cdd261d560a7e80d0'
|
||||
'ad9e0582373500c0668e38483401169f48d6a2f8ad8d28ef8e7b06e4a3e08a74'
|
||||
'3922afd54b2323772f5cbd0638d0887ef858199bbaf4076a1db318173021c3dc')
|
||||
validpgpkeys=('6C37DC12121A5006BC1DB804DF6FD971306037D9')
|
||||
|
||||
apply_patch_with_msg() {
|
||||
for _patch in "$@"
|
||||
do
|
||||
msg2 "Applying ${_patch}"
|
||||
patch -Nbp1 -i "${srcdir}/${_patch}"
|
||||
done
|
||||
}
|
||||
|
||||
prepare() {
|
||||
cd ${srcdir}/${pkgname}-${pkgver}
|
||||
|
||||
apply_patch_with_msg \
|
||||
coreutils-8.32-configure.ac.patch \
|
||||
coreutils-8.32-doc-coreutils.texi.patch \
|
||||
coreutils-8.32-lib-freopen.c.patch \
|
||||
coreutils-8.32-lib-hash-pjw.c.patch \
|
||||
coreutils-8.32-lib-hash-pjw.h.patch \
|
||||
coreutils-8.32-lib-local.mk.patch \
|
||||
coreutils-9.1-lib-root-dev-ino.h.patch \
|
||||
coreutils-9.4-lib-root-dev-ino.c.patch \
|
||||
coreutils-8.32-lib-same.c.patch \
|
||||
coreutils-9.4-src-chcon.c.patch \
|
||||
coreutils-8.32-src-chgrp.c.patch \
|
||||
coreutils-9.4-src-chmod.c.patch \
|
||||
coreutils-8.32-src-chown.c.patch \
|
||||
coreutils-9.4-src-chown-core.h.patch \
|
||||
coreutils-8.32-src-chroot.c.patch \
|
||||
coreutils-9.4-src-copy.c.patch \
|
||||
coreutils-8.32-src-dd.c.patch \
|
||||
coreutils-8.32-src-dircolors.c.patch \
|
||||
coreutils-9.4-src-install.c.patch \
|
||||
coreutils-9.4-src-ls.c.patch \
|
||||
coreutils-9.1-src-mv.c.patch \
|
||||
coreutils-8.32-src-pwd.c.patch \
|
||||
coreutils-9.4-src-remove.h.patch \
|
||||
coreutils-8.32-src-rm.c.patch \
|
||||
coreutils-9.4-src-stat.c.patch \
|
||||
coreutils-9-src-dircolors-hin.patch
|
||||
patch -p1 -i ${srcdir}/001-coreutils-8.30.patch
|
||||
patch -p1 -i ${srcdir}/002-coreutils-8.32-enable-stdbuf.patch
|
||||
patch -p1 -i ${srcdir}/003-coreutils-8.32-fix-test-cases.patch
|
||||
|
||||
# https://github.com/msys2/MSYS2-packages/issues/3012
|
||||
apply_patch_with_msg \
|
||||
004-msystem-osname-cygwin.patch
|
||||
|
||||
cp "${srcdir}"/cygwin.c lib/
|
||||
cp "${srcdir}"/cygwin.h src/
|
||||
patch -p1 -i ${srcdir}/004-msystem-osname-cygwin.patch
|
||||
|
||||
autoreconf -fi
|
||||
sed -i -e 's|\(libstdbuf\.so\)$(EXEEXT)|\1|g' Makefile.in
|
||||
}
|
||||
|
||||
build() {
|
||||
[[ -d ${srcdir}/build-${CHOST} ]] && rm -rf ${srcdir}/build-${CHOST}
|
||||
mkdir -p ${srcdir}/build-${CHOST} && cd ${srcdir}/build-${CHOST}
|
||||
|
||||
export CYGWIN_CHOST="${CHOST/-msys/-cygwin}"
|
||||
|
||||
export gl_cv_have_weak=no
|
||||
|
||||
../${pkgname}-${pkgver}/configure \
|
||||
--build=${CYGWIN_CHOST} \
|
||||
--build=${CHOST} \
|
||||
--prefix=/usr \
|
||||
--libexecdir=/usr/lib \
|
||||
--sysconfdir=/etc \
|
||||
|
||||
@ -1,21 +0,0 @@
|
||||
--- origsrc/configure.ac 2016-11-29 12:03:45.000000000 -0600
|
||||
+++ src/configure.ac 2017-02-03 13:32:48.725613200 -0600
|
||||
@@ -470,7 +470,8 @@ gl_WARN_ADD([-Werror], [CFLAGS])
|
||||
gl_WARN_ADD([-errwarn], [CFLAGS])
|
||||
# Put this message here, after gl_WARN_ADD's chatter.
|
||||
AC_MSG_CHECKING([whether this system supports stdbuf])
|
||||
-CFLAGS="-fPIC $CFLAGS"
|
||||
+# -fPIC on cygwin gives lots of warnings
|
||||
+#CFLAGS="-fPIC $CFLAGS"
|
||||
LDFLAGS="-shared $LDFLAGS"
|
||||
stdbuf_supported=no
|
||||
# Note we only LINK here rather than RUN to support cross compilation
|
||||
@@ -488,7 +489,7 @@ AC_LINK_IFELSE(
|
||||
],
|
||||
[stdbuf_supported=yes])
|
||||
AC_MSG_RESULT([$stdbuf_supported])
|
||||
-if test "$stdbuf_supported" = "yes" && test -z "$EXEEXT"; then
|
||||
+if test "$stdbuf_supported" = "yes"; then
|
||||
gl_ADD_PROG([optional_bin_progs], [stdbuf])
|
||||
fi
|
||||
CFLAGS=$ac_save_CFLAGS
|
||||
@ -1,32 +0,0 @@
|
||||
--- origsrc/doc/coreutils.texi 2016-11-24 05:08:31.000000000 -0600
|
||||
+++ src/doc/coreutils.texi 2017-02-03 13:32:48.725613200 -0600
|
||||
@@ -7743,6 +7743,14 @@ These options change how file names them
|
||||
|
||||
@table @samp
|
||||
|
||||
+@item --append-exe
|
||||
+@opindex --append-exe
|
||||
+@cindex appending exe on cygwin
|
||||
+Cygwin only: Cygwin normally performs @samp{.exe} magic, where a
|
||||
+command line argument typed without an .exe extension transparently
|
||||
+refers to the existing file with an extension. Specifying this option
|
||||
+will make the .exe show if cygwin magic was involved.
|
||||
+
|
||||
@item -b
|
||||
@itemx --escape
|
||||
@itemx --quoting-style=escape
|
||||
@@ -11761,6 +11769,14 @@ With this option, @command{stat} acts on
|
||||
by each symbolic link argument.
|
||||
Without it, @command{stat} acts on any symbolic link argument directly.
|
||||
|
||||
+@item --append-exe
|
||||
+@opindex --append-exe
|
||||
+@cindex appending exe on cygwin
|
||||
+Cygwin only: Cygwin normally performs .exe magic, where a command line
|
||||
+argument typed without an .exe extension transparently refers to the
|
||||
+existing file with an extension. Specifying this option will make
|
||||
+the .exe show if cygwin magic was involved.
|
||||
+
|
||||
@item -f
|
||||
@itemx --file-system
|
||||
@opindex -f
|
||||
@ -1,18 +0,0 @@
|
||||
--- origsrc/lib/freopen.c 2020-01-01 07:14:23.000000000 -0700
|
||||
+++ src/lib/freopen.c 2022-04-16 22:41:38.090786400 -0600
|
||||
@@ -59,6 +59,15 @@ rpl_freopen (const char *filename, const
|
||||
errno = 0;
|
||||
#endif
|
||||
|
||||
+#if __CYGWIN__
|
||||
+ if (!filename && !strcmp (mode, "wb"))
|
||||
+ {
|
||||
+ int flag = fcntl (fileno (stream), F_GETFL);
|
||||
+ if (0 <= flag && (flag & O_APPEND))
|
||||
+ mode = "ab";
|
||||
+ }
|
||||
+
|
||||
+#endif
|
||||
result = orig_freopen (filename, mode, stream);
|
||||
|
||||
if (!result)
|
||||
@ -1,27 +0,0 @@
|
||||
--- origsrc/lib/hash-pjw.c 2016-07-15 14:47:39.000000000 -0500
|
||||
+++ src/lib/hash-pjw.c 2017-02-03 13:32:48.725613200 -0600
|
||||
@@ -19,6 +19,7 @@
|
||||
|
||||
#include "hash-pjw.h"
|
||||
|
||||
+#include <ctype.h>
|
||||
#include <limits.h>
|
||||
|
||||
#define SIZE_BITS (sizeof (size_t) * CHAR_BIT)
|
||||
@@ -38,3 +39,16 @@ hash_pjw (const void *x, size_t tablesiz
|
||||
|
||||
return h % tablesize;
|
||||
}
|
||||
+
|
||||
+/* Likewise, but case-insensitive. */
|
||||
+size_t
|
||||
+hash_pjw_case (const void *x, size_t tablesize)
|
||||
+{
|
||||
+ const unsigned char *s;
|
||||
+ size_t h = 0;
|
||||
+
|
||||
+ for (s = x; *s; s++)
|
||||
+ h = tolower (*s) + ((h << 9) | (h >> (SIZE_BITS - 9)));
|
||||
+
|
||||
+ return h % tablesize;
|
||||
+}
|
||||
@ -1,7 +0,0 @@
|
||||
--- origsrc/lib/hash-pjw.h 2016-07-15 14:47:39.000000000 -0500
|
||||
+++ src/lib/hash-pjw.h 2017-02-03 13:32:48.725613200 -0600
|
||||
@@ -21,3 +21,4 @@
|
||||
The result is platform dependent: it depends on the size of the 'size_t'
|
||||
type and on the signedness of the 'char' type. */
|
||||
extern size_t hash_pjw (void const *x, size_t tablesize) _GL_ATTRIBUTE_PURE;
|
||||
+extern size_t hash_pjw_case (void const *x, size_t tablesize) _GL_ATTRIBUTE_PURE;
|
||||
@ -1,9 +0,0 @@
|
||||
--- origsrc/lib/local.mk 2012-11-13 07:51:53.000000000 -0600
|
||||
+++ src/lib/local.mk 2017-02-03 13:32:48.725613200 -0600
|
||||
@@ -3,3 +3,6 @@ include lib/gnulib.mk
|
||||
# Allow "make distdir" to succeed before "make all" has run.
|
||||
dist-hook: $(noinst_LIBRARIES)
|
||||
.PHONY: dist-hook
|
||||
+
|
||||
+# Hook in cygwin helper
|
||||
+lib_libcoreutils_a_SOURCES += lib/cygwin.c lib/cygwin.h
|
||||
@ -1,62 +0,0 @@
|
||||
--- origsrc/lib/same.c 2016-07-15 14:47:39.000000000 -0500
|
||||
+++ src/lib/same.c 2017-02-03 13:32:48.741217700 -0600
|
||||
@@ -40,6 +40,13 @@
|
||||
#include "error.h"
|
||||
#include "same-inode.h"
|
||||
|
||||
+#if __CYGWIN__
|
||||
+# include <sys/cygwin.h>
|
||||
+# include "cygwin.h"
|
||||
+# include "malloca.h"
|
||||
+# include "memcasecmp.h"
|
||||
+#endif
|
||||
+
|
||||
#ifndef MIN
|
||||
# define MIN(a, b) ((a) < (b) ? (a) : (b))
|
||||
#endif
|
||||
@@ -59,6 +66,45 @@ same_name (const char *source, const cha
|
||||
(source_baselen == dest_baselen
|
||||
&& memcmp (source_basename, dest_basename, dest_baselen) == 0);
|
||||
bool compare_dirs = identical_basenames;
|
||||
+#if __CYGWIN__
|
||||
+ /* If two names differ case-insensitively by only an '.exe' suffix,
|
||||
+ do some sleuthing to see if .exe magic matters on the shorter
|
||||
+ name. Swapping the longer name to dest avoids duplication. */
|
||||
+ if (source_baselen == dest_baselen + 4)
|
||||
+ {
|
||||
+ char const *tmp_basename = source_basename;
|
||||
+ size_t tmp_baselen = source_baselen;
|
||||
+ source_basename = dest_basename;
|
||||
+ source_baselen = dest_baselen;
|
||||
+ dest_basename = tmp_basename;
|
||||
+ dest_baselen = tmp_baselen;
|
||||
+ }
|
||||
+ if (source_baselen + 4 == dest_baselen
|
||||
+ && !memcasecmp (dest_basename - 4, ".exe", 4)
|
||||
+ && !memcasecmp (source_basename, dest_basename, source_baselen)
|
||||
+ && 0 < cygwin_spelling(source))
|
||||
+ dest_baselen -= 4;
|
||||
+ /* Some, but not all, files are case-insensitive (depending on mount
|
||||
+ options, CYGWIN=case settings, and virtual file systems). Do
|
||||
+ some sleuthing to decide whether case-insensitivity matters. */
|
||||
+ if (! compare_dirs && source_baselen == dest_baselen)
|
||||
+ {
|
||||
+ ssize_t wsrclen = cygwin_conv_path (CCP_POSIX_TO_WIN_W,
|
||||
+ source, NULL, 0);
|
||||
+ ssize_t wdstlen = cygwin_conv_path (CCP_POSIX_TO_WIN_W,
|
||||
+ dest, NULL, 0);
|
||||
+ char *wsrc = malloca (wsrclen);
|
||||
+ char *wdst = malloca (wdstlen);
|
||||
+ if (cygwin_conv_path (CCP_POSIX_TO_WIN_W, source, wsrc, wsrclen))
|
||||
+ error (EXIT_FAILURE, errno, "unable to convert path name %s", source);
|
||||
+ if (cygwin_conv_path (CCP_POSIX_TO_WIN_W, dest, wdst, wdstlen))
|
||||
+ error (EXIT_FAILURE, errno, "unable to convert path name %s", dest);
|
||||
+ if (wsrclen == wdstlen && memcasecmp (wsrc, wdst, wsrclen) == 0)
|
||||
+ compare_dirs = true;
|
||||
+ freea (wsrc);
|
||||
+ freea (wdst);
|
||||
+ }
|
||||
+#endif /* __CYGWIN__ */
|
||||
bool same = false;
|
||||
|
||||
#if ! _POSIX_NO_TRUNC && HAVE_PATHCONF && defined _PC_NAME_MAX
|
||||
@ -1,11 +0,0 @@
|
||||
--- origsrc/src/chgrp.c 2016-11-06 16:15:29.000000000 -0600
|
||||
+++ src/src/chgrp.c 2017-02-03 13:32:48.741217700 -0600
|
||||
@@ -301,7 +301,7 @@ main (int argc, char **argv)
|
||||
|
||||
if (chopt.recurse && preserve_root)
|
||||
{
|
||||
- static struct dev_ino dev_ino_buf;
|
||||
+ static struct root_dev_ino dev_ino_buf;
|
||||
chopt.root_dev_ino = get_root_dev_ino (&dev_ino_buf);
|
||||
if (chopt.root_dev_ino == NULL)
|
||||
die (EXIT_FAILURE, errno, _("failed to get attributes of %s"),
|
||||
@ -1,11 +0,0 @@
|
||||
--- origsrc/src/chown.c 2016-11-06 16:15:29.000000000 -0600
|
||||
+++ src/src/chown.c 2017-02-03 13:32:48.741217700 -0600
|
||||
@@ -313,7 +313,7 @@ main (int argc, char **argv)
|
||||
|
||||
if (chopt.recurse && preserve_root)
|
||||
{
|
||||
- static struct dev_ino dev_ino_buf;
|
||||
+ static struct root_dev_ino dev_ino_buf;
|
||||
chopt.root_dev_ino = get_root_dev_ino (&dev_ino_buf);
|
||||
if (chopt.root_dev_ino == NULL)
|
||||
die (EXIT_FAILURE, errno, _("failed to get attributes of %s"),
|
||||
@ -1,12 +0,0 @@
|
||||
--- origsrc/src/chroot.c 2016-11-06 16:15:29.000000000 -0600
|
||||
+++ src/src/chroot.c 2017-02-03 13:32:48.741217700 -0600
|
||||
@@ -171,7 +171,8 @@ static bool
|
||||
is_root (const char* dir)
|
||||
{
|
||||
char *resolved = canonicalize_file_name (dir);
|
||||
- bool is_res_root = resolved && STREQ ("/", resolved);
|
||||
+ bool is_res_root = resolved && (STREQ ("/", resolved)
|
||||
+ || STREQ ( "//", resolved));
|
||||
free (resolved);
|
||||
return is_res_root;
|
||||
}
|
||||
@ -1,45 +0,0 @@
|
||||
--- origsrc/src/dd.c 2016-11-09 15:11:35.000000000 -0600
|
||||
+++ src/src/dd.c 2017-02-03 13:32:48.741217700 -0600
|
||||
@@ -37,6 +37,10 @@
|
||||
#include "xstrtol.h"
|
||||
#include "xtime.h"
|
||||
|
||||
+#ifdef __CYGWIN__
|
||||
+# include <io.h>
|
||||
+#endif
|
||||
+
|
||||
/* The official name of this program (e.g., no 'g' prefix). */
|
||||
#define PROGRAM_NAME "dd"
|
||||
|
||||
@@ -1989,6 +1993,13 @@ copy_with_unblock (char const *buf, size
|
||||
static void
|
||||
set_fd_flags (int fd, int add_flags, char const *name)
|
||||
{
|
||||
+#if __CYGWIN__
|
||||
+ /* Cygwin does not allow fcntl to set the mode. */
|
||||
+ int mode_flags = add_flags & (O_BINARY | O_TEXT);
|
||||
+ add_flags &= ~(O_BINARY | O_TEXT);
|
||||
+ if (mode_flags && setmode (fd, mode_flags) == -1)
|
||||
+ error (EXIT_FAILURE, errno, _("setting flags for %s"), quote (name));
|
||||
+#endif /* __CYGWIN__ */
|
||||
/* Ignore file creation flags that are no-ops on file descriptors. */
|
||||
add_flags &= ~ (O_NOCTTY | O_NOFOLLOW);
|
||||
|
||||
@@ -2379,6 +2390,8 @@ main (int argc, char **argv)
|
||||
}
|
||||
else
|
||||
{
|
||||
+ if ((input_flags & (O_BINARY | O_TEXT)) == 0)
|
||||
+ input_flags |= O_BINARY;
|
||||
if (ifd_reopen (STDIN_FILENO, input_file, O_RDONLY | input_flags, 0) < 0)
|
||||
die (EXIT_FAILURE, errno, _("failed to open %s"),
|
||||
quoteaf (input_file));
|
||||
@@ -2402,6 +2415,8 @@ main (int argc, char **argv)
|
||||
| (conversions_mask & C_NOCREAT ? 0 : O_CREAT)
|
||||
| (conversions_mask & C_EXCL ? O_EXCL : 0)
|
||||
| (seek_records || (conversions_mask & C_NOTRUNC) ? 0 : O_TRUNC));
|
||||
+ if ((opts & (O_BINARY | O_TEXT)) == 0)
|
||||
+ opts |= O_BINARY;
|
||||
|
||||
/* Open the output file with *read* access only if we might
|
||||
need to read to satisfy a 'seek=' request. If we can't read
|
||||
@ -1,16 +0,0 @@
|
||||
--- origsrc/src/dircolors.c 2016-11-06 16:15:30.000000000 -0600
|
||||
+++ src/src/dircolors.c 2017-02-03 13:32:48.741217700 -0600
|
||||
@@ -496,8 +496,12 @@ main (int argc, char **argv)
|
||||
}
|
||||
else
|
||||
{
|
||||
+ /* tcsh treats LS_COLORS as a magic shell variable for its
|
||||
+ builtin ls-F, but does not recognize all the categories
|
||||
+ that coreutils ls does. Therefore, silence stderr to
|
||||
+ avoid messages like "Unknown colorls variable `su'.". */
|
||||
prefix = "setenv LS_COLORS '";
|
||||
- suffix = "'\n";
|
||||
+ suffix = "' >&/dev/null\n";
|
||||
}
|
||||
fputs (prefix, stdout);
|
||||
fwrite (s, 1, len, stdout);
|
||||
@ -1,32 +0,0 @@
|
||||
--- origsrc/src/pwd.c 2016-11-06 16:15:30.000000000 -0600
|
||||
+++ src/src/pwd.c 2017-02-03 13:32:48.756816900 -0600
|
||||
@@ -269,8 +269,8 @@ static void
|
||||
robust_getcwd (struct file_name *file_name)
|
||||
{
|
||||
size_t height = 1;
|
||||
- struct dev_ino dev_ino_buf;
|
||||
- struct dev_ino *root_dev_ino = get_root_dev_ino (&dev_ino_buf);
|
||||
+ struct root_dev_ino dev_ino_buf;
|
||||
+ struct root_dev_ino *root_dev_ino = get_root_dev_ino (&dev_ino_buf);
|
||||
struct stat dot_sb;
|
||||
|
||||
if (root_dev_ino == NULL)
|
||||
@@ -283,7 +283,7 @@ robust_getcwd (struct file_name *file_na
|
||||
while (1)
|
||||
{
|
||||
/* If we've reached the root, we're done. */
|
||||
- if (SAME_INODE (dot_sb, *root_dev_ino))
|
||||
+ if (ROOT_DEV_INO_CHECK (root_dev_ino, &dot_sb))
|
||||
break;
|
||||
|
||||
find_dir_entry (&dot_sb, file_name, height++);
|
||||
@@ -292,6 +292,9 @@ robust_getcwd (struct file_name *file_na
|
||||
/* See if a leading slash is needed; file_name_prepend adds one. */
|
||||
if (file_name->start[0] == '\0')
|
||||
file_name_prepend (file_name, "", 0);
|
||||
+ /* If we aren't in `/', we must be in `//'. */
|
||||
+ if (! SAME_INODE (root_dev_ino->single_slash, dot_sb))
|
||||
+ file_name_prepend (file_name, "", 0);
|
||||
}
|
||||
|
||||
|
||||
@ -1,11 +0,0 @@
|
||||
--- origsrc/src/rm.c 2016-11-06 16:15:30.000000000 -0600
|
||||
+++ src/src/rm.c 2017-02-03 13:32:48.756816900 -0600
|
||||
@@ -327,7 +327,7 @@ main (int argc, char **argv)
|
||||
|
||||
if (x.recursive && preserve_root)
|
||||
{
|
||||
- static struct dev_ino dev_ino_buf;
|
||||
+ static struct root_dev_ino dev_ino_buf;
|
||||
x.root_dev_ino = get_root_dev_ino (&dev_ino_buf);
|
||||
if (x.root_dev_ino == NULL)
|
||||
die (EXIT_FAILURE, errno, _("failed to get attributes of %s"),
|
||||
@ -1,84 +0,0 @@
|
||||
--- a/src/dircolors.hin
|
||||
+++ b/src/dircolors.hin
|
||||
@@ -33,6 +33,7 @@ TERM konsole
|
||||
TERM kterm
|
||||
TERM linux
|
||||
TERM linux-c
|
||||
+TERM mintty
|
||||
TERM mlterm
|
||||
TERM putty
|
||||
TERM rxvt*
|
||||
@@ -41,6 +42,9 @@ TERM st
|
||||
TERM terminator
|
||||
TERM tmux*
|
||||
TERM vt100
|
||||
+TERM vt241
|
||||
+TERM vt34*
|
||||
+TERM vt525
|
||||
TERM xterm*
|
||||
|
||||
# ===================================================================
|
||||
@@ -62,6 +66,8 @@ RESET 0 # reset to "normal" color
|
||||
DIR 01;34 # directory
|
||||
LINK 01;36 # symbolic link. (If you set this to 'target' instead of a
|
||||
# numerical value, the color is as for the file pointed to.)
|
||||
+.lnk 01;36 # Windows shortcut
|
||||
+.url 01;36 # Windows Internet shortcut
|
||||
MULTIHARDLINK 00 # regular file with more than one link
|
||||
FIFO 40;33 # pipe
|
||||
SOCK 01;35 # socket
|
||||
@@ -96,10 +102,15 @@ EXEC 01;32
|
||||
#.com 01;32
|
||||
#.btm 01;32
|
||||
#.bat 01;32
|
||||
+#.dll 01;32 # Windows Dynamic Link Library
|
||||
+#.xll 01;32 # Excel extension DLLs
|
||||
# Or if you want to color scripts even if they do not have the
|
||||
# executable bit actually set.
|
||||
#.sh 01;32
|
||||
#.csh 01;32
|
||||
+#.dash 01;32
|
||||
+#.ksh 01;32
|
||||
+#.zsh 01;32
|
||||
|
||||
# archives or compressed (bright red)
|
||||
.tar 01;31
|
||||
@@ -148,6 +159,15 @@ EXEC 01;32
|
||||
.swm 01;31
|
||||
.dwm 01;31
|
||||
.esd 01;31
|
||||
+.epub 01;31
|
||||
+.ods 01;31
|
||||
+.odt 01;31
|
||||
+.docx 01;31
|
||||
+.pptx 01;31
|
||||
+.xlsx 01;31
|
||||
+.xps 01;31
|
||||
+.accumap 01;31
|
||||
+.lwell 01;31
|
||||
|
||||
# image formats
|
||||
.avif 01;35
|
||||
@@ -199,10 +219,14 @@ EXEC 01;32
|
||||
.yuv 01;35
|
||||
.cgm 01;35
|
||||
.emf 01;35
|
||||
+.ico 01;35
|
||||
+.icl 01;35
|
||||
|
||||
# https://wiki.xiph.org/MIME_Types_and_File_Extensions
|
||||
.ogv 01;35
|
||||
.ogx 01;35
|
||||
+.anx 01;35
|
||||
+.axv 01;35
|
||||
|
||||
# audio formats
|
||||
.aac 00;36
|
||||
@@ -223,6 +247,7 @@ EXEC 01;32
|
||||
.opus 00;36
|
||||
.spx 00;36
|
||||
.xspf 00;36
|
||||
+.axa 00;36
|
||||
|
||||
# backup files
|
||||
*~ 00;90
|
||||
@ -1,33 +0,0 @@
|
||||
--- origsrc/lib/root-dev-ino.h 2022-04-08 05:22:17.000000000 -0600
|
||||
+++ src/lib/root-dev-ino.h 2022-05-08 00:59:46.346838200 -0600
|
||||
@@ -21,19 +21,26 @@
|
||||
# include "dev-ino.h"
|
||||
# include "same-inode.h"
|
||||
|
||||
-struct dev_ino *
|
||||
-get_root_dev_ino (struct dev_ino *root_d_i) _GL_ATTRIBUTE_NONNULL ();
|
||||
+struct root_dev_ino
|
||||
+{
|
||||
+ struct dev_ino single_slash;
|
||||
+ struct dev_ino double_slash;
|
||||
+};
|
||||
+
|
||||
+struct root_dev_ino *
|
||||
+get_root_dev_ino (struct root_dev_ino *root_d_i) _GL_ATTRIBUTE_NONNULL ();
|
||||
|
||||
/* These macros are common to the programs that support the
|
||||
--preserve-root and --no-preserve-root options. */
|
||||
|
||||
# define ROOT_DEV_INO_CHECK(Root_dev_ino, Dir_statbuf) \
|
||||
- (Root_dev_ino && SAME_INODE (*Dir_statbuf, *Root_dev_ino))
|
||||
+ (Root_dev_ino && (SAME_INODE (*Dir_statbuf, (Root_dev_ino)->single_slash) \
|
||||
+ || SAME_INODE (*Dir_statbuf, (Root_dev_ino)->double_slash)))
|
||||
|
||||
# define ROOT_DEV_INO_WARN(Dirname) \
|
||||
do \
|
||||
{ \
|
||||
- if (STREQ (Dirname, "/")) \
|
||||
+ if (STREQ (Dirname, "/") || STREQ (Dirname, "//")) \
|
||||
error (0, 0, _("it is dangerous to operate recursively on %s"), \
|
||||
quoteaf (Dirname)); \
|
||||
else \
|
||||
@ -1,28 +0,0 @@
|
||||
--- origsrc/src/mv.c 2022-04-13 13:09:25.000000000 -0600
|
||||
+++ src/src/mv.c 2022-05-08 02:06:40.887810300 -0600
|
||||
@@ -91,7 +91,7 @@ rm_option_init (struct rm_options *x)
|
||||
x->require_restore_cwd = true;
|
||||
|
||||
{
|
||||
- static struct dev_ino dev_ino_buf;
|
||||
+ static struct root_dev_ino dev_ino_buf;
|
||||
x->root_dev_ino = get_root_dev_ino (&dev_ino_buf);
|
||||
if (x->root_dev_ino == NULL)
|
||||
die (EXIT_FAILURE, errno, _("failed to get attributes of %s"),
|
||||
@@ -407,6 +407,16 @@ main (int argc, char **argv)
|
||||
else
|
||||
{
|
||||
char const *lastfile = file[n_files - 1];
|
||||
+#if __CYGWIN__
|
||||
+ struct stat s1, s2;
|
||||
+ if (2 == n_files
|
||||
+ && lstat (file[0], &s1) == 0 && lstat (file[1], &s2) == 0
|
||||
+ && s1.st_ino == s2.st_ino)
|
||||
+ {
|
||||
+ /* Allow 'mv foo Foo' to change case of the directory foo. */
|
||||
+ }
|
||||
+ else
|
||||
+#endif /* __CYGWIN__ */
|
||||
if (n_files == 2)
|
||||
x.rename_errno = (renameatu (AT_FDCWD, file[0], AT_FDCWD, lastfile,
|
||||
RENAME_NOREPLACE)
|
||||
@ -1,24 +0,0 @@
|
||||
--- origsrc/lib/root-dev-ino.c 2023-07-05 05:09:55.000000000 -0600
|
||||
+++ src/lib/root-dev-ino.c 2023-09-09 20:00:54.772122500 -0600
|
||||
@@ -25,13 +25,17 @@
|
||||
/* Call lstat to get the device and inode numbers for '/'.
|
||||
Upon failure, return NULL. Otherwise, set the members of
|
||||
*ROOT_D_I accordingly and return ROOT_D_I. */
|
||||
-struct dev_ino *
|
||||
-get_root_dev_ino (struct dev_ino *root_d_i)
|
||||
+struct root_dev_ino *
|
||||
+get_root_dev_ino (struct root_dev_ino *root_d_i)
|
||||
{
|
||||
struct stat statbuf;
|
||||
if (lstat ("/", &statbuf))
|
||||
return nullptr;
|
||||
- root_d_i->st_ino = statbuf.st_ino;
|
||||
- root_d_i->st_dev = statbuf.st_dev;
|
||||
+ root_d_i->single_slash.st_ino = statbuf.st_ino;
|
||||
+ root_d_i->single_slash.st_dev = statbuf.st_dev;
|
||||
+ if (lstat ("//", &statbuf))
|
||||
+ return nullptr;
|
||||
+ root_d_i->double_slash.st_ino = statbuf.st_ino;
|
||||
+ root_d_i->double_slash.st_dev = statbuf.st_dev;
|
||||
return root_d_i;
|
||||
}
|
||||
@ -1,20 +0,0 @@
|
||||
--- origsrc/src/chcon.c 2023-07-05 05:09:55.000000000 -0600
|
||||
+++ src/src/chcon.c 2023-09-09 20:07:55.163173700 -0600
|
||||
@@ -47,7 +47,7 @@ static bool verbose;
|
||||
|
||||
/* Pointer to the device and inode numbers of '/', when --recursive.
|
||||
Otherwise nullptr. */
|
||||
-static struct dev_ino *root_dev_ino;
|
||||
+static struct root_dev_ino *root_dev_ino;
|
||||
|
||||
/* The name of the context file is being given. */
|
||||
static char const *specified_context;
|
||||
@@ -571,7 +571,7 @@ main (int argc, char **argv)
|
||||
|
||||
if (recurse && preserve_root)
|
||||
{
|
||||
- static struct dev_ino dev_ino_buf;
|
||||
+ static struct root_dev_ino dev_ino_buf;
|
||||
root_dev_ino = get_root_dev_ino (&dev_ino_buf);
|
||||
if (root_dev_ino == nullptr)
|
||||
die (EXIT_FAILURE, errno, _("failed to get attributes of %s"),
|
||||
@ -1,20 +0,0 @@
|
||||
--- origsrc/src/chmod.c 2023-08-29 05:39:27.000000000 -0600
|
||||
+++ src/src/chmod.c 2023-09-09 20:16:41.171411900 -0600
|
||||
@@ -87,7 +87,7 @@ static enum Verbosity verbosity = V_off;
|
||||
|
||||
/* Pointer to the device and inode numbers of '/', when --recursive.
|
||||
Otherwise nullptr. */
|
||||
-static struct dev_ino *root_dev_ino;
|
||||
+static struct root_dev_ino *root_dev_ino;
|
||||
|
||||
/* For long options that have no equivalent short option, use a
|
||||
non-character as a pseudo short option, starting with CHAR_MAX + 1. */
|
||||
@@ -553,7 +553,7 @@ main (int argc, char **argv)
|
||||
|
||||
if (recurse && preserve_root)
|
||||
{
|
||||
- static struct dev_ino dev_ino_buf;
|
||||
+ static struct root_dev_ino dev_ino_buf;
|
||||
root_dev_ino = get_root_dev_ino (&dev_ino_buf);
|
||||
if (root_dev_ino == nullptr)
|
||||
die (EXIT_FAILURE, errno, _("failed to get attributes of %s"),
|
||||
@ -1,11 +0,0 @@
|
||||
--- origsrc/src/chown-core.h 2023-07-05 05:09:55.000000000 -0600
|
||||
+++ src/src/chown-core.h 2023-09-09 20:22:55.569928600 -0600
|
||||
@@ -51,7 +51,7 @@ struct Chown_option
|
||||
|
||||
/* Pointer to the device and inode numbers of '/', when --recursive.
|
||||
Need not be freed. Otherwise nullptr. */
|
||||
- struct dev_ino *root_dev_ino;
|
||||
+ struct root_dev_ino *root_dev_ino;
|
||||
|
||||
/* This corresponds to the --dereference (opposite of -h) option. */
|
||||
bool affect_symlink_referent;
|
||||
@ -1,158 +0,0 @@
|
||||
--- origsrc/src/copy.c 2023-08-29 05:39:27.000000000 -0600
|
||||
+++ src/src/copy.c 2023-09-09 22:06:16.745397400 -0600
|
||||
@@ -83,6 +83,10 @@
|
||||
#ifdef HAVE_LINUX_FS_H
|
||||
# include <linux/fs.h>
|
||||
#endif
|
||||
+
|
||||
+#ifdef __CYGWIN__
|
||||
+# include "cygwin.h"
|
||||
+#endif
|
||||
|
||||
#if !defined FICLONE && defined __linux__
|
||||
# define FICLONE _IOW (0x94, 9, int)
|
||||
@@ -1738,7 +1742,11 @@ close_src_desc:
|
||||
static bool
|
||||
same_file_ok (char const *src_name, struct stat const *src_sb,
|
||||
int dst_dirfd, char const *dst_relname, struct stat const *dst_sb,
|
||||
- const struct cp_options *x, bool *return_now)
|
||||
+ const struct cp_options *x, bool *return_now
|
||||
+#if __CYGWIN__
|
||||
+ , bool *case_change
|
||||
+#endif
|
||||
+ )
|
||||
{
|
||||
const struct stat *src_sb_link;
|
||||
const struct stat *dst_sb_link;
|
||||
@@ -1883,6 +1891,18 @@ same_file_ok (char const *src_name, stru
|
||||
if (S_ISLNK (dst_sb_link->st_mode))
|
||||
return true;
|
||||
|
||||
+#if __CYGWIN__
|
||||
+ /* If the files have the same name, but differ in case, then let
|
||||
+ rename() change the case. */
|
||||
+ if (same_link && x->move_mode && same_name (src_name, dst_relname)
|
||||
+ && memcmp (last_component (src_name), last_component (dst_relname),
|
||||
+ base_len (src_name)))
|
||||
+ {
|
||||
+ *case_change = true;
|
||||
+ return true;
|
||||
+ }
|
||||
+#endif
|
||||
+
|
||||
/* It's not ok if they're distinct hard links to the same file as
|
||||
this causes a race condition and we may lose data in this case. */
|
||||
if (same_link
|
||||
@@ -2316,13 +2336,23 @@ copy_internal (char const *src_name, cha
|
||||
if (!use_lstat && nonexistent_dst < 0)
|
||||
new_dst = true;
|
||||
else if (follow_fstatat (dst_dirfd, drelname, &dst_sb, fstatat_flags)
|
||||
- == 0)
|
||||
+ == 0
|
||||
+#if __CYGWIN__
|
||||
+ /* stat("a") succeeds if "a.exe" - only identical accepted. */
|
||||
+ && cygwin_spelling (drelname) == 0
|
||||
+#endif
|
||||
+ )
|
||||
{
|
||||
have_dst_lstat = use_lstat;
|
||||
rename_errno = EEXIST;
|
||||
}
|
||||
else
|
||||
{
|
||||
+#if __CYGWIN__
|
||||
+ /* only DST_RELNAME.exe exists - want non-existant DST_RELNAME. */
|
||||
+ if (cygwin_spelling (drelname) != 0)
|
||||
+ errno = ENOENT;
|
||||
+#endif
|
||||
if (errno == ELOOP && x->unlink_dest_after_failed_open)
|
||||
/* leave new_dst=false so we unlink later. */;
|
||||
else if (errno != ENOENT)
|
||||
@@ -2340,10 +2370,17 @@ copy_internal (char const *src_name, cha
|
||||
bool return_now = false;
|
||||
bool return_val = true;
|
||||
bool skipped = false;
|
||||
+#if __CYGWIN__
|
||||
+ bool case_change = false;
|
||||
+#endif
|
||||
|
||||
if ((x->interactive != I_ALWAYS_NO && x->interactive != I_ALWAYS_SKIP)
|
||||
&& ! same_file_ok (src_name, &src_sb, dst_dirfd, drelname,
|
||||
- &dst_sb, x, &return_now))
|
||||
+ &dst_sb, x, &return_now
|
||||
+#if __CYGWIN__
|
||||
+ , &case_change
|
||||
+#endif
|
||||
+ ))
|
||||
{
|
||||
error (0, 0, _("%s and %s are the same file"),
|
||||
quoteaf_n (0, src_name), quoteaf_n (1, dst_name));
|
||||
@@ -2406,6 +2443,9 @@ copy_internal (char const *src_name, cha
|
||||
cp and mv treat -i and -f differently. */
|
||||
if (x->move_mode)
|
||||
{
|
||||
+#if __CYGWIN__
|
||||
+ if (!case_change)
|
||||
+#endif
|
||||
if (abandon_move (x, dst_name, dst_dirfd, drelname, &dst_sb))
|
||||
{
|
||||
/* Pretend the rename succeeded, so the caller (mv)
|
||||
@@ -2572,7 +2612,11 @@ skip:
|
||||
&& ! x->move_mode
|
||||
&& (x->unlink_dest_before_opening
|
||||
|| (x->data_copy_required
|
||||
- && ((x->preserve_links && 1 < dst_sb.st_nlink)
|
||||
+ && ((x->preserve_links && 1 < dst_sb.st_nlink
|
||||
+#if __CYGWIN__
|
||||
+ && ! case_change
|
||||
+#endif
|
||||
+ )
|
||||
|| (x->dereference == DEREF_NEVER
|
||||
&& ! S_ISREG (src_sb.st_mode))))
|
||||
))
|
||||
@@ -3407,6 +3451,24 @@ copy (char const *src_name, char const *
|
||||
{
|
||||
valid_options (options);
|
||||
|
||||
+#if __CYGWIN__
|
||||
+ /* .exe magic - if src exists with an implicit .exe suffix and is
|
||||
+ not a symlink, but dst does not exist and was also specified
|
||||
+ without a suffix, then append .exe to dst. */
|
||||
+ int cygwin = cygwin_spelling (src_name);
|
||||
+ char *p;
|
||||
+ if (cygwin == 2
|
||||
+ && ((p = strchr (dst_name, '\0') - 4) <= dst_name
|
||||
+ || strcasecmp (p, ".exe") != 0))
|
||||
+ {
|
||||
+ cygwin = 3;
|
||||
+ CYGWIN_APPEND_EXE (p, dst_name);
|
||||
+ if ((p = strchr (dst_relname, '\0') - 4) <= dst_relname
|
||||
+ || strcasecmp (p, ".exe") != 0)
|
||||
+ CYGWIN_APPEND_EXE (p, dst_relname);
|
||||
+ }
|
||||
+#endif
|
||||
+
|
||||
/* Record the file names: they're used in case of error, when copying
|
||||
a directory into itself. I don't like to make these tools do *any*
|
||||
extra work in the common case when that work is solely to handle
|
||||
@@ -3418,11 +3480,19 @@ copy (char const *src_name, char const *
|
||||
top_level_dst_name = dst_name;
|
||||
|
||||
bool first_dir_created_per_command_line_arg = false;
|
||||
- return copy_internal (src_name, dst_name, dst_dirfd, dst_relname,
|
||||
+ bool done = copy_internal (src_name, dst_name, dst_dirfd, dst_relname,
|
||||
nonexistent_dst, nullptr, nullptr,
|
||||
options, true,
|
||||
&first_dir_created_per_command_line_arg,
|
||||
copy_into_self, rename_succeeded);
|
||||
+#if __CYGWIN__
|
||||
+ if (cygwin == 3)
|
||||
+ {
|
||||
+ freea ((char *) dst_name);
|
||||
+ freea ((char *) dst_relname);
|
||||
+ }
|
||||
+#endif
|
||||
+ return done;
|
||||
}
|
||||
|
||||
/* Set *X to the default options for a value of type struct cp_options. */
|
||||
@ -1,30 +0,0 @@
|
||||
--- origsrc/src/install.c 2023-07-05 05:09:55.000000000 -0600
|
||||
+++ src/src/install.c 2023-09-09 22:14:29.695309700 -0600
|
||||
@@ -44,6 +44,10 @@
|
||||
#include "utimens.h"
|
||||
#include "xstrtol.h"
|
||||
|
||||
+#ifdef __CYGWIN__
|
||||
+# include "cygwin.h"
|
||||
+#endif
|
||||
+
|
||||
/* The official name of this program (e.g., no 'g' prefix). */
|
||||
#define PROGRAM_NAME "install"
|
||||
|
||||
@@ -504,6 +508,16 @@ strip (char const *name)
|
||||
char const *safe_name = name;
|
||||
if (name && *name == '-')
|
||||
safe_name = file_name_concat (".", name, nullptr);
|
||||
+#if __CYGWIN__
|
||||
+ {
|
||||
+ /* Check for .exe here, since strip doesn't. */
|
||||
+ char *p;
|
||||
+ if (((p = strchr (safe_name, '\0') - 4) <= safe_name
|
||||
+ || strcasecmp (p, ".exe") != 0)
|
||||
+ && 0 < cygwin_spelling (safe_name))
|
||||
+ CYGWIN_APPEND_EXE (p, safe_name);
|
||||
+ }
|
||||
+#endif /* __CYGWIN__ */
|
||||
execlp (strip_program, strip_program, safe_name, nullptr);
|
||||
error (EXIT_FAILURE, errno, _("cannot run %s"),
|
||||
quoteaf (strip_program));
|
||||
@ -1,114 +0,0 @@
|
||||
--- origsrc/src/ls.c 2023-08-29 05:39:27.000000000 -0600
|
||||
+++ src/src/ls.c 2023-09-10 13:32:12.438677000 -0600
|
||||
@@ -122,6 +122,10 @@
|
||||
# include <sys/capability.h>
|
||||
#endif
|
||||
|
||||
+#ifdef __CYGWIN__
|
||||
+# include "cygwin.h"
|
||||
+#endif
|
||||
+
|
||||
#define PROGRAM_NAME (ls_mode == LS_LS ? "ls" \
|
||||
: (ls_mode == LS_MULTI_COL \
|
||||
? "dir" : "vdir"))
|
||||
@@ -791,6 +795,11 @@ static char const *long_time_format[2] =
|
||||
N_("%b %e %H:%M")
|
||||
};
|
||||
|
||||
+#if __CYGWIN__
|
||||
+/* Whether .exe should be appended to command-line args as needed. */
|
||||
+static bool append_exe;
|
||||
+#endif /* __CYGWIN__ */
|
||||
+
|
||||
/* The set of signals that are caught. */
|
||||
|
||||
static sigset_t caught_signals;
|
||||
@@ -826,6 +835,9 @@ enum
|
||||
enum
|
||||
{
|
||||
AUTHOR_OPTION = CHAR_MAX + 1,
|
||||
+#ifdef __CYGWIN__
|
||||
+ APPEND_EXE_OPTION,
|
||||
+#endif
|
||||
BLOCK_SIZE_OPTION,
|
||||
COLOR_OPTION,
|
||||
DEREFERENCE_COMMAND_LINE_SYMLINK_TO_DIR_OPTION,
|
||||
@@ -891,6 +903,9 @@ static struct option const long_options[
|
||||
{"block-size", required_argument, nullptr, BLOCK_SIZE_OPTION},
|
||||
{"context", no_argument, 0, 'Z'},
|
||||
{"author", no_argument, nullptr, AUTHOR_OPTION},
|
||||
+#ifdef __CYGWIN__
|
||||
+ {"append-exe", no_argument, nullptr, APPEND_EXE_OPTION},
|
||||
+#endif
|
||||
{GETOPT_HELP_OPTION_DECL},
|
||||
{GETOPT_VERSION_OPTION_DECL},
|
||||
{nullptr, 0, nullptr, 0}
|
||||
@@ -2233,6 +2248,12 @@ decode_switches (int argc, char **argv)
|
||||
quoting_style_opt = literal_quoting_style;
|
||||
break;
|
||||
|
||||
+#ifdef __CYGWIN__
|
||||
+ case APPEND_EXE_OPTION:
|
||||
+ append_exe = true;
|
||||
+ break;
|
||||
+#endif
|
||||
+
|
||||
case_GETOPT_HELP_CHAR;
|
||||
|
||||
case_GETOPT_VERSION_CHAR (PROGRAM_NAME, AUTHORS);
|
||||
@@ -3373,6 +3394,12 @@ gobble_file (char const *name, enum file
|
||||
uintmax_t blocks = 0;
|
||||
struct fileinfo *f;
|
||||
|
||||
+#ifdef __CYGWIN__
|
||||
+ char *name_alt = nullptr;
|
||||
+ if (command_line_arg && append_exe && 0 < cygwin_spelling (name))
|
||||
+ CYGWIN_APPEND_EXE (name_alt, name);
|
||||
+#endif /* __CYGWIN__ */
|
||||
+
|
||||
/* An inode value prior to gobble_file necessarily came from readdir,
|
||||
which is not used for command line arguments. */
|
||||
affirm (! command_line_arg || inode == NOT_AN_INODE_NUMBER);
|
||||
@@ -3507,11 +3534,19 @@ gobble_file (char const *name, enum file
|
||||
f->scontext = UNKNOWN_SECURITY_CONTEXT;
|
||||
|
||||
if (command_line_arg)
|
||||
- return 0;
|
||||
+ {
|
||||
+#ifdef __CYGWIN__
|
||||
+ freea (name_alt);
|
||||
+#endif
|
||||
+ return 0;
|
||||
+ }
|
||||
|
||||
f->name = xstrdup (name);
|
||||
cwd_n_used++;
|
||||
|
||||
+#ifdef __CYGWIN__
|
||||
+ freea (name_alt);
|
||||
+#endif
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -3688,6 +3723,9 @@ gobble_file (char const *name, enum file
|
||||
f->name = xstrdup (name);
|
||||
cwd_n_used++;
|
||||
|
||||
+#ifdef __CYGWIN__
|
||||
+ freea (name_alt);
|
||||
+#endif
|
||||
return blocks;
|
||||
}
|
||||
|
||||
@@ -5612,6 +5650,11 @@ Sort entries alphabetically if none of -
|
||||
--zero end each output line with NUL, not newline\n\
|
||||
-1 list one file per line\n\
|
||||
"), stdout);
|
||||
+#if __CYGWIN__
|
||||
+ fputs (_("\
|
||||
+ --append-exe append .exe if cygwin magic was needed\n\
|
||||
+"), stdout);
|
||||
+#endif /* __CYGWIN__ */
|
||||
fputs (HELP_OPTION_DESCRIPTION, stdout);
|
||||
fputs (VERSION_OPTION_DESCRIPTION, stdout);
|
||||
emit_size_note ();
|
||||
@ -1,11 +0,0 @@
|
||||
--- origsrc/src/remove.h 2023-09-10 13:37:14.816502400 -0600
|
||||
+++ src/src/remove.h 2023-09-10 13:36:42.028328800 -0600
|
||||
@@ -54,7 +54,7 @@ struct rm_options
|
||||
|
||||
/* Pointer to the device and inode numbers of '/', when --recursive
|
||||
and preserving '/'. Otherwise null. */
|
||||
- struct dev_ino *root_dev_ino;
|
||||
+ struct root_dev_ino *root_dev_ino;
|
||||
|
||||
/* If true, do not traverse into (or remove) any directory that is
|
||||
the root of a file system. I.e., a separate device. */
|
||||
@ -1,120 +0,0 @@
|
||||
--- origsrc/src/stat.c 2023-08-29 05:39:27.000000000 -0600
|
||||
+++ src/src/stat.c 2023-09-10 13:40:50.600410000 -0600
|
||||
@@ -71,6 +71,13 @@
|
||||
#include "xvasprintf.h"
|
||||
#include "statx.h"
|
||||
|
||||
+#ifdef __CYGWIN__
|
||||
+# include "cygwin.h"
|
||||
+/* Whether .exe should be appended to command-line args as needed. */
|
||||
+static bool append_exe;
|
||||
+# define APPEND_EXE_OPTION 10000
|
||||
+#endif
|
||||
+
|
||||
#if HAVE_STATX && defined STATX_INO
|
||||
# define USE_STATX 1
|
||||
#else
|
||||
@@ -223,6 +230,9 @@ static struct option const long_options[
|
||||
{"printf", required_argument, nullptr, PRINTF_OPTION},
|
||||
{"terse", no_argument, nullptr, 't'},
|
||||
{"cached", required_argument, nullptr, 0},
|
||||
+#ifdef __CYGWIN__
|
||||
+ {"append-exe", no_argument, nullptr, APPEND_EXE_OPTION},
|
||||
+#endif
|
||||
{GETOPT_HELP_OPTION_DECL},
|
||||
{GETOPT_VERSION_OPTION_DECL},
|
||||
{nullptr, 0, nullptr, 0}
|
||||
@@ -1267,14 +1277,26 @@ do_statfs (char const *filename, char co
|
||||
return false;
|
||||
}
|
||||
|
||||
+#ifdef __CYGWIN__
|
||||
+ char *name_alt = nullptr;
|
||||
+ if (append_exe && 0 < cygwin_spelling (filename))
|
||||
+ CYGWIN_APPEND_EXE (name_alt, filename);
|
||||
+#endif /* __CYGWIN__ */
|
||||
+
|
||||
if (STATFS (filename, &statfsbuf) != 0)
|
||||
{
|
||||
error (0, errno, _("cannot read file system information for %s"),
|
||||
quoteaf (filename));
|
||||
+#if __CYGWIN__
|
||||
+ freea (name_alt);
|
||||
+#endif /* __CYGWIN__ */
|
||||
return false;
|
||||
}
|
||||
|
||||
bool fail = print_it (format, -1, filename, print_statfs, &statfsbuf);
|
||||
+#if __CYGWIN__
|
||||
+ freea (name_alt);
|
||||
+#endif /* __CYGWIN__ */
|
||||
return ! fail;
|
||||
}
|
||||
|
||||
@@ -1459,6 +1481,7 @@ do_stat (char const *filename, char const
|
||||
int fd = STREQ (filename, "-") ? 0 : -1;
|
||||
struct stat statbuf;
|
||||
struct print_args pa;
|
||||
+ char *name_alt = nullptr;
|
||||
pa.st = &statbuf;
|
||||
pa.btime = (struct timespec) {-1, -1};
|
||||
|
||||
@@ -1473,18 +1496,28 @@ do_stat (char const *filename, char cons
|
||||
/* We can't use the shorter
|
||||
(follow_links?stat:lstat) (filename, &statbug)
|
||||
since stat might be a function-like macro. */
|
||||
- else if ((follow_links
|
||||
- ? stat (filename, &statbuf)
|
||||
- : lstat (filename, &statbuf)) != 0)
|
||||
+ else
|
||||
{
|
||||
- error (0, errno, _("cannot stat %s"), quoteaf (filename));
|
||||
- return false;
|
||||
+ if ((follow_links
|
||||
+ ? stat (filename, &statbuf)
|
||||
+ : lstat (filename, &statbuf)) != 0)
|
||||
+ {
|
||||
+ error (0, errno, _("cannot stat %s"), quoteaf (filename));
|
||||
+ return false;
|
||||
+ }
|
||||
+#ifdef __CYGWIN__
|
||||
+ if (append_exe && 0 < cygwin_spelling (filename))
|
||||
+ CYGWIN_APPEND_EXE (name_alt, filename);
|
||||
+#endif /* __CYGWIN__ */
|
||||
}
|
||||
|
||||
if (S_ISBLK (statbuf.st_mode) || S_ISCHR (statbuf.st_mode))
|
||||
format = format2;
|
||||
|
||||
bool fail = print_it (format, fd, filename, print_stat, &pa);
|
||||
+#if __CYGWIN__
|
||||
+ freea (name_alt);
|
||||
+#endif /* __CYGWIN__ */
|
||||
return ! fail;
|
||||
}
|
||||
|
||||
@@ -1775,6 +1808,11 @@ Display file or file system status.\n\
|
||||
if you want a newline, include \\n in FORMAT\n\
|
||||
-t, --terse print the information in terse form\n\
|
||||
"), stdout);
|
||||
+#if __CYGWIN__
|
||||
+ fputs (_("\
|
||||
+ --append-exe append .exe if cygwin magic was needed\n\
|
||||
+"), stdout);
|
||||
+#endif /* __CYGWIN__ */
|
||||
fputs (HELP_OPTION_DESCRIPTION, stdout);
|
||||
fputs (VERSION_OPTION_DESCRIPTION, stdout);
|
||||
|
||||
@@ -1941,6 +1979,12 @@ main (int argc, char *argv[])
|
||||
}
|
||||
break;
|
||||
|
||||
+#if __CYGWIN__
|
||||
+ case APPEND_EXE_OPTION:
|
||||
+ append_exe = true;
|
||||
+ break;
|
||||
+#endif /* __CYGWIN__ */
|
||||
+
|
||||
case_GETOPT_HELP_CHAR;
|
||||
|
||||
case_GETOPT_VERSION_CHAR (PROGRAM_NAME, AUTHORS);
|
||||
@ -1,73 +0,0 @@
|
||||
/* cygwin.c - helper functions unique to Cygwin
|
||||
|
||||
Copyright (C) 2005, 2006, 2008, 2011 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
|
||||
the Free Software Foundation; either version 3, or (at your option)
|
||||
any later version.
|
||||
|
||||
This program 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 General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software Foundation,
|
||||
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
Written by Eric Blake. */
|
||||
|
||||
#include <config.h>
|
||||
|
||||
#include "cygwin.h"
|
||||
|
||||
#include <errno.h>
|
||||
#include <limits.h>
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
|
||||
/* Return -1 if PATH is not found, 0 if PATH will not have .exe
|
||||
appended (it is possible that a PATH that does not exist still
|
||||
returns 0 instead of -1, or fails for a PATH that exists but cannot
|
||||
be stat'ed), and positive if PATH has ".exe" automatically appended
|
||||
by cygwin (1 if PATH is a symlink, 2 otherwise). Won't change errno. */
|
||||
|
||||
int
|
||||
cygwin_spelling (char const *path)
|
||||
{
|
||||
int saved_errno = errno;
|
||||
int result = 0; /* Start with assumption that PATH is okay. */
|
||||
size_t len;
|
||||
struct stat st1;
|
||||
struct stat st2;
|
||||
char *path_exe;
|
||||
|
||||
/* If PATH will cause EINVAL or ENAMETOOLONG, treat it as missing. */
|
||||
if (! path || ! *path)
|
||||
return -1;
|
||||
if (PATH_MAX < (len = strlen (path)))
|
||||
return -1;
|
||||
/* Don't change spelling if there is a trailing `/' or '.exe'. */
|
||||
if (path[len - 1] == '/'
|
||||
|| (len > 4 && !strcasecmp (&path[len - 4], ".exe")))
|
||||
return 0;
|
||||
if (lstat (path, &st1) < 0)
|
||||
{
|
||||
errno = saved_errno;
|
||||
return -1;
|
||||
}
|
||||
if (S_ISDIR(st1.st_mode))
|
||||
{
|
||||
errno = saved_errno;
|
||||
return 0;
|
||||
}
|
||||
path_exe = malloca (len + 5); /* adding ".exe" and NUL. */
|
||||
strcat (stpcpy (path_exe, path), ".exe");
|
||||
if (lstat (path_exe, &st2) == 0 && st1.st_ino == st2.st_ino)
|
||||
result = 1 + !S_ISLNK(st1.st_mode);
|
||||
freea (path_exe);
|
||||
|
||||
errno = saved_errno;
|
||||
return result;
|
||||
}
|
||||
@ -1,38 +0,0 @@
|
||||
/* cygwin.h - helper functions unique to Cygwin
|
||||
|
||||
Copyright (C) 2005, 2006, 2008, 2010, 2011 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
|
||||
the Free Software Foundation; either version 3, or (at your option)
|
||||
any later version.
|
||||
|
||||
This program 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 General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software Foundation,
|
||||
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
Written by Eric Blake. */
|
||||
|
||||
#ifndef CYGWIN_H
|
||||
# define CYGWIN_H 1
|
||||
|
||||
#include "malloca.h"
|
||||
|
||||
int cygwin_spelling (char const *);
|
||||
|
||||
/* Append ".exe" to char *__NAME_ORIG, where __NAME is either NULL or
|
||||
between __NAME_ORIG and the nul terminator. Both params will be
|
||||
evaluated more than once and assigned the new value. The user must
|
||||
later call freea(__NAME). */
|
||||
#define CYGWIN_APPEND_EXE(__name, __name_orig) \
|
||||
__name_orig = __name = \
|
||||
strcat (strcpy (malloca (strchr (__name ? __name : __name_orig, '\0') \
|
||||
- (__name_orig) + 5), \
|
||||
__name_orig), ".exe")
|
||||
|
||||
#endif /* CYGWIN_H */
|
||||
Loading…
x
Reference in New Issue
Block a user