diff --git a/coreutils/001-coreutils-8.30.patch b/coreutils/001-coreutils-8.30.patch
new file mode 100644
index 00000000..0157ff01
--- /dev/null
+++ b/coreutils/001-coreutils-8.30.patch
@@ -0,0 +1,1083 @@
+diff -Naur a/build-aux/compile b/build-aux/compile
+--- a/build-aux/compile 2014-07-19 02:02:06.000000000 +0400
++++ b/build-aux/compile 2014-07-20 20:19:52.863800000 +0400
+@@ -53,7 +53,7 @@
+ MINGW*)
+ file_conv=mingw
+ ;;
+- CYGWIN*)
++ CYGWIN* | MSYS*)
+ file_conv=cygwin
+ ;;
+ *)
+@@ -67,7 +67,7 @@
+ mingw/*)
+ file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'`
+ ;;
+- cygwin/*)
++ cygwin/* | msys/*)
+ file=`cygpath -m "$file" || echo "$file"`
+ ;;
+ wine/*)
+diff -Naur a/gnulib-tests/test-copy-acl.sh b/gnulib-tests/test-copy-acl.sh
+--- a/gnulib-tests/test-copy-acl.sh 2013-12-04 18:53:33.000000000 +0400
++++ b/gnulib-tests/test-copy-acl.sh 2014-07-20 20:19:52.895000000 +0400
+@@ -128,7 +128,7 @@
+ # the programs.
+ # func_test_same_acls file1 file2
+ case $acl_flavor in
+- linux | cygwin | freebsd | solaris)
++ linux | cygwin | msys | freebsd | solaris)
+ func_test_same_acls ()
+ {
+ getfacl "$1" | sed -e "s/$1/FILENAME/g" > tmpaclout1
+@@ -302,7 +302,7 @@
+
+ ;;
+
+- cygwin)
++ cygwin | msys)
+
+ # Set an ACL for a group.
+ setfacl -m group:0:1 tmpfile0
+diff -Naur a/gnulib-tests/test-file-has-acl.sh b/gnulib-tests/test-file-has-acl.sh
+--- a/gnulib-tests/test-file-has-acl.sh 2013-12-04 18:53:33.000000000 +0400
++++ b/gnulib-tests/test-file-has-acl.sh 2014-07-20 20:19:52.910600000 +0400
+@@ -247,7 +247,7 @@
+ fi
+ ;;
+
+- cygwin)
++ cygwin | msys)
+
+ # Set an ACL for a group.
+ if setfacl -m group:0:1 tmpfile0; then
+diff -Naur a/gnulib-tests/test-set-mode-acl.sh b/gnulib-tests/test-set-mode-acl.sh
+--- a/gnulib-tests/test-set-mode-acl.sh 2013-12-04 18:53:33.000000000 +0400
++++ b/gnulib-tests/test-set-mode-acl.sh 2014-07-20 20:19:52.910600000 +0400
+@@ -177,7 +177,7 @@
+ linux | freebsd | solaris)
+ setfacl -m user:$auid:1 tmpfile0
+ ;;
+- cygwin)
++ cygwin | msys)
+ setfacl -m group:0:1 tmpfile0
+ ;;
+ hpux)
+diff -Naur a/install.exe.manifest b/install.exe.manifest
+--- a/install.exe.manifest 1970-01-01 03:00:00.000000000 +0300
++++ b/install.exe.manifest 2014-07-20 20:19:52.910600000 +0400
+@@ -0,0 +1,11 @@
++
++
++
++
++
++
++
++
++
++
++
+diff -Naur a/src/install.manifest b/src/install.manifest
+--- a/src/install.manifest 1970-01-01 03:00:00.000000000 +0300
++++ b/src/install.manifest 2014-07-20 20:19:47.591000000 +0400
+@@ -0,0 +1,16 @@
++
++
++
++
++
++
++
++
++
++
++
++
++
+diff -Naur a/src/install.rc b/src/install.rc
+--- a/src/install.rc 1970-01-01 03:00:00.000000000 +0300
++++ b/src/install.rc 2014-07-20 20:19:47.606600000 +0400
+@@ -0,0 +1 @@
++1 24 install.manifest
+--- a/Makefile.in.orig 2018-09-16 13:23:25.153210900 +0200
++++ a/Makefile.in 2018-09-16 13:39:17.989133200 +0200
+@@ -989,7 +989,7 @@
+ lib/openat-proc.c lib/backupfile.c lib/backup-rename.c \
+ lib/backup-find.c lib/base32.h lib/base32.c lib/base64.h \
+ lib/base64.c lib/binary-io.h lib/binary-io.c lib/bitrotate.h \
+- lib/bitrotate.c lib/buffer-lcm.c lib/buffer-lcm.h \
++ lib/bitrotate.c lib/buffer-lcm.c lib/buffer-lcm.h lib/cygwin.c lib/cygwin.h \
+ lib/c-ctype.h lib/c-ctype.c lib/c-strcase.h lib/c-strcasecmp.c \
+ lib/c-strncasecmp.c lib/c-strtod.c lib/c-strtold.c \
+ lib/canon-host.c lib/canonicalize.c lib/careadlinkat.c \
+@@ -1078,7 +1078,7 @@
+ lib/backupfile.$(OBJEXT) lib/backup-find.$(OBJEXT) \
+ lib/base32.$(OBJEXT) lib/base64.$(OBJEXT) \
+ lib/binary-io.$(OBJEXT) lib/bitrotate.$(OBJEXT) \
+- lib/buffer-lcm.$(OBJEXT) lib/c-ctype.$(OBJEXT) \
++ lib/buffer-lcm.$(OBJEXT) lib/cygwin.$(OBJEXT) lib/c-ctype.$(OBJEXT) \
+ lib/c-strcasecmp.$(OBJEXT) lib/c-strncasecmp.$(OBJEXT) \
+ lib/c-strtod.$(OBJEXT) lib/c-strtold.$(OBJEXT) \
+ lib/canon-host.$(OBJEXT) lib/canonicalize.$(OBJEXT) \
+@@ -3930,6 +3930,7 @@
+ WINDOWS_64_BIT_ST_SIZE = @WINDOWS_64_BIT_ST_SIZE@
+ WINDOWS_STAT_INODES = @WINDOWS_STAT_INODES@
+ WINDOWS_STAT_TIMESPEC = @WINDOWS_STAT_TIMESPEC@
++WINDRES = windres
+ WINT_T_SUFFIX = @WINT_T_SUFFIX@
+ XGETTEXT = @XGETTEXT@
+ XGETTEXT_015 = @XGETTEXT_015@
+@@ -5309,7 +5310,7 @@
+ lib/backupfile.c lib/backup-find.c lib/base32.h lib/base32.c \
+ lib/base64.h lib/base64.c lib/binary-io.h lib/binary-io.c \
+ lib/bitrotate.h lib/bitrotate.c lib/buffer-lcm.c \
+- lib/buffer-lcm.h lib/c-ctype.h lib/c-ctype.c lib/c-strcase.h \
++ lib/buffer-lcm.h lib/cygwin.c lib/cygwin.h lib/c-ctype.c lib/c-strcase.h \
+ lib/c-strcasecmp.c lib/c-strncasecmp.c lib/c-strtod.c \
+ lib/c-strtold.c lib/canon-host.c lib/canonicalize.c \
+ lib/careadlinkat.c lib/chmodat.c lib/chownat.c lib/cl-strtod.c \
+@@ -6097,6 +6098,8 @@
+ lib/$(DEPDIR)/$(am__dirstamp)
+ lib/buffer-lcm.$(OBJEXT): lib/$(am__dirstamp) \
+ lib/$(DEPDIR)/$(am__dirstamp)
++lib/cygwin.$(OBJEXT): lib/$(am__dirstamp) \
++ lib/$(DEPDIR)/$(am__dirstamp)
+ lib/c-ctype.$(OBJEXT): lib/$(am__dirstamp) \
+ lib/$(DEPDIR)/$(am__dirstamp)
+ lib/c-strcasecmp.$(OBJEXT): lib/$(am__dirstamp) \
+@@ -9110,9 +9113,9 @@
+ src/src_ginstall-selinux.$(OBJEXT): src/$(am__dirstamp) \
+ src/$(DEPDIR)/$(am__dirstamp)
+
+-src/ginstall$(EXEEXT): $(src_ginstall_OBJECTS) $(src_ginstall_DEPENDENCIES) $(EXTRA_src_ginstall_DEPENDENCIES) src/$(am__dirstamp)
++src/ginstall$(EXEEXT): $(src_ginstall_OBJECTS) src/src_ginstall-manifest.res $(src_ginstall_DEPENDENCIES) $(EXTRA_src_ginstall_DEPENDENCIES) src/$(am__dirstamp)
+ @rm -f src/ginstall$(EXEEXT)
+- $(AM_V_CCLD)$(LINK) $(src_ginstall_OBJECTS) $(src_ginstall_LDADD) $(LIBS)
++ $(AM_V_CCLD)$(LINK) $(src_ginstall_OBJECTS) src/src_ginstall-manifest.res $(src_ginstall_LDADD) $(LIBS)
+ src/groups.$(OBJEXT): src/$(am__dirstamp) \
+ src/$(DEPDIR)/$(am__dirstamp)
+ src/group-list.$(OBJEXT): src/$(am__dirstamp) \
+@@ -10029,6 +10031,9 @@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(src_libsinglebin_fold_a_CFLAGS) $(CFLAGS) -c -o src/libsinglebin_fold_a-fold.obj `if test -f 'src/fold.c'; then $(CYGPATH_W) 'src/fold.c'; else $(CYGPATH_W) '$(srcdir)/src/fold.c'; fi`
+
++src/src_ginstall-manifest.res: src/install.rc src/install.manifest
++ $(WINDRES) --input $< --output $@ --output-format=coff
++
+ src/libsinglebin_ginstall_a-install.o: src/install.c
+ @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_libsinglebin_ginstall_a_CPPFLAGS) $(CPPFLAGS) $(src_libsinglebin_ginstall_a_CFLAGS) $(CFLAGS) -MT src/libsinglebin_ginstall_a-install.o -MD -MP -MF src/$(DEPDIR)/libsinglebin_ginstall_a-install.Tpo -c -o src/libsinglebin_ginstall_a-install.o `test -f 'src/install.c' || echo '$(srcdir)/'`src/install.c
+ @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/libsinglebin_ginstall_a-install.Tpo src/$(DEPDIR)/libsinglebin_ginstall_a-install.Po
+--- a/lib/cygwin.c 1969-12-31 18:00:00.000000000 -0600
++++ b/lib/cygwin.c 2017-02-03 13:32:48.725613200 -0600
+@@ -0,0 +1,73 @@
++/* 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
++
++#include "cygwin.h"
++
++#include
++#include
++#include
++#include
++
++/* 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;
++}
+--- a/lib/cygwin.h 1969-12-31 18:00:00.000000000 -0600
++++ b/lib/cygwin.h 2017-02-03 13:32:48.725613200 -0600
+@@ -0,0 +1,38 @@
++/* 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 */
+--- a/lib/hash-pjw.c 2016-07-15 14:47:39.000000000 -0500
++++ b/lib/hash-pjw.c 2017-02-03 13:32:48.725613200 -0600
+@@ -19,6 +19,7 @@
+
+ #include "hash-pjw.h"
+
++#include
+ #include
+
+ #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;
++}
+--- a/lib/hash-pjw.h 2016-07-15 14:47:39.000000000 -0500
++++ b/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;
+--- a/lib/hash-triple.c 2016-07-15 14:47:39.000000000 -0500
++++ b/lib/hash-triple.c 2017-02-03 13:32:48.725613200 -0600
+@@ -34,7 +34,13 @@ size_t
+ triple_hash (void const *x, size_t table_size)
+ {
+ struct F_triple const *p = x;
++#ifndef __CYGWIN__
+ size_t tmp = hash_pjw (p->name, table_size);
++#else
++ /* Hash case-insensitively, to force collisions on names that differ only
++ by case; copy.c can then account for case-insensitive renames. */
++ size_t tmp = hash_pjw_case (p->name, table_size);
++#endif
+
+ /* Ignoring the device number here should be fine. */
+ return (tmp ^ p->st_ino) % table_size;
+--- a/lib/local.mk 2012-11-13 07:51:53.000000000 -0600
++++ b/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
+--- a/lib/root-dev-ino.c 2016-03-09 04:15:39.000000000 -0600
++++ b/lib/root-dev-ino.c 2017-02-03 13:32:48.725613200 -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 NULL;
+- 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 NULL;
++ root_d_i->double_slash.st_ino = statbuf.st_ino;
++ root_d_i->double_slash.st_dev = statbuf.st_dev;
+ return root_d_i;
+ }
+--- a/lib/root-dev-ino.h 2016-03-09 04:15:39.000000000 -0600
++++ b/lib/root-dev-ino.h 2017-02-03 13:32:48.741217700 -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);
++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);
+
+ /* 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 \
+--- a/lib/same.c 2018-05-14 06:20:31.000000000 +0200
++++ b/lib/same.c 2018-09-16 13:54:23.478109900 +0200
+@@ -41,6 +41,13 @@
+ #include "error.h"
+ #include "same-inode.h"
+
++#if __CYGWIN__
++# include
++# include "cygwin.h"
++# include "malloca.h"
++# include "memcasecmp.h"
++#endif
++
+ #ifndef MIN
+ # define MIN(a, b) ((a) < (b) ? (a) : (b))
+ #endif
+@@ -79,6 +86,45 @@
+ (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 CHECK_TRUNCATION
+--- a/src/chcon.c 2016-11-06 16:15:29.000000000 -0600
++++ b/src/chcon.c 2017-02-03 13:32:48.741217700 -0600
+@@ -48,7 +48,7 @@ static bool verbose;
+
+ /* Pointer to the device and inode numbers of '/', when --recursive.
+ Otherwise NULL. */
+-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;
+@@ -570,7 +570,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 == NULL)
+ die (EXIT_FAILURE, errno, _("failed to get attributes of %s"),
+--- a/src/chgrp.c 2016-11-06 16:15:29.000000000 -0600
++++ b/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"),
+--- a/src/chmod.c 2016-11-06 16:15:29.000000000 -0600
++++ b/src/chmod.c 2017-02-03 13:32:48.741217700 -0600
+@@ -81,7 +81,7 @@ static enum Verbosity verbosity = V_off;
+
+ /* Pointer to the device and inode numbers of '/', when --recursive.
+ Otherwise NULL. */
+-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. */
+@@ -552,7 +552,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 == NULL)
+ die (EXIT_FAILURE, errno, _("failed to get attributes of %s"),
+--- a/src/chown-core.h 2016-03-09 04:15:39.000000000 -0600
++++ b/src/chown-core.h 2017-02-03 13:32:48.741217700 -0600
+@@ -50,7 +50,7 @@ struct Chown_option
+
+ /* Pointer to the device and inode numbers of '/', when --recursive.
+ Need not be freed. Otherwise NULL. */
+- 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;
+--- a/src/chown.c 2016-11-06 16:15:29.000000000 -0600
++++ b/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"),
+--- a/src/chroot.c 2016-11-06 16:15:29.000000000 -0600
++++ b/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;
+ }
+--- a/src/cksum.c 2016-11-06 16:15:29.000000000 -0600
++++ b/src/cksum.c 2017-02-03 13:32:48.741217700 -0600
+@@ -301,6 +301,9 @@ main (int argc, char **argv)
+
+ have_read_stdin = false;
+
++ if (O_BINARY)
++ xset_binary_mode (STDIN_FILENO, O_BINARY);
++
+ if (optind == argc)
+ ok = cksum ("-", false);
+ else
+--- a/src/dd.c 2016-11-09 15:11:35.000000000 -0600
++++ b/src/dd.c 2017-02-03 13:32:48.741217700 -0600
+@@ -38,6 +38,10 @@
+ #include "xstrtol.h"
+ #include "xtime.h"
+
++#ifdef __CYGWIN__
++# include
++#endif
++
+ /* The official name of this program (e.g., no 'g' prefix). */
+ #define PROGRAM_NAME "dd"
+
+@@ -2024,6 +2028,13 @@
+ 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);
+
+@@ -2418,6 +2429,8 @@
+ }
+ 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));
+@@ -2441,6 +2454,8 @@
+ | (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
+--- a/src/install.c 2016-11-28 10:17:17.000000000 -0600
++++ b/src/install.c 2017-02-03 13:32:48.741217700 -0600
+@@ -45,6 +45,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"
+
+@@ -556,6 +560,16 @@ strip (char const *name)
+ error (0, errno, _("fork system call failed"));
+ break;
+ case 0: /* Child. */
++#if __CYGWIN__
++ {
++ /* Check for .exe here, since strip doesn't. */
++ char *p;
++ if (((p = strchr (name, '\0') - 4) <= name
++ || strcasecmp (p, ".exe") != 0)
++ && 0 < cygwin_spelling (name))
++ CYGWIN_APPEND_EXE (p, name);
++ }
++#endif /* __CYGWIN__ */
+ execlp (strip_program, strip_program, name, NULL);
+ die (EXIT_FAILURE, errno, _("cannot run %s"), quoteaf (strip_program));
+ default: /* Parent. */
+--- a/src/ls.c 2016-11-22 14:04:32.000000000 -0600
++++ b/src/ls.c 2017-02-03 13:32:48.741217700 -0600
+@@ -122,6 +122,10 @@
+ # include
+ #endif
+
++#ifdef __CYGWIN__
++# include "cygwin.h"
++#endif
++
+ #define PROGRAM_NAME (ls_mode == LS_LS ? "ls" \
+ : (ls_mode == LS_MULTI_COL \
+ ? "dir" : "vdir"))
+@@ -783,6 +787,11 @@
+ 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;
+@@ -818,6 +827,9 @@
+ enum
+ {
+ AUTHOR_OPTION = CHAR_MAX + 1,
++#ifdef __CYGWIN__
++ APPEND_EXE_OPTION,
++#endif
+ BLOCK_SIZE_OPTION,
+ COLOR_OPTION,
+ DEREFERENCE_COMMAND_LINE_SYMLINK_TO_DIR_OPTION,
+@@ -881,6 +893,9 @@
+ {"block-size", required_argument, NULL, BLOCK_SIZE_OPTION},
+ {"context", no_argument, 0, 'Z'},
+ {"author", no_argument, NULL, AUTHOR_OPTION},
++#ifdef __CYGWIN__
++ {"append-exe", no_argument, NULL, APPEND_EXE_OPTION},
++#endif
+ {GETOPT_HELP_OPTION_DECL},
+ {GETOPT_VERSION_OPTION_DECL},
+ {NULL, 0, NULL, 0}
+@@ -2099,6 +2114,12 @@
+ print_scontext = true;
+ break;
+
++#ifdef __CYGWIN__
++ case APPEND_EXE_OPTION:
++ append_exe = true;
++ break;
++#endif
++
+ case_GETOPT_HELP_CHAR;
+
+ case_GETOPT_VERSION_CHAR (PROGRAM_NAME, AUTHORS);
+@@ -3110,6 +3131,12 @@
+ uintmax_t blocks = 0;
+ struct fileinfo *f;
+
++#ifdef __CYGWIN__
++ char *name_alt = NULL;
++ 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. */
+ assert (! command_line_arg || inode == NOT_AN_INODE_NUMBER);
+@@ -3240,11 +3267,19 @@
+ file_failure (command_line_arg,
+ _("cannot access %s"), full_name);
+ 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;
+ }
+
+@@ -3433,6 +3468,9 @@
+ f->name = xstrdup (name);
+ cwd_n_used++;
+
++#ifdef __CYGWIN__
++ freea (name_alt);
++#endif
+ return blocks;
+ }
+
+@@ -5277,6 +5315,11 @@
+ -1 list one file per line. Avoid '\\n' with -q or -b\
+ \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 ();
+--- a/src/md5sum.c 2016-11-22 14:04:32.000000000 -0600
++++ b/src/md5sum.c 2017-02-03 13:32:48.741217700 -0600
+@@ -1039,6 +1039,9 @@ main (int argc, char **argv)
+ if (optind == argc)
+ *operand_lim++ = bad_cast ("-");
+
++ if (O_BINARY)
++ xset_binary_mode (STDIN_FILENO, O_BINARY);
++
+ for (char **operandp = argv + optind; operandp < operand_lim; operandp++)
+ {
+ char *file = *operandp;
+--- a/src/mv.c 2016-11-22 12:57:27.000000000 -0600
++++ b/src/mv.c 2017-02-03 13:32:48.756816900 -0600
+@@ -93,7 +93,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"),
+--- a/src/pwd.c 2016-11-06 16:15:30.000000000 -0600
++++ b/src/pwd.c 2017-02-03 13:32:48.756816900 -0600
+@@ -268,8 +268,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)
+@@ -282,7 +282,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++);
+@@ -291,6 +291,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);
+ }
+
+
+--- a/src/remove.h 2016-03-09 04:15:39.000000000 -0600
++++ b/src/remove.h 2017-02-03 13:32:48.756816900 -0600
+@@ -54,7 +54,7 @@
+
+ /* 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. */
+--- a/src/rm.c 2016-11-06 16:15:30.000000000 -0600
++++ b/src/rm.c 2017-02-03 13:32:48.756816900 -0600
+@@ -342,7 +342,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"),
+--- a/src/stat.c 2016-11-26 18:28:45.000000000 -0600
++++ b/src/stat.c 2017-02-03 13:32:48.756816900 -0600
+@@ -74,6 +74,13 @@
+ #include "find-mount-point.h"
+ #include "xvasprintf.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 USE_STATVFS
+ # define STRUCT_STATXFS_F_FSID_IS_INTEGER STRUCT_STATVFS_F_FSID_IS_INTEGER
+ # define HAVE_STRUCT_STATXFS_F_TYPE HAVE_STRUCT_STATVFS_F_TYPE
+@@ -201,6 +208,9 @@
+ {"printf", required_argument, NULL, PRINTF_OPTION},
+ {"terse", no_argument, NULL, 't'},
+ {"cached", required_argument, NULL, 0},
++#ifdef __CYGWIN__
++ {"append-exe", no_argument, NULL, APPEND_EXE_OPTION},
++#endif
+ {GETOPT_HELP_OPTION_DECL},
+ {GETOPT_VERSION_OPTION_DECL},
+ {NULL, 0, NULL, 0}
+@@ -1352,14 +1362,26 @@
+ return false;
+ }
+
++#ifdef __CYGWIN__
++ char *name_alt = NULL;
++ 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;
+ }
+
+@@ -1421,6 +1421,7 @@
+ struct print_args pa;
+ pa.st = &statbuf;
+ pa.btime = (struct timespec) {-1, -1};
++ char *name_alt = NULL;
+
+ if (0 <= fd)
+ {
+@@ -1433,18 +1433,28 @@
+ /* 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;
+ }
+ #endif /* USE_STATX */
+@@ -1513,6 +1546,11 @@
+ 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);
+
+@@ -1649,6 +1687,12 @@
+ terse = true;
+ break;
+
++#if __CYGWIN__
++ case APPEND_EXE_OPTION:
++ append_exe = true;
++ break;
++#endif /* __CYGWIN__ */
++
+ case_GETOPT_HELP_CHAR;
+
+ case_GETOPT_VERSION_CHAR (PROGRAM_NAME, AUTHORS);
+--- a/src/copy.c 2016-11-22 12:57:27.000000000 -0600
++++ b/src/copy.c 2017-02-03 13:32:48.741217700 -0600
+@@ -82,6 +82,10 @@
+ # include
+ #endif
+
++#ifdef __CYGWIN__
++# include "cygwin.h"
++#endif
++
+ #if !defined FICLONE && defined __linux__
+ # define FICLONE _IOW (0x94, 9, int)
+ #endif
+@@ -1427,7 +1431,11 @@
+ static bool
+ same_file_ok (char const *src_name, struct stat const *src_sb,
+ char const *dst_name, struct stat const *dst_sb,
+- const struct cp_options *x, bool *return_now)
++ const struct cp_options *x, bool *return_now
++#ifdef __CYGWIN__
++ , bool *case_change
++#endif
++ )
+ {
+ const struct stat *src_sb_link;
+ const struct stat *dst_sb_link;
+@@ -1571,6 +1579,18 @@
+ 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_name)
++ && memcmp (last_component (src_name), last_component (dst_name),
++ base_len (src_name)))
++ {
++ *case_change = true;
++ return true;
++ }
++#endif /* __CYGWIN__ */
++
+ /* 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
+@@ -1930,6 +1950,9 @@
+ }
+
+ bool dereference = should_dereference (x, command_line_arg);
++#if __CYGWIN__
++ bool case_change = false;
++#endif /* __CYGWIN__ */
+
+ if (!new_dst)
+ {
+@@ -1974,7 +1997,11 @@
+
+ if (x->interactive != I_ALWAYS_NO
+ && ! same_file_ok (src_name, &src_sb, dst_name, &dst_sb,
+- x, &return_now))
++ x, &return_now
++#ifdef __CYGWIN__
++ , &case_change
++#endif
++ ))
+ {
+ error (0, 0, _("%s and %s are the same file"),
+ quoteaf_n (0, src_name), quoteaf_n (1, dst_name));
+@@ -2033,6 +2060,9 @@
+ 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_sb))
+ {
+ /* Pretend the rename succeeded, so the caller (mv)
+@@ -2174,7 +2204,11 @@
+ /* Never unlink dst_name when in move mode. */
+ && ! x->move_mode
+ && (x->unlink_dest_before_opening
+- || (x->preserve_links && 1 < dst_sb.st_nlink)
++ || (x->preserve_links && 1 < dst_sb.st_nlink
++#ifdef __CYGWIN__
++ && !case_change
++#endif
++ )
+ || (x->dereference == DEREF_NEVER
+ && ! S_ISREG (src_sb.st_mode))
+ ))
+@@ -2973,6 +3007,21 @@
+ {
+ assert (valid_options (options));
+
++#ifdef __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);
++ }
++#endif /* __CYGWIN__ */
++
+ /* 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
+@@ -2984,10 +3033,16 @@
+ top_level_dst_name = dst_name;
+
+ bool first_dir_created_per_command_line_arg = false;
+- return copy_internal (src_name, dst_name, nonexistent_dst, NULL, NULL,
++ bool done;
++ done = copy_internal (src_name, dst_name, nonexistent_dst, NULL, NULL,
+ options, true,
+ &first_dir_created_per_command_line_arg,
+ copy_into_self, rename_succeeded);
++#ifdef __CYGWIN__
++ if (cygwin == 3)
++ freea ((char *) dst_name);
++#endif
++ return done;
+ }
+
+ /* Set *X to the default options for a value of type struct cp_options. */
diff --git a/coreutils/002-coreutils-8.32-enable-stdbuf.patch b/coreutils/002-coreutils-8.32-enable-stdbuf.patch
new file mode 100644
index 00000000..9d2636a9
--- /dev/null
+++ b/coreutils/002-coreutils-8.32-enable-stdbuf.patch
@@ -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")
+
diff --git a/coreutils/003-coreutils-8.32-fix-test-cases.patch b/coreutils/003-coreutils-8.32-fix-test-cases.patch
new file mode 100644
index 00000000..0cc50a43
--- /dev/null
+++ b/coreutils/003-coreutils-8.32-fix-test-cases.patch
@@ -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
+ }
diff --git a/coreutils/PKGBUILD b/coreutils/PKGBUILD
index b04b92c7..8f7753ae 100644
--- a/coreutils/PKGBUILD
+++ b/coreutils/PKGBUILD
@@ -1,136 +1,48 @@
# Maintainer: Alexey Pavlov
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 \
diff --git a/coreutils/coreutils-8.32-configure.ac.patch b/coreutils/coreutils-8.32-configure.ac.patch
deleted file mode 100644
index c6bd6257..00000000
--- a/coreutils/coreutils-8.32-configure.ac.patch
+++ /dev/null
@@ -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
diff --git a/coreutils/coreutils-8.32-doc-coreutils.texi.patch b/coreutils/coreutils-8.32-doc-coreutils.texi.patch
deleted file mode 100644
index b40376b6..00000000
--- a/coreutils/coreutils-8.32-doc-coreutils.texi.patch
+++ /dev/null
@@ -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
diff --git a/coreutils/coreutils-8.32-lib-freopen.c.patch b/coreutils/coreutils-8.32-lib-freopen.c.patch
deleted file mode 100644
index d98155cc..00000000
--- a/coreutils/coreutils-8.32-lib-freopen.c.patch
+++ /dev/null
@@ -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)
diff --git a/coreutils/coreutils-8.32-lib-hash-pjw.c.patch b/coreutils/coreutils-8.32-lib-hash-pjw.c.patch
deleted file mode 100644
index 496b1cd0..00000000
--- a/coreutils/coreutils-8.32-lib-hash-pjw.c.patch
+++ /dev/null
@@ -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
- #include
-
- #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;
-+}
diff --git a/coreutils/coreutils-8.32-lib-hash-pjw.h.patch b/coreutils/coreutils-8.32-lib-hash-pjw.h.patch
deleted file mode 100644
index ec97c218..00000000
--- a/coreutils/coreutils-8.32-lib-hash-pjw.h.patch
+++ /dev/null
@@ -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;
diff --git a/coreutils/coreutils-8.32-lib-local.mk.patch b/coreutils/coreutils-8.32-lib-local.mk.patch
deleted file mode 100644
index 2780e636..00000000
--- a/coreutils/coreutils-8.32-lib-local.mk.patch
+++ /dev/null
@@ -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
diff --git a/coreutils/coreutils-8.32-lib-same.c.patch b/coreutils/coreutils-8.32-lib-same.c.patch
deleted file mode 100644
index dc22bcf3..00000000
--- a/coreutils/coreutils-8.32-lib-same.c.patch
+++ /dev/null
@@ -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
-+# 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
diff --git a/coreutils/coreutils-8.32-src-chgrp.c.patch b/coreutils/coreutils-8.32-src-chgrp.c.patch
deleted file mode 100644
index faaf24c6..00000000
--- a/coreutils/coreutils-8.32-src-chgrp.c.patch
+++ /dev/null
@@ -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"),
diff --git a/coreutils/coreutils-8.32-src-chown.c.patch b/coreutils/coreutils-8.32-src-chown.c.patch
deleted file mode 100644
index 5db363fe..00000000
--- a/coreutils/coreutils-8.32-src-chown.c.patch
+++ /dev/null
@@ -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"),
diff --git a/coreutils/coreutils-8.32-src-chroot.c.patch b/coreutils/coreutils-8.32-src-chroot.c.patch
deleted file mode 100644
index a15cac10..00000000
--- a/coreutils/coreutils-8.32-src-chroot.c.patch
+++ /dev/null
@@ -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;
- }
diff --git a/coreutils/coreutils-8.32-src-dd.c.patch b/coreutils/coreutils-8.32-src-dd.c.patch
deleted file mode 100644
index a72fd07f..00000000
--- a/coreutils/coreutils-8.32-src-dd.c.patch
+++ /dev/null
@@ -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
-+#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
diff --git a/coreutils/coreutils-8.32-src-dircolors.c.patch b/coreutils/coreutils-8.32-src-dircolors.c.patch
deleted file mode 100644
index 7b6e9ef0..00000000
--- a/coreutils/coreutils-8.32-src-dircolors.c.patch
+++ /dev/null
@@ -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);
diff --git a/coreutils/coreutils-8.32-src-pwd.c.patch b/coreutils/coreutils-8.32-src-pwd.c.patch
deleted file mode 100644
index 17952084..00000000
--- a/coreutils/coreutils-8.32-src-pwd.c.patch
+++ /dev/null
@@ -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);
- }
-
-
diff --git a/coreutils/coreutils-8.32-src-rm.c.patch b/coreutils/coreutils-8.32-src-rm.c.patch
deleted file mode 100644
index c1f99285..00000000
--- a/coreutils/coreutils-8.32-src-rm.c.patch
+++ /dev/null
@@ -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"),
diff --git a/coreutils/coreutils-9-src-dircolors-hin.patch b/coreutils/coreutils-9-src-dircolors-hin.patch
deleted file mode 100644
index c43fae88..00000000
--- a/coreutils/coreutils-9-src-dircolors-hin.patch
+++ /dev/null
@@ -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
diff --git a/coreutils/coreutils-9.1-lib-root-dev-ino.h.patch b/coreutils/coreutils-9.1-lib-root-dev-ino.h.patch
deleted file mode 100644
index 20078c9f..00000000
--- a/coreutils/coreutils-9.1-lib-root-dev-ino.h.patch
+++ /dev/null
@@ -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 \
diff --git a/coreutils/coreutils-9.1-src-mv.c.patch b/coreutils/coreutils-9.1-src-mv.c.patch
deleted file mode 100644
index 3f153a1b..00000000
--- a/coreutils/coreutils-9.1-src-mv.c.patch
+++ /dev/null
@@ -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)
diff --git a/coreutils/coreutils-9.4-lib-root-dev-ino.c.patch b/coreutils/coreutils-9.4-lib-root-dev-ino.c.patch
deleted file mode 100644
index 17bc807a..00000000
--- a/coreutils/coreutils-9.4-lib-root-dev-ino.c.patch
+++ /dev/null
@@ -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;
- }
diff --git a/coreutils/coreutils-9.4-src-chcon.c.patch b/coreutils/coreutils-9.4-src-chcon.c.patch
deleted file mode 100644
index 00673415..00000000
--- a/coreutils/coreutils-9.4-src-chcon.c.patch
+++ /dev/null
@@ -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"),
diff --git a/coreutils/coreutils-9.4-src-chmod.c.patch b/coreutils/coreutils-9.4-src-chmod.c.patch
deleted file mode 100644
index 7f35aaa4..00000000
--- a/coreutils/coreutils-9.4-src-chmod.c.patch
+++ /dev/null
@@ -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"),
diff --git a/coreutils/coreutils-9.4-src-chown-core.h.patch b/coreutils/coreutils-9.4-src-chown-core.h.patch
deleted file mode 100644
index 5037a448..00000000
--- a/coreutils/coreutils-9.4-src-chown-core.h.patch
+++ /dev/null
@@ -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;
diff --git a/coreutils/coreutils-9.4-src-copy.c.patch b/coreutils/coreutils-9.4-src-copy.c.patch
deleted file mode 100644
index dba357f8..00000000
--- a/coreutils/coreutils-9.4-src-copy.c.patch
+++ /dev/null
@@ -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
- #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. */
diff --git a/coreutils/coreutils-9.4-src-install.c.patch b/coreutils/coreutils-9.4-src-install.c.patch
deleted file mode 100644
index 7111b0b4..00000000
--- a/coreutils/coreutils-9.4-src-install.c.patch
+++ /dev/null
@@ -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));
diff --git a/coreutils/coreutils-9.4-src-ls.c.patch b/coreutils/coreutils-9.4-src-ls.c.patch
deleted file mode 100644
index f7b4e4c3..00000000
--- a/coreutils/coreutils-9.4-src-ls.c.patch
+++ /dev/null
@@ -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
- #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 ();
diff --git a/coreutils/coreutils-9.4-src-remove.h.patch b/coreutils/coreutils-9.4-src-remove.h.patch
deleted file mode 100644
index ac35f3cc..00000000
--- a/coreutils/coreutils-9.4-src-remove.h.patch
+++ /dev/null
@@ -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. */
diff --git a/coreutils/coreutils-9.4-src-stat.c.patch b/coreutils/coreutils-9.4-src-stat.c.patch
deleted file mode 100644
index 66300ee9..00000000
--- a/coreutils/coreutils-9.4-src-stat.c.patch
+++ /dev/null
@@ -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);
diff --git a/coreutils/cygwin.c b/coreutils/cygwin.c
deleted file mode 100644
index d6cc0486..00000000
--- a/coreutils/cygwin.c
+++ /dev/null
@@ -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
-
-#include "cygwin.h"
-
-#include
-#include
-#include
-#include
-
-/* 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;
-}
diff --git a/coreutils/cygwin.h b/coreutils/cygwin.h
deleted file mode 100644
index d0318f58..00000000
--- a/coreutils/cygwin.h
+++ /dev/null
@@ -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 */