Compare commits
10 Commits
Author | SHA1 | Date |
---|---|---|
Sebastian Kisela | b1830c7601 | |
Kamil Dudka | fbd3619072 | |
Kamil Dudka | ff7a1bf5b1 | |
Kamil Dudka | 1e1a10a04a | |
Kamil Dudka | 1ce862f0bb | |
Kamil Dudka | cd51eb58a5 | |
Kamil Dudka | fdd7dd0f39 | |
Kamil Dudka | f90bb3d8a4 | |
Jakub Martisko | fd67498083 | |
Jakub Martisko | fa93a02304 |
|
@ -1,2 +1,19 @@
|
|||
/coreutils-[0-9.]*.tar.xz
|
||||
/coreutils-[0-9.]*.tar.xz.sig
|
||||
/coreutils-8.10.tar.xz
|
||||
/coreutils-8.11.tar.xz
|
||||
/coreutils-8.12.tar.xz
|
||||
/coreutils-8.13.tar.xz
|
||||
/coreutils-8.14.tar.xz
|
||||
/coreutils-8.15.tar.xz
|
||||
/coreutils-8.16.tar.xz
|
||||
/coreutils-8.17.tar.xz
|
||||
/coreutils-8.18.tar.xz
|
||||
/coreutils-8.19.tar.xz
|
||||
/coreutils-8.20.tar.xz
|
||||
/coreutils-8.21.tar.xz
|
||||
/coreutils-8.22.tar.xz
|
||||
/coreutils-8.23.tar.xz
|
||||
/coreutils-8.23.tar.xz.sig
|
||||
/coreutils-8.24.tar.xz
|
||||
/coreutils-8.24.tar.xz.sig
|
||||
/coreutils-8.25.tar.xz
|
||||
/coreutils-8.25.tar.xz.sig
|
||||
|
|
|
@ -0,0 +1,18 @@
|
|||
--- coreutils-5.92/src/date.c.langinfo 2005-09-16 09:06:57.000000000 +0100
|
||||
+++ coreutils-5.92/src/date.c 2005-10-24 18:09:16.000000000 +0100
|
||||
@@ -474,14 +474,7 @@ main (int argc, char **argv)
|
||||
format = DATE_FMT_LANGINFO ();
|
||||
if (! *format)
|
||||
{
|
||||
- /* Do not wrap the following literal format string with _(...).
|
||||
- For example, suppose LC_ALL is unset, LC_TIME=POSIX,
|
||||
- and LANG="ko_KR". In that case, POSIX says that LC_TIME
|
||||
- determines the format and contents of date and time strings
|
||||
- written by date, which means "date" must generate output
|
||||
- using the POSIX locale; but adding _() would cause "date"
|
||||
- to use a Korean translation of the format. */
|
||||
- format = "%a %b %e %H:%M:%S %Z %Y";
|
||||
+ format = dcgettext(NULL, N_("%a %b %e %H:%M:%S %Z %Y"), LC_TIME);
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,195 @@
|
|||
diff -urNp coreutils-8.21-orig/gnulib-tests/gnulib.mk coreutils-8.21/gnulib-tests/gnulib.mk
|
||||
--- coreutils-8.21-orig/gnulib-tests/gnulib.mk 2013-02-07 17:58:44.000000000 +0100
|
||||
+++ coreutils-8.21/gnulib-tests/gnulib.mk 2013-02-15 10:12:28.110593165 +0100
|
||||
@@ -279,9 +279,9 @@ EXTRA_DIST += nap.h test-chown.h test-chown.c signature.h macros.h
|
||||
|
||||
## begin gnulib module cloexec-tests
|
||||
|
||||
-TESTS += test-cloexec
|
||||
-check_PROGRAMS += test-cloexec
|
||||
-EXTRA_DIST += test-cloexec.c macros.h
|
||||
+#TESTS += test-cloexec
|
||||
+#check_PROGRAMS += test-cloexec
|
||||
+#EXTRA_DIST += test-cloexec.c macros.h
|
||||
|
||||
## end gnulib module cloexec-tests
|
||||
|
||||
@@ -392,9 +392,9 @@ EXTRA_DIST += test-dup.c signature.h macros.h
|
||||
|
||||
## begin gnulib module dup2-tests
|
||||
|
||||
-TESTS += test-dup2
|
||||
-check_PROGRAMS += test-dup2
|
||||
-EXTRA_DIST += test-dup2.c signature.h macros.h
|
||||
+#TESTS += test-dup2
|
||||
+#check_PROGRAMS += test-dup2
|
||||
+#EXTRA_DIST += test-dup2.c signature.h macros.h
|
||||
|
||||
## end gnulib module dup2-tests
|
||||
|
||||
@@ -453,10 +453,10 @@ EXTRA_DIST += test-fadvise.c
|
||||
|
||||
## begin gnulib module fchdir-tests
|
||||
|
||||
-TESTS += test-fchdir
|
||||
-check_PROGRAMS += test-fchdir
|
||||
-test_fchdir_LDADD = $(LDADD) $(LIBINTL)
|
||||
-EXTRA_DIST += test-fchdir.c signature.h macros.h
|
||||
+#TESTS += test-fchdir
|
||||
+#check_PROGRAMS += test-fchdir
|
||||
+#test_fchdir_LDADD = $(LDADD) $(LIBINTL)
|
||||
+#EXTRA_DIST += test-fchdir.c signature.h macros.h
|
||||
|
||||
## end gnulib module fchdir-tests
|
||||
|
||||
@@ -900,9 +900,9 @@ EXTRA_DIST += test-getloadavg.c signature.h
|
||||
|
||||
## begin gnulib module getlogin-tests
|
||||
|
||||
-TESTS += test-getlogin
|
||||
-check_PROGRAMS += test-getlogin
|
||||
-EXTRA_DIST += test-getlogin.c signature.h macros.h
|
||||
+#TESTS += test-getlogin
|
||||
+#check_PROGRAMS += test-getlogin
|
||||
+#EXTRA_DIST += test-getlogin.c signature.h macros.h
|
||||
|
||||
## end gnulib module getlogin-tests
|
||||
|
||||
@@ -1147,10 +1147,10 @@ EXTRA_DIST += test-link.h test-link.c signature.h macros.h
|
||||
|
||||
## begin gnulib module linkat-tests
|
||||
|
||||
-TESTS += test-linkat
|
||||
-check_PROGRAMS += test-linkat
|
||||
-test_linkat_LDADD = $(LDADD) @LIBINTL@
|
||||
-EXTRA_DIST += test-link.h test-linkat.c signature.h macros.h
|
||||
+#TESTS += test-linkat
|
||||
+#check_PROGRAMS += test-linkat
|
||||
+#test_linkat_LDADD = $(LDADD) @LIBINTL@
|
||||
+#EXTRA_DIST += test-link.h test-linkat.c signature.h macros.h
|
||||
|
||||
## end gnulib module linkat-tests
|
||||
|
||||
@@ -1359,9 +1359,9 @@ EXTRA_DIST += test-memcoll.c macros.h
|
||||
|
||||
## begin gnulib module memrchr-tests
|
||||
|
||||
-TESTS += test-memrchr
|
||||
-check_PROGRAMS += test-memrchr
|
||||
-EXTRA_DIST += test-memrchr.c zerosize-ptr.h signature.h macros.h
|
||||
+#TESTS += test-memrchr
|
||||
+#check_PROGRAMS += test-memrchr
|
||||
+#EXTRA_DIST += test-memrchr.c zerosize-ptr.h signature.h macros.h
|
||||
|
||||
## end gnulib module memrchr-tests
|
||||
|
||||
@@ -1912,9 +1912,9 @@ EXTRA_DIST += test-statat.c
|
||||
|
||||
## begin gnulib module stdalign-tests
|
||||
|
||||
-TESTS += test-stdalign
|
||||
-check_PROGRAMS += test-stdalign
|
||||
-EXTRA_DIST += test-stdalign.c macros.h
|
||||
+#TESTS += test-stdalign
|
||||
+#check_PROGRAMS += test-stdalign
|
||||
+#EXTRA_DIST += test-stdalign.c macros.h
|
||||
|
||||
## end gnulib module stdalign-tests
|
||||
|
||||
@@ -2269,9 +2269,9 @@ EXTRA_DIST += test-uname.c signature.h macros.h
|
||||
|
||||
## begin gnulib module unistd-safer-tests
|
||||
|
||||
-TESTS += test-dup-safer
|
||||
-check_PROGRAMS += test-dup-safer
|
||||
-EXTRA_DIST += test-dup-safer.c macros.h
|
||||
+#TESTS += test-dup-safer
|
||||
+#check_PROGRAMS += test-dup-safer
|
||||
+#EXTRA_DIST += test-dup-safer.c macros.h
|
||||
|
||||
## end gnulib module unistd-safer-tests
|
||||
|
||||
@@ -2367,10 +2367,10 @@ EXTRA_DIST += test-userspec.c
|
||||
|
||||
## begin gnulib module utimens-tests
|
||||
|
||||
-TESTS += test-utimens
|
||||
-check_PROGRAMS += test-utimens
|
||||
-test_utimens_LDADD = $(LDADD) $(LIB_CLOCK_GETTIME) $(LIB_NANOSLEEP) @LIBINTL@
|
||||
-EXTRA_DIST += nap.h test-futimens.h test-lutimens.h test-utimens.h test-utimens-common.h test-utimens.c macros.h
|
||||
+#TESTS += test-utimens
|
||||
+#check_PROGRAMS += test-utimens
|
||||
+#test_utimens_LDADD = $(LDADD) $(LIB_CLOCK_GETTIME) $(LIB_NANOSLEEP) @LIBINTL@
|
||||
+#EXTRA_DIST += nap.h test-futimens.h test-lutimens.h test-utimens.h test-utimens-common.h test-utimens.c macros.h
|
||||
|
||||
## end gnulib module utimens-tests
|
||||
|
||||
diff -urNp coreutils-8.21-orig/tests/local.mk coreutils-8.21/tests/local.mk
|
||||
--- coreutils-8.21-orig/tests/local.mk 2013-02-11 11:30:12.000000000 +0100
|
||||
+++ coreutils-8.21/tests/local.mk 2013-02-15 10:10:55.890532258 +0100
|
||||
@@ -134,6 +134,7 @@ all_root_tests = \
|
||||
tests/rm/no-give-up.sh \
|
||||
tests/rm/one-file-system.sh \
|
||||
tests/rm/read-only.sh \
|
||||
+ tests/tail-2/inotify-hash-abuse.sh \
|
||||
tests/tail-2/append-only.sh \
|
||||
tests/touch/now-owned-by-other.sh
|
||||
|
||||
@@ -168,7 +169,6 @@ all_tests = \
|
||||
tests/cp/link-heap.sh \
|
||||
tests/cp/no-ctx.sh \
|
||||
tests/misc/tty-eof.pl \
|
||||
- tests/tail-2/inotify-hash-abuse.sh \
|
||||
tests/tail-2/inotify-hash-abuse2.sh \
|
||||
tests/tail-2/F-vs-missing.sh \
|
||||
tests/tail-2/F-vs-rename.sh \
|
||||
diff -urNp coreutils-8.21-orig/tests/touch/no-dereference.sh coreutils-8.21/tests/touch/no-dereference.sh
|
||||
--- coreutils-8.21-orig/tests/touch/no-dereference.sh 2013-01-31 01:46:25.000000000 +0100
|
||||
+++ coreutils-8.21/tests/touch/no-dereference.sh 2013-02-15 10:10:55.889593383 +0100
|
||||
@@ -42,6 +42,8 @@ test -f nowhere && fail=1
|
||||
grep '^#define HAVE_UTIMENSAT 1' "$CONFIG_HEADER" > /dev/null ||
|
||||
grep '^#define HAVE_LUTIMES 1' "$CONFIG_HEADER" > /dev/null ||
|
||||
skip_ 'this system lacks the utimensat function'
|
||||
+grep '^#define HAVE_WORKINGKOJI 1' "$CONFIG_HEADER" > /dev/null ||
|
||||
+ skip_ 'rest of the test disabled due to koji lack of utimensat function'
|
||||
|
||||
# Changing time of dangling symlink is okay.
|
||||
# Skip the test if this fails, but the error text corresponds to
|
||||
diff -urNp coreutils-8.22-orig/tests/misc/nohup.sh coreutils-8.22/tests/misc/nohup.sh
|
||||
--- coreutils-8.22-orig/tests/misc/nohup.sh 2013-12-04 15:48:30.000000000 +0100
|
||||
+++ coreutils-8.22/tests/misc/nohup.sh 2014-03-02 21:51:01.972887749 +0100
|
||||
@@ -19,6 +19,8 @@
|
||||
. "${srcdir=.}/tests/init.sh"; path_prepend_ ./src
|
||||
print_ver_ nohup
|
||||
|
||||
+#mark it expensive, to temporarily skip the test in koji
|
||||
+expensive_
|
||||
|
||||
nohup sh -c 'echo stdout; echo stderr 1>&2' 2>err || fail=1
|
||||
|
||||
diff -urNp coreutils-8.23-orig/tests/df/skip-duplicates.sh coreutils-8.23/tests/df/skip-duplicates.sh
|
||||
--- coreutils-8.23-orig/tests/df/skip-duplicates.sh 2014-07-14 00:09:52.000000000 +0200
|
||||
+++ coreutils-8.23/tests/df/skip-duplicates.sh 2014-07-24 15:53:33.473031545 +0200
|
||||
@@ -25,6 +25,10 @@ require_gcc_shared_
|
||||
# potentially very many remote mounts.
|
||||
df --local || skip_ 'df fails'
|
||||
|
||||
+#mark it expensive, to temporarily skip the test in koji
|
||||
+expensive_
|
||||
+
|
||||
+
|
||||
export CU_NONROOT_FS=$(df --local --output=target 2>&1 | grep /. | head -n1)
|
||||
export CU_REMOTE_FS=$(df --local --output=target 2>&1 | grep /. |
|
||||
tail -n+2 | head -n1)
|
||||
diff -urNp coreutils-8.23-orig/man/local.mk coreutils-8.23/man/local.mk
|
||||
--- coreutils-8.23-orig/man/local.mk 2014-07-18 03:40:57.000000000 +0200
|
||||
+++ coreutils-8.23/man/local.mk 2014-08-05 12:18:20.477524009 +0200
|
||||
@@ -41,7 +41,7 @@ distclean-local:
|
||||
test x$(srcdir) = x$(builddir) || rm -f $(ALL_MANS)
|
||||
|
||||
# Dependencies common to all man pages. Updated below.
|
||||
-mandeps =
|
||||
+mandeps = $(PROGRAMS)
|
||||
|
||||
# Depend on this to get version number changes.
|
||||
mandeps += .version
|
|
@ -0,0 +1,13 @@
|
|||
diff -urNp coreutils-6.12-orig/src/md5sum.c coreutils-6.12/src/md5sum.c
|
||||
--- coreutils-6.12-orig/src/md5sum.c 2008-05-26 08:40:33.000000000 +0200
|
||||
+++ coreutils-6.12/src/md5sum.c 2008-10-21 16:07:28.000000000 +0200
|
||||
@@ -200,6 +200,9 @@ Print or check %s (%d-bit) checksums.\n\
|
||||
fputs (_("\
|
||||
-t, --text read in text mode (default)\n\
|
||||
"), stdout);
|
||||
+ fputs (_("\
|
||||
+ Note: There is no difference between binary and text mode option on GNU system.\n\
|
||||
+"), stdout);
|
||||
fputs (_("\
|
||||
\n\
|
||||
The following five options are useful only when verifying checksums:\n\
|
|
@ -1,24 +1,28 @@
|
|||
src/uname.c | 16 +++++++++++++++-
|
||||
1 file changed, 15 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/uname.c b/src/uname.c
|
||||
index 6371ca2..1ad8fd7 100644
|
||||
--- a/src/uname.c
|
||||
+++ b/src/uname.c
|
||||
@@ -322,6 +322,12 @@ main (int argc, char **argv)
|
||||
# elif defined __ppc__ || defined __ppc64__
|
||||
element = "powerpc";
|
||||
# endif
|
||||
diff -urNp coreutils-8.2-orig/src/uname.c coreutils-8.2/src/uname.c
|
||||
--- coreutils-8.2-orig/src/uname.c 2009-09-23 10:25:44.000000000 +0200
|
||||
+++ coreutils-8.2/src/uname.c 2009-12-19 09:09:11.663607110 +0100
|
||||
@@ -299,13 +299,19 @@ main (int argc, char **argv)
|
||||
|
||||
if (toprint & PRINT_PROCESSOR)
|
||||
{
|
||||
- char const *element = unknown;
|
||||
+ char *element = unknown;
|
||||
#if HAVE_SYSINFO && defined SI_ARCHITECTURE
|
||||
{
|
||||
static char processor[257];
|
||||
if (0 <= sysinfo (SI_ARCHITECTURE, processor, sizeof processor))
|
||||
element = processor;
|
||||
}
|
||||
+#else
|
||||
+ {
|
||||
+ static struct utsname u;
|
||||
+ uname(&u);
|
||||
+ element = u.machine;
|
||||
+ static struct utsname u;
|
||||
+ uname(&u);
|
||||
+ element = u.machine;
|
||||
+ }
|
||||
#endif
|
||||
#if HAVE_SYSINFO && defined SI_ARCHITECTURE
|
||||
#ifdef UNAME_PROCESSOR
|
||||
if (element == unknown)
|
||||
@@ -347,7 +353,7 @@ main (int argc, char **argv)
|
||||
@@ -343,7 +349,7 @@ main (int argc, char **argv)
|
||||
|
||||
if (toprint & PRINT_HARDWARE_PLATFORM)
|
||||
{
|
||||
|
@ -27,17 +31,17 @@ index 6371ca2..1ad8fd7 100644
|
|||
#if HAVE_SYSINFO && defined SI_PLATFORM
|
||||
{
|
||||
static char hardware_platform[257];
|
||||
@@ -355,6 +361,14 @@ main (int argc, char **argv)
|
||||
@@ -351,6 +357,14 @@ main (int argc, char **argv)
|
||||
hardware_platform, sizeof hardware_platform))
|
||||
element = hardware_platform;
|
||||
}
|
||||
+#else
|
||||
+ {
|
||||
+ static struct utsname u;
|
||||
+ uname(&u);
|
||||
+ element = u.machine;
|
||||
+ if(strlen(element)==4 && element[0]=='i' && element[2]=='8' && element[3]=='6')
|
||||
+ element[1]='3';
|
||||
+ static struct utsname u;
|
||||
+ uname(&u);
|
||||
+ element = u.machine;
|
||||
+ if(strlen(element)==4 && element[0]=='i' && element[2]=='8' && element[3]=='6')
|
||||
+ element[1]='3';
|
||||
+ }
|
||||
#endif
|
||||
#ifdef UNAME_HARDWARE_PLATFORM
|
||||
|
|
|
@ -0,0 +1,13 @@
|
|||
diff -urNp coreutils-8.22-orig/tests/df/df-symlink.sh coreutils-8.22/tests/df/df-symlink.sh
|
||||
--- coreutils-8.22-orig/tests/df/df-symlink.sh 2013-12-04 15:48:30.000000000 +0100
|
||||
+++ coreutils-8.22/tests/df/df-symlink.sh 2013-12-14 18:20:15.822594995 +0100
|
||||
@@ -18,6 +18,9 @@
|
||||
|
||||
. "${srcdir=.}/tests/init.sh"; path_prepend_ ./src
|
||||
print_ver_ df
|
||||
+#df doesn't work correctly on symlinks when on LVM/LUKS filesystem, therefore
|
||||
+#marking expensive_ to disable by default
|
||||
+expensive_
|
||||
|
||||
disk=$(df --out=source '.' | tail -n1) ||
|
||||
skip_ "cannot determine '.' file system"
|
|
@ -0,0 +1,188 @@
|
|||
From c424bbcb532c5b9924349e3522b3b431eaa7c178 Mon Sep 17 00:00:00 2001
|
||||
From: Kamil Dudka <kdudka@redhat.com>
|
||||
Date: Fri, 8 Jul 2016 18:59:35 +0200
|
||||
Subject: [PATCH] install: with -Z, set default SELinux context for created
|
||||
directories
|
||||
|
||||
* doc/coreutils.texi (install invocation): Update -Z documentation.
|
||||
* src/install.c (make_ancestor): Set default security context before
|
||||
calling mkdir() if the -Z option is given.
|
||||
(process_dir): Call restorecon() on the destination directory if the
|
||||
-Z option is given.
|
||||
(usage): Update -Z documentation.
|
||||
* tests/install/install-Z-selinux.sh: A new test for 'install -Z -D'
|
||||
and 'install -Z -d' based on tests/mkdir/restorecon.sh.
|
||||
* tests/local.mk: Reference the test.
|
||||
* NEWS: Mention the improvement.
|
||||
Reported at https://bugzilla.redhat.com/1339135
|
||||
Fixes http://bugs.gnu.org/23868
|
||||
|
||||
Upstream-commit: 502518b44039138d148e2e15157d125c82d02af0
|
||||
Signed-off-by: Kamil Dudka <kdudka@redhat.com>
|
||||
---
|
||||
doc/coreutils.texi | 2 +-
|
||||
src/install.c | 33 ++++++++++++++++++----
|
||||
tests/install/install-Z-selinux.sh | 58 ++++++++++++++++++++++++++++++++++++++
|
||||
tests/local.mk | 1 +
|
||||
4 files changed, 88 insertions(+), 6 deletions(-)
|
||||
create mode 100644 tests/install/install-Z-selinux.sh
|
||||
|
||||
diff --git a/doc/coreutils.texi b/doc/coreutils.texi
|
||||
index 092192c..1543f27 100644
|
||||
--- a/doc/coreutils.texi
|
||||
+++ b/doc/coreutils.texi
|
||||
@@ -9208,7 +9208,7 @@ Print the name of each file before moving it.
|
||||
@cindex security context
|
||||
This option functions similarly to the @command{restorecon} command,
|
||||
by adjusting the SELinux security context according
|
||||
-to the system default type for destination files.
|
||||
+to the system default type for destination files and each created directory.
|
||||
|
||||
@end table
|
||||
|
||||
diff --git a/src/install.c b/src/install.c
|
||||
index 089f298..1b7a209 100644
|
||||
--- a/src/install.c
|
||||
+++ b/src/install.c
|
||||
@@ -39,6 +39,7 @@
|
||||
#include "prog-fprintf.h"
|
||||
#include "quote.h"
|
||||
#include "savewd.h"
|
||||
+#include "selinux.h"
|
||||
#include "stat-time.h"
|
||||
#include "utimens.h"
|
||||
#include "xstrtol.h"
|
||||
@@ -423,6 +424,12 @@ announce_mkdir (char const *dir, void *options)
|
||||
static int
|
||||
make_ancestor (char const *dir, char const *component, void *options)
|
||||
{
|
||||
+ struct cp_options const *x = options;
|
||||
+ if (x->set_security_context && defaultcon (dir, S_IFDIR) < 0
|
||||
+ && ! ignorable_ctx_err (errno))
|
||||
+ error (0, errno, _("failed to set default creation context for %s"),
|
||||
+ quoteaf (dir));
|
||||
+
|
||||
int r = mkdir (component, DEFAULT_MODE);
|
||||
if (r == 0)
|
||||
announce_mkdir (dir, options);
|
||||
@@ -433,12 +440,28 @@ make_ancestor (char const *dir, char const *component, void *options)
|
||||
static int
|
||||
process_dir (char *dir, struct savewd *wd, void *options)
|
||||
{
|
||||
- return (make_dir_parents (dir, wd,
|
||||
- make_ancestor, options,
|
||||
- dir_mode, announce_mkdir,
|
||||
- dir_mode_bits, owner_id, group_id, false)
|
||||
+ struct cp_options const *x = options;
|
||||
+
|
||||
+ int ret = (make_dir_parents (dir, wd, make_ancestor, options,
|
||||
+ dir_mode, announce_mkdir,
|
||||
+ dir_mode_bits, owner_id, group_id, false)
|
||||
? EXIT_SUCCESS
|
||||
: EXIT_FAILURE);
|
||||
+
|
||||
+ /* FIXME: Due to the current structure of make_dir_parents()
|
||||
+ we don't have the facility to call defaultcon() before the
|
||||
+ final component of DIR is created. So for now, create the
|
||||
+ final component with the context from previous component
|
||||
+ and here we set the context for the final component. */
|
||||
+ if (ret == EXIT_SUCCESS && x->set_security_context)
|
||||
+ {
|
||||
+ if (! restorecon (last_component (dir), false, false)
|
||||
+ && ! ignorable_ctx_err (errno))
|
||||
+ error (0, errno, _("failed to restore context for %s"),
|
||||
+ quoteaf (dir));
|
||||
+ }
|
||||
+
|
||||
+ return ret;
|
||||
}
|
||||
|
||||
/* Copy file FROM onto file TO, creating TO if necessary.
|
||||
@@ -651,7 +674,7 @@ In the 4th form, create all components of the given DIRECTORY(ies).\n\
|
||||
fputs (_("\
|
||||
-P, --preserve-context preserve SELinux security context (-P deprecated)\n\
|
||||
-Z set SELinux security context of destination\n\
|
||||
- file to default type\n\
|
||||
+ file and each created directory to default type\n\
|
||||
--context[=CTX] like -Z, or if CTX is specified then set the\n\
|
||||
SELinux or SMACK security context to CTX\n\
|
||||
"), stdout);
|
||||
diff --git a/tests/install/install-Z-selinux.sh b/tests/install/install-Z-selinux.sh
|
||||
new file mode 100644
|
||||
index 0000000..9c3b642
|
||||
--- /dev/null
|
||||
+++ b/tests/install/install-Z-selinux.sh
|
||||
@@ -0,0 +1,58 @@
|
||||
+#!/bin/sh
|
||||
+# test 'install -Z -D' and 'install -Z -d'
|
||||
+# based on tests/mkdir/restorecon.sh
|
||||
+
|
||||
+# Copyright (C) 2013-2016 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 of the License, 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, see <http://www.gnu.org/licenses/>.
|
||||
+
|
||||
+. "${srcdir=.}/tests/init.sh"; path_prepend_ ./src
|
||||
+print_ver_ ginstall
|
||||
+require_selinux_
|
||||
+
|
||||
+
|
||||
+get_selinux_type() { ls -Zd "$1" | sed -n 's/.*:\(.*_t\):.*/\1/p'; }
|
||||
+
|
||||
+mkdir subdir || framework_failure_
|
||||
+chcon 'root:object_r:tmp_t:s0' subdir || framework_failure_
|
||||
+cd subdir
|
||||
+
|
||||
+# Since in a tmp_t dir, dirs can be created as user_tmp_t ...
|
||||
+touch standard || framework_failure_
|
||||
+mkdir restored || framework_failure_
|
||||
+if restorecon restored 2>/dev/null; then
|
||||
+ # ... but when restored can be set to user_home_t
|
||||
+ # So ensure the type for these mkdir -Z cases matches
|
||||
+ # the directory type as set by restorecon.
|
||||
+ ginstall -Z standard single || fail=1
|
||||
+ ginstall -Z -d single_d || fail=1
|
||||
+ # Run these as separate processes in case global context
|
||||
+ # set for an arg, impacts on another arg
|
||||
+ # TODO: Have the defaultcon() vary over these directories
|
||||
+ for dst in single_d/existing/file multi/ple/file; do
|
||||
+ ginstall -Z -D standard "$dst" || fail=1
|
||||
+ done
|
||||
+ restored_type=$(get_selinux_type 'restored')
|
||||
+ test "$(get_selinux_type 'single')" = "$restored_type" || fail=1
|
||||
+ test "$(get_selinux_type 'single_d')" = "$restored_type" || fail=1
|
||||
+ test "$(get_selinux_type 'single_d/existing')" = "$restored_type" || fail=1
|
||||
+ test "$(get_selinux_type 'multi')" = "$restored_type" || fail=1
|
||||
+ test "$(get_selinux_type 'multi/ple')" = "$restored_type" || fail=1
|
||||
+fi
|
||||
+if test "$fail" = '1'; then
|
||||
+ ls -UZd standard restored
|
||||
+ ls -UZd single single_d single_d/existing multi multi/ple
|
||||
+fi
|
||||
+
|
||||
+Exit $fail
|
||||
diff --git a/tests/local.mk b/tests/local.mk
|
||||
index ec23448..42d39f2 100644
|
||||
--- a/tests/local.mk
|
||||
+++ b/tests/local.mk
|
||||
@@ -548,6 +548,7 @@ all_tests = \
|
||||
tests/install/d-slashdot.sh \
|
||||
tests/install/install-C.sh \
|
||||
tests/install/install-C-selinux.sh \
|
||||
+ tests/install/install-Z-selinux.sh \
|
||||
tests/install/strip-program.sh \
|
||||
tests/install/trap.sh \
|
||||
tests/ln/backup-1.sh \
|
||||
--
|
||||
2.5.5
|
||||
|
|
@ -0,0 +1,236 @@
|
|||
From 9338b244572e07bbff314b3570228e8cf43f1300 Mon Sep 17 00:00:00 2001
|
||||
From: Kamil Dudka <kdudka@redhat.com>
|
||||
Date: Tue, 6 Sep 2016 17:38:26 +0200
|
||||
Subject: [PATCH] ls: allow interruption when reading slow directories
|
||||
|
||||
Postpone installation of signal handlers until they're needed.
|
||||
That is right before the first escape sequence is printed.
|
||||
|
||||
* src/ls.c (signal_setup): A new function refactored from main()
|
||||
to set and restore signal handlers.
|
||||
(main): Move signal handler setup to put_indicator()
|
||||
so that the default signal handling is untouched as long as possible.
|
||||
Adjusted condition for restoring signal handlers to reflect the change.
|
||||
(put_indicator): Install signal handlers if called for the very first
|
||||
time. It uses the same code that was in main() prior to this commit.
|
||||
* NEWS: Mention the improvement.
|
||||
|
||||
See https://bugzilla.redhat.com/1365933
|
||||
Fixes http://bugs.gnu.org/24232
|
||||
|
||||
Upstream-commit: 5445f7811ff945ea13aa2a0fd797eb4c0a0e4db0
|
||||
Signed-off-by: Kamil Dudka <kdudka@redhat.com>
|
||||
---
|
||||
src/ls.c | 161 ++++++++++++++++++++++++++++++++++++---------------------------
|
||||
1 file changed, 93 insertions(+), 68 deletions(-)
|
||||
|
||||
diff --git a/src/ls.c b/src/ls.c
|
||||
index d976036..66df307 100644
|
||||
--- a/src/ls.c
|
||||
+++ b/src/ls.c
|
||||
@@ -1244,13 +1244,12 @@ process_signals (void)
|
||||
}
|
||||
}
|
||||
|
||||
-int
|
||||
-main (int argc, char **argv)
|
||||
-{
|
||||
- int i;
|
||||
- struct pending *thispend;
|
||||
- int n_files;
|
||||
+/* Setup signal handlers if INIT is true,
|
||||
+ otherwise restore to the default. */
|
||||
|
||||
+static void
|
||||
+signal_setup (bool init)
|
||||
+{
|
||||
/* The signals that are trapped, and the number of such signals. */
|
||||
static int const sig[] =
|
||||
{
|
||||
@@ -1278,8 +1277,77 @@ main (int argc, char **argv)
|
||||
enum { nsigs = ARRAY_CARDINALITY (sig) };
|
||||
|
||||
#if ! SA_NOCLDSTOP
|
||||
- bool caught_sig[nsigs];
|
||||
+ static bool caught_sig[nsigs];
|
||||
+#endif
|
||||
+
|
||||
+ int j;
|
||||
+
|
||||
+ if (init)
|
||||
+ {
|
||||
+#if SA_NOCLDSTOP
|
||||
+ struct sigaction act;
|
||||
+
|
||||
+ sigemptyset (&caught_signals);
|
||||
+ for (j = 0; j < nsigs; j++)
|
||||
+ {
|
||||
+ sigaction (sig[j], NULL, &act);
|
||||
+ if (act.sa_handler != SIG_IGN)
|
||||
+ sigaddset (&caught_signals, sig[j]);
|
||||
+ }
|
||||
+
|
||||
+ act.sa_mask = caught_signals;
|
||||
+ act.sa_flags = SA_RESTART;
|
||||
+
|
||||
+ for (j = 0; j < nsigs; j++)
|
||||
+ if (sigismember (&caught_signals, sig[j]))
|
||||
+ {
|
||||
+ act.sa_handler = sig[j] == SIGTSTP ? stophandler : sighandler;
|
||||
+ sigaction (sig[j], &act, NULL);
|
||||
+ }
|
||||
+#else
|
||||
+ for (j = 0; j < nsigs; j++)
|
||||
+ {
|
||||
+ caught_sig[j] = (signal (sig[j], SIG_IGN) != SIG_IGN);
|
||||
+ if (caught_sig[j])
|
||||
+ {
|
||||
+ signal (sig[j], sig[j] == SIGTSTP ? stophandler : sighandler);
|
||||
+ siginterrupt (sig[j], 0);
|
||||
+ }
|
||||
+ }
|
||||
#endif
|
||||
+ }
|
||||
+ else /* restore. */
|
||||
+ {
|
||||
+#if SA_NOCLDSTOP
|
||||
+ for (j = 0; j < nsigs; j++)
|
||||
+ if (sigismember (&caught_signals, sig[j]))
|
||||
+ signal (sig[j], SIG_DFL);
|
||||
+#else
|
||||
+ for (j = 0; j < nsigs; j++)
|
||||
+ if (caught_sig[j])
|
||||
+ signal (sig[j], SIG_DFL);
|
||||
+#endif
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+static inline void
|
||||
+signal_init (void)
|
||||
+{
|
||||
+ signal_setup (true);
|
||||
+}
|
||||
+
|
||||
+static inline void
|
||||
+signal_restore (void)
|
||||
+{
|
||||
+ signal_setup (false);
|
||||
+}
|
||||
+
|
||||
+int
|
||||
+main (int argc, char **argv)
|
||||
+{
|
||||
+ int i;
|
||||
+ struct pending *thispend;
|
||||
+ int n_files;
|
||||
|
||||
initialize_main (&argc, &argv);
|
||||
set_program_name (argv[0]);
|
||||
@@ -1314,46 +1382,6 @@ main (int argc, char **argv)
|
||||
|| (is_colored (C_EXEC) && color_symlink_as_referent)
|
||||
|| (is_colored (C_MISSING) && format == long_format))
|
||||
check_symlink_color = true;
|
||||
-
|
||||
- /* If the standard output is a controlling terminal, watch out
|
||||
- for signals, so that the colors can be restored to the
|
||||
- default state if "ls" is suspended or interrupted. */
|
||||
-
|
||||
- if (0 <= tcgetpgrp (STDOUT_FILENO))
|
||||
- {
|
||||
- int j;
|
||||
-#if SA_NOCLDSTOP
|
||||
- struct sigaction act;
|
||||
-
|
||||
- sigemptyset (&caught_signals);
|
||||
- for (j = 0; j < nsigs; j++)
|
||||
- {
|
||||
- sigaction (sig[j], NULL, &act);
|
||||
- if (act.sa_handler != SIG_IGN)
|
||||
- sigaddset (&caught_signals, sig[j]);
|
||||
- }
|
||||
-
|
||||
- act.sa_mask = caught_signals;
|
||||
- act.sa_flags = SA_RESTART;
|
||||
-
|
||||
- for (j = 0; j < nsigs; j++)
|
||||
- if (sigismember (&caught_signals, sig[j]))
|
||||
- {
|
||||
- act.sa_handler = sig[j] == SIGTSTP ? stophandler : sighandler;
|
||||
- sigaction (sig[j], &act, NULL);
|
||||
- }
|
||||
-#else
|
||||
- for (j = 0; j < nsigs; j++)
|
||||
- {
|
||||
- caught_sig[j] = (signal (sig[j], SIG_IGN) != SIG_IGN);
|
||||
- if (caught_sig[j])
|
||||
- {
|
||||
- signal (sig[j], sig[j] == SIGTSTP ? stophandler : sighandler);
|
||||
- siginterrupt (sig[j], 0);
|
||||
- }
|
||||
- }
|
||||
-#endif
|
||||
- }
|
||||
}
|
||||
|
||||
if (dereference == DEREF_UNDEFINED)
|
||||
@@ -1466,32 +1494,21 @@ main (int argc, char **argv)
|
||||
print_dir_name = true;
|
||||
}
|
||||
|
||||
- if (print_with_color)
|
||||
+ if (print_with_color && used_color)
|
||||
{
|
||||
int j;
|
||||
|
||||
- if (used_color)
|
||||
- {
|
||||
- /* Skip the restore when it would be a no-op, i.e.,
|
||||
- when left is "\033[" and right is "m". */
|
||||
- if (!(color_indicator[C_LEFT].len == 2
|
||||
- && memcmp (color_indicator[C_LEFT].string, "\033[", 2) == 0
|
||||
- && color_indicator[C_RIGHT].len == 1
|
||||
- && color_indicator[C_RIGHT].string[0] == 'm'))
|
||||
- restore_default_color ();
|
||||
- }
|
||||
+ /* Skip the restore when it would be a no-op, i.e.,
|
||||
+ when left is "\033[" and right is "m". */
|
||||
+ if (!(color_indicator[C_LEFT].len == 2
|
||||
+ && memcmp (color_indicator[C_LEFT].string, "\033[", 2) == 0
|
||||
+ && color_indicator[C_RIGHT].len == 1
|
||||
+ && color_indicator[C_RIGHT].string[0] == 'm'))
|
||||
+ restore_default_color ();
|
||||
+
|
||||
fflush (stdout);
|
||||
|
||||
- /* Restore the default signal handling. */
|
||||
-#if SA_NOCLDSTOP
|
||||
- for (j = 0; j < nsigs; j++)
|
||||
- if (sigismember (&caught_signals, sig[j]))
|
||||
- signal (sig[j], SIG_DFL);
|
||||
-#else
|
||||
- for (j = 0; j < nsigs; j++)
|
||||
- if (caught_sig[j])
|
||||
- signal (sig[j], SIG_DFL);
|
||||
-#endif
|
||||
+ signal_restore ();
|
||||
|
||||
/* Act on any signals that arrived before the default was restored.
|
||||
This can process signals out of order, but there doesn't seem to
|
||||
@@ -4482,6 +4499,14 @@ put_indicator (const struct bin_str *ind)
|
||||
if (! used_color)
|
||||
{
|
||||
used_color = true;
|
||||
+
|
||||
+ /* If the standard output is a controlling terminal, watch out
|
||||
+ for signals, so that the colors can be restored to the
|
||||
+ default state if "ls" is suspended or interrupted. */
|
||||
+
|
||||
+ if (0 <= tcgetpgrp (STDOUT_FILENO))
|
||||
+ signal_init ();
|
||||
+
|
||||
prep_non_filename_text ();
|
||||
}
|
||||
|
||||
--
|
||||
2.7.4
|
||||
|
|
@ -0,0 +1,52 @@
|
|||
From 8b89985a3904e0267750c430e01684edf008051b Mon Sep 17 00:00:00 2001
|
||||
From: Kamil Dudka <kdudka@redhat.com>
|
||||
Date: Mon, 28 Nov 2016 16:21:42 +0100
|
||||
Subject: [PATCH] install,mkdir: fix handling of -DZ and -pZ, respectively
|
||||
|
||||
... in the case where two or more directories nested in each other are
|
||||
created and each of them defaults to a different SELinux context.
|
||||
|
||||
* src/install.c (make_ancestor): When calling defaultcon(), give it the
|
||||
same path that is given to mkdir(). The other path is not always valid
|
||||
wrt. current working directory.
|
||||
* src/mkdir.c (make_ancestor): Likewise.
|
||||
* NEWS: Mention the bug fix.
|
||||
|
||||
Reported at https://bugzilla.redhat.com/1398913
|
||||
|
||||
Upstream-commit: d8104265f229ababd5a68a46eeccbccc07e72cdc
|
||||
Signed-off-by: Kamil Dudka <kdudka@redhat.com>
|
||||
---
|
||||
src/install.c | 2 +-
|
||||
src/mkdir.c | 2 +-
|
||||
2 files changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/src/install.c b/src/install.c
|
||||
index 1b7a209..cae0a53 100644
|
||||
--- a/src/install.c
|
||||
+++ b/src/install.c
|
||||
@@ -425,7 +425,7 @@ static int
|
||||
make_ancestor (char const *dir, char const *component, void *options)
|
||||
{
|
||||
struct cp_options const *x = options;
|
||||
- if (x->set_security_context && defaultcon (dir, S_IFDIR) < 0
|
||||
+ if (x->set_security_context && defaultcon (component, S_IFDIR) < 0
|
||||
&& ! ignorable_ctx_err (errno))
|
||||
error (0, errno, _("failed to set default creation context for %s"),
|
||||
quoteaf (dir));
|
||||
diff --git a/src/mkdir.c b/src/mkdir.c
|
||||
index 60fc08a..77af857 100644
|
||||
--- a/src/mkdir.c
|
||||
+++ b/src/mkdir.c
|
||||
@@ -122,7 +122,7 @@ make_ancestor (char const *dir, char const *component, void *options)
|
||||
{
|
||||
struct mkdir_options const *o = options;
|
||||
|
||||
- if (o->set_security_context && defaultcon (dir, S_IFDIR) < 0
|
||||
+ if (o->set_security_context && defaultcon (component, S_IFDIR) < 0
|
||||
&& ! ignorable_ctx_err (errno))
|
||||
error (0, errno, _("failed to set default creation context for %s"),
|
||||
quoteaf (dir));
|
||||
--
|
||||
2.9.3
|
||||
|
|
@ -0,0 +1,332 @@
|
|||
From c479153d77b419a6cae4551b63d2b73096c1130e Mon Sep 17 00:00:00 2001
|
||||
From: Kamil Dudka <kdudka@redhat.com>
|
||||
Date: Mon, 18 Jul 2016 19:04:43 +0200
|
||||
Subject: [PATCH 1/3] maint: sort.c: deduplicate code for traversing numbers
|
||||
|
||||
* src/sort.c (traverse_raw_number): New function for traversing numbers.
|
||||
(find_unit_order): Use traverse_raw_number() instead of open-coding it.
|
||||
(debug_key): Likewise.
|
||||
---
|
||||
src/sort.c | 63 ++++++++++++++++++++++++++++++++++----------------------------
|
||||
1 file changed, 35 insertions(+), 28 deletions(-)
|
||||
|
||||
diff --git a/src/sort.c b/src/sort.c
|
||||
index 5b02343..e28bb6c 100644
|
||||
--- a/src/sort.c
|
||||
+++ b/src/sort.c
|
||||
@@ -2231,18 +2231,16 @@ static char const unit_order[UCHAR_LIM] =
|
||||
#endif
|
||||
};
|
||||
|
||||
-/* Return an integer that represents the order of magnitude of the
|
||||
- unit following the number. The number may contain thousands
|
||||
- separators and a decimal point, but it may not contain leading blanks.
|
||||
- Negative numbers get negative orders; zero numbers have a zero order. */
|
||||
-
|
||||
-static int _GL_ATTRIBUTE_PURE
|
||||
-find_unit_order (char const *number)
|
||||
+/* Traverse number given as *number consisting of digits, thousands_sep, and
|
||||
+ decimal_point chars only. Returns the highest digit found in the number,
|
||||
+ or '\0' if no digit has been found. Upon return *number points at the
|
||||
+ character that immediately follows after the given number. */
|
||||
+static unsigned char
|
||||
+traverse_raw_number (char const **number)
|
||||
{
|
||||
- bool minus_sign = (*number == '-');
|
||||
- char const *p = number + minus_sign;
|
||||
- int nonzero = 0;
|
||||
+ char const *p = *number;
|
||||
unsigned char ch;
|
||||
+ unsigned char max_digit = '\0';
|
||||
|
||||
/* Scan to end of number.
|
||||
Decimals or separators not followed by digits stop the scan.
|
||||
@@ -2253,16 +2251,34 @@ find_unit_order (char const *number)
|
||||
do
|
||||
{
|
||||
while (ISDIGIT (ch = *p++))
|
||||
- nonzero |= ch - '0';
|
||||
+ if (max_digit < ch)
|
||||
+ max_digit = ch;
|
||||
}
|
||||
while (ch == thousands_sep);
|
||||
|
||||
if (ch == decimal_point)
|
||||
while (ISDIGIT (ch = *p++))
|
||||
- nonzero |= ch - '0';
|
||||
+ if (max_digit < ch)
|
||||
+ max_digit = ch;
|
||||
+
|
||||
+ *number = p - 1;
|
||||
+ return max_digit;
|
||||
+}
|
||||
+
|
||||
+/* Return an integer that represents the order of magnitude of the
|
||||
+ unit following the number. The number may contain thousands
|
||||
+ separators and a decimal point, but it may not contain leading blanks.
|
||||
+ Negative numbers get negative orders; zero numbers have a zero order. */
|
||||
|
||||
- if (nonzero)
|
||||
+static int _GL_ATTRIBUTE_PURE
|
||||
+find_unit_order (char const *number)
|
||||
+{
|
||||
+ bool minus_sign = (*number == '-');
|
||||
+ char const *p = number + minus_sign;
|
||||
+ unsigned char max_digit = traverse_raw_number (&p);
|
||||
+ if ('0' < max_digit)
|
||||
{
|
||||
+ unsigned char ch = *p;
|
||||
int order = unit_order[ch];
|
||||
return (minus_sign ? -order : order);
|
||||
}
|
||||
@@ -2655,23 +2671,14 @@ debug_key (struct line const *line, struct keyfield const *key)
|
||||
ignore_value (strtold (beg, &tighter_lim));
|
||||
else if (key->numeric || key->human_numeric)
|
||||
{
|
||||
- char *p = beg + (beg < lim && *beg == '-');
|
||||
- bool found_digit = false;
|
||||
- unsigned char ch;
|
||||
-
|
||||
- do
|
||||
+ char const *p = beg + (beg < lim && *beg == '-');
|
||||
+ unsigned char max_digit = traverse_raw_number (&p);
|
||||
+ if ('0' <= max_digit)
|
||||
{
|
||||
- while (ISDIGIT (ch = *p++))
|
||||
- found_digit = true;
|
||||
+ unsigned char ch = *p;
|
||||
+ tighter_lim = (char *) p
|
||||
+ + (key->human_numeric && unit_order[ch]);
|
||||
}
|
||||
- while (ch == thousands_sep);
|
||||
-
|
||||
- if (ch == decimal_point)
|
||||
- while (ISDIGIT (ch = *p++))
|
||||
- found_digit = true;
|
||||
-
|
||||
- if (found_digit)
|
||||
- tighter_lim = p - ! (key->human_numeric && unit_order[ch]);
|
||||
}
|
||||
else
|
||||
tighter_lim = lim;
|
||||
--
|
||||
2.5.5
|
||||
|
||||
|
||||
From 8c39465a5b0343ff7a21286dd69ed5430685d2f7 Mon Sep 17 00:00:00 2001
|
||||
From: Kamil Dudka <kdudka@redhat.com>
|
||||
Date: Mon, 18 Jul 2016 19:04:44 +0200
|
||||
Subject: [PATCH 2/3] sort: make -h work with -k and blank used as thousands
|
||||
separator
|
||||
|
||||
* src/sort.c (traverse_raw_number): Allow to skip only one occurrence
|
||||
of thousands_sep to avoid finding the unit in the next column in case
|
||||
thousands_sep matches as blank and is used as column delimiter.
|
||||
* tests/misc/sort-h-thousands-sep.sh: Add regression test for this bug.
|
||||
* tests/local.mk: Reference the test.
|
||||
* NEWS: Mention the bug fix.
|
||||
Reported at https://bugzilla.redhat.com/1355780
|
||||
Fixes http://bugs.gnu.org/24015
|
||||
---
|
||||
src/sort.c | 14 ++++++++----
|
||||
tests/local.mk | 1 +
|
||||
tests/misc/sort-h-thousands-sep.sh | 47 ++++++++++++++++++++++++++++++++++++++
|
||||
3 files changed, 57 insertions(+), 5 deletions(-)
|
||||
create mode 100755 tests/misc/sort-h-thousands-sep.sh
|
||||
|
||||
diff --git a/src/sort.c b/src/sort.c
|
||||
index e28bb6c..dd3ba58 100644
|
||||
--- a/src/sort.c
|
||||
+++ b/src/sort.c
|
||||
@@ -2248,13 +2248,17 @@ traverse_raw_number (char const **number)
|
||||
to be lacking in units.
|
||||
FIXME: add support for multibyte thousands_sep and decimal_point. */
|
||||
|
||||
- do
|
||||
+ while (ISDIGIT (ch = *p++))
|
||||
{
|
||||
- while (ISDIGIT (ch = *p++))
|
||||
- if (max_digit < ch)
|
||||
- max_digit = ch;
|
||||
+ if (max_digit < ch)
|
||||
+ max_digit = ch;
|
||||
+
|
||||
+ /* Allow to skip only one occurrence of thousands_sep to avoid finding
|
||||
+ the unit in the next column in case thousands_sep matches as blank
|
||||
+ and is used as column delimiter. */
|
||||
+ if (*p == thousands_sep)
|
||||
+ ++p;
|
||||
}
|
||||
- while (ch == thousands_sep);
|
||||
|
||||
if (ch == decimal_point)
|
||||
while (ISDIGIT (ch = *p++))
|
||||
diff --git a/tests/local.mk b/tests/local.mk
|
||||
index 42d39f2..dccff8d 100644
|
||||
--- a/tests/local.mk
|
||||
+++ b/tests/local.mk
|
||||
@@ -344,6 +344,7 @@ all_tests = \
|
||||
tests/misc/sort-discrim.sh \
|
||||
tests/misc/sort-files0-from.pl \
|
||||
tests/misc/sort-float.sh \
|
||||
+ tests/misc/sort-h-thousands-sep.sh \
|
||||
tests/misc/sort-mb-tests.sh \
|
||||
tests/i18n/sort.sh \
|
||||
tests/misc/sort-merge.pl \
|
||||
diff --git a/tests/misc/sort-h-thousands-sep.sh b/tests/misc/sort-h-thousands-sep.sh
|
||||
new file mode 100755
|
||||
index 0000000..17f1b6c
|
||||
--- /dev/null
|
||||
+++ b/tests/misc/sort-h-thousands-sep.sh
|
||||
@@ -0,0 +1,47 @@
|
||||
+#!/bin/sh
|
||||
+# exercise 'sort -h' in locales where thousands separator is blank
|
||||
+
|
||||
+# Copyright (C) 2016 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 of the License, 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, see <http://www.gnu.org/licenses/>.
|
||||
+
|
||||
+. "${srcdir=.}/tests/init.sh"; path_prepend_ ./src
|
||||
+print_ver_ sort
|
||||
+test "$(LC_ALL=sv_SE locale thousands_sep)" = ' ' \
|
||||
+ || skip_ 'The Swedish locale with blank thousands separator is unavailable.'
|
||||
+
|
||||
+tee exp1 > in << _EOF_
|
||||
+1 1k 4 003 1M
|
||||
+2k 2M 4 002 2
|
||||
+3M 3 4 001 3k
|
||||
+_EOF_
|
||||
+
|
||||
+cat > exp2 << _EOF_
|
||||
+3M 3 4 001 3k
|
||||
+1 1k 4 003 1M
|
||||
+2k 2M 4 002 2
|
||||
+_EOF_
|
||||
+
|
||||
+cat > exp3 << _EOF_
|
||||
+3M 3 4 001 3k
|
||||
+2k 2M 4 002 2
|
||||
+1 1k 4 003 1M
|
||||
+_EOF_
|
||||
+
|
||||
+for i in 1 2 3; do
|
||||
+ LC_ALL="sv_SE.utf8" sort -h -k $i "in" > "out${i}" || fail=1
|
||||
+ compare "exp${i}" "out${i}" || fail=1
|
||||
+done
|
||||
+
|
||||
+Exit $fail
|
||||
--
|
||||
2.5.5
|
||||
|
||||
|
||||
From 46ef53f558e7bc1c0bc0abd62a86b40b4141e058 Mon Sep 17 00:00:00 2001
|
||||
From: Kamil Dudka <kdudka@redhat.com>
|
||||
Date: Mon, 18 Jul 2016 19:04:45 +0200
|
||||
Subject: [PATCH 3/3] sort: with -h, disallow thousands separator between
|
||||
number and unit
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
* src/sort.c (traverse_raw_number): Accept thousands separator only
|
||||
if it is immediately followed by a digit.
|
||||
* tests/misc/sort-h-thousands-sep.sh: Cover the fix for this bug.
|
||||
|
||||
Suggested by Pádraig Brady in http://bugs.gnu.org/24015
|
||||
---
|
||||
src/sort.c | 11 ++++++++++-
|
||||
tests/misc/sort-h-thousands-sep.sh | 25 +++++++++++++------------
|
||||
2 files changed, 23 insertions(+), 13 deletions(-)
|
||||
|
||||
diff --git a/src/sort.c b/src/sort.c
|
||||
index dd3ba58..69ef75f 100644
|
||||
--- a/src/sort.c
|
||||
+++ b/src/sort.c
|
||||
@@ -2241,6 +2241,7 @@ traverse_raw_number (char const **number)
|
||||
char const *p = *number;
|
||||
unsigned char ch;
|
||||
unsigned char max_digit = '\0';
|
||||
+ bool ends_with_thousands_sep = false;
|
||||
|
||||
/* Scan to end of number.
|
||||
Decimals or separators not followed by digits stop the scan.
|
||||
@@ -2256,10 +2257,18 @@ traverse_raw_number (char const **number)
|
||||
/* Allow to skip only one occurrence of thousands_sep to avoid finding
|
||||
the unit in the next column in case thousands_sep matches as blank
|
||||
and is used as column delimiter. */
|
||||
- if (*p == thousands_sep)
|
||||
+ ends_with_thousands_sep = (*p == thousands_sep);
|
||||
+ if (ends_with_thousands_sep)
|
||||
++p;
|
||||
}
|
||||
|
||||
+ if (ends_with_thousands_sep)
|
||||
+ {
|
||||
+ /* thousands_sep not followed by digit is not allowed. */
|
||||
+ *number = p - 2;
|
||||
+ return max_digit;
|
||||
+ }
|
||||
+
|
||||
if (ch == decimal_point)
|
||||
while (ISDIGIT (ch = *p++))
|
||||
if (max_digit < ch)
|
||||
diff --git a/tests/misc/sort-h-thousands-sep.sh b/tests/misc/sort-h-thousands-sep.sh
|
||||
index 17f1b6c..3ffa89e 100755
|
||||
--- a/tests/misc/sort-h-thousands-sep.sh
|
||||
+++ b/tests/misc/sort-h-thousands-sep.sh
|
||||
@@ -18,28 +18,29 @@
|
||||
|
||||
. "${srcdir=.}/tests/init.sh"; path_prepend_ ./src
|
||||
print_ver_ sort
|
||||
+
|
||||
test "$(LC_ALL=sv_SE locale thousands_sep)" = ' ' \
|
||||
|| skip_ 'The Swedish locale with blank thousands separator is unavailable.'
|
||||
|
||||
-tee exp1 > in << _EOF_
|
||||
-1 1k 4 003 1M
|
||||
-2k 2M 4 002 2
|
||||
-3M 3 4 001 3k
|
||||
+tee exp1 exp3 > in << _EOF_
|
||||
+1 1k 1 M 4 003 1M
|
||||
+2k 2M 2 k 4 002 2
|
||||
+3M 3 3 G 4 001 3k
|
||||
_EOF_
|
||||
|
||||
cat > exp2 << _EOF_
|
||||
-3M 3 4 001 3k
|
||||
-1 1k 4 003 1M
|
||||
-2k 2M 4 002 2
|
||||
+3M 3 3 G 4 001 3k
|
||||
+1 1k 1 M 4 003 1M
|
||||
+2k 2M 2 k 4 002 2
|
||||
_EOF_
|
||||
|
||||
-cat > exp3 << _EOF_
|
||||
-3M 3 4 001 3k
|
||||
-2k 2M 4 002 2
|
||||
-1 1k 4 003 1M
|
||||
+cat > exp5 << _EOF_
|
||||
+3M 3 3 G 4 001 3k
|
||||
+2k 2M 2 k 4 002 2
|
||||
+1 1k 1 M 4 003 1M
|
||||
_EOF_
|
||||
|
||||
-for i in 1 2 3; do
|
||||
+for i in 1 2 3 5; do
|
||||
LC_ALL="sv_SE.utf8" sort -h -k $i "in" > "out${i}" || fail=1
|
||||
compare "exp${i}" "out${i}" || fail=1
|
||||
done
|
||||
--
|
||||
2.5.5
|
||||
|
|
@ -0,0 +1,115 @@
|
|||
From 1e1a69da31b39e4d672ccb8a3ca0e5400d4720ee Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?P=C3=A1draig=20Brady?= <P@draigBrady.com>
|
||||
Date: Wed, 26 Oct 2016 15:45:01 +0100
|
||||
Subject: [PATCH] md5sum,sha*sum: fix --ignore-missing with checksums starting
|
||||
with 00
|
||||
|
||||
* NEWS: Mention the fix.
|
||||
* src/md5sum.c (digest_file): Add a new MISSING parameter to
|
||||
return whether the file was missing, separately from the digest.
|
||||
* tests/misc/md5sum.pl: Add a test case.
|
||||
Fixes http://bugs.gnu.org/24795
|
||||
|
||||
Upstream-commit: d0ddfadfb27def2861f35b1a45190a4c1780b257
|
||||
Signed-off-by: Kamil Dudka <kdudka@redhat.com>
|
||||
---
|
||||
src/md5sum.c | 20 ++++++++++++--------
|
||||
tests/misc/md5sum.pl | 7 +++++++
|
||||
2 files changed, 19 insertions(+), 8 deletions(-)
|
||||
|
||||
diff --git a/src/md5sum.c b/src/md5sum.c
|
||||
index 933ec99..fee28c7 100644
|
||||
--- a/src/md5sum.c
|
||||
+++ b/src/md5sum.c
|
||||
@@ -465,15 +465,19 @@ print_filename (char const *file, bool escape)
|
||||
text because it was a terminal.
|
||||
|
||||
Put the checksum in *BIN_RESULT, which must be properly aligned.
|
||||
+ Put true in *MISSING if the file can't be opened due to ENOENT.
|
||||
Return true if successful. */
|
||||
|
||||
static bool
|
||||
-digest_file (const char *filename, int *binary, unsigned char *bin_result)
|
||||
+digest_file (const char *filename, int *binary, unsigned char *bin_result,
|
||||
+ bool *missing)
|
||||
{
|
||||
FILE *fp;
|
||||
int err;
|
||||
bool is_stdin = STREQ (filename, "-");
|
||||
|
||||
+ *missing = false;
|
||||
+
|
||||
if (is_stdin)
|
||||
{
|
||||
have_read_stdin = true;
|
||||
@@ -493,7 +497,7 @@ digest_file (const char *filename, int *binary, unsigned char *bin_result)
|
||||
{
|
||||
if (ignore_missing && errno == ENOENT)
|
||||
{
|
||||
- *bin_result = '\0';
|
||||
+ *missing = true;
|
||||
return true;
|
||||
}
|
||||
error (0, errno, "%s", quotef (filename));
|
||||
@@ -606,14 +610,14 @@ digest_check (const char *checkfile_name)
|
||||
'8', '9', 'a', 'b',
|
||||
'c', 'd', 'e', 'f' };
|
||||
bool ok;
|
||||
+ bool missing;
|
||||
/* Only escape in the edge case producing multiple lines,
|
||||
to ease automatic processing of status output. */
|
||||
bool needs_escape = ! status_only && strchr (filename, '\n');
|
||||
|
||||
properly_formatted_lines = true;
|
||||
|
||||
- *bin_buffer = '\1'; /* flag set to 0 for ignored missing files. */
|
||||
- ok = digest_file (filename, &binary, bin_buffer);
|
||||
+ ok = digest_file (filename, &binary, bin_buffer, &missing);
|
||||
|
||||
if (!ok)
|
||||
{
|
||||
@@ -626,10 +630,9 @@ digest_check (const char *checkfile_name)
|
||||
printf (": %s\n", _("FAILED open or read"));
|
||||
}
|
||||
}
|
||||
- else if (ignore_missing && ! *bin_buffer)
|
||||
+ else if (ignore_missing && missing)
|
||||
{
|
||||
- /* Treat an empty buffer as meaning a missing file,
|
||||
- which is ignored with --ignore-missing. */
|
||||
+ /* Ignore missing files with --ignore-missing. */
|
||||
;
|
||||
}
|
||||
else
|
||||
@@ -879,8 +882,9 @@ main (int argc, char **argv)
|
||||
else
|
||||
{
|
||||
int file_is_binary = binary;
|
||||
+ bool missing;
|
||||
|
||||
- if (! digest_file (file, &file_is_binary, bin_buffer))
|
||||
+ if (! digest_file (file, &file_is_binary, bin_buffer, &missing))
|
||||
ok = false;
|
||||
else
|
||||
{
|
||||
diff --git a/tests/misc/md5sum.pl b/tests/misc/md5sum.pl
|
||||
index 2eb6369..6ea7457 100755
|
||||
--- a/tests/misc/md5sum.pl
|
||||
+++ b/tests/misc/md5sum.pl
|
||||
@@ -149,6 +149,13 @@ my @Tests =
|
||||
{ERR=>
|
||||
"md5sum: f.md5: no file was verified\n"},
|
||||
{EXIT=> 1}],
|
||||
+ # coreutils-8.25 with --ignore-missing treated checksums starting with 00
|
||||
+ # as if the file was not present
|
||||
+ ['check-ignore-missing-6', '--check', '--ignore-missing',
|
||||
+ {AUX=> {f=> '9t'}},
|
||||
+ {IN=> {'f.md5' =>
|
||||
+ "006999e6df389641adf1fa3a74801d9d f\n"}},
|
||||
+ {OUT=>"f: OK\n"}],
|
||||
['bsd-segv', '--check', {IN=> {'z' => "MD5 ("}}, {EXIT=> 1},
|
||||
{ERR=> "$prog: z: no properly formatted MD5 checksum lines found\n"}],
|
||||
|
||||
--
|
||||
2.7.4
|
||||
|
|
@ -1,26 +0,0 @@
|
|||
From 6880c3dc9098b3337612850d1500b474aeb944ca Mon Sep 17 00:00:00 2001
|
||||
From: Kamil Dudka <kdudka@redhat.com>
|
||||
Date: Tue, 29 Aug 2017 17:33:51 +0200
|
||||
Subject: [PATCH] require_selinux_(): use selinuxenabled(8) if available
|
||||
|
||||
---
|
||||
init.cfg | 3 +++
|
||||
1 file changed, 3 insertions(+)
|
||||
|
||||
diff --git a/init.cfg b/init.cfg
|
||||
index af6b581..f887b3a 100644
|
||||
--- a/init.cfg
|
||||
+++ b/init.cfg
|
||||
@@ -114,6 +114,9 @@ require_selinux_()
|
||||
grep 'selinuxfs$' /proc/filesystems > /dev/null \
|
||||
|| skip_ "this system lacks SELinux support"
|
||||
|
||||
+ # use the 'selinuxenabled' utility if available
|
||||
+ selinuxenabled; [ $? = 1 ] && skip_ "SELinux is disabled"
|
||||
+
|
||||
# Independent of whether SELinux is enabled system-wide,
|
||||
# the current file system may lack SELinux support.
|
||||
# Also the current build may have SELinux support disabled.
|
||||
--
|
||||
2.9.5
|
||||
|
|
@ -1,29 +0,0 @@
|
|||
From 0d04ee8ddedb2bf33d64f148f246a3b7ec4fef21 Mon Sep 17 00:00:00 2001
|
||||
From: Kamil Dudka <kdudka@redhat.com>
|
||||
Date: Mon, 23 Jan 2017 12:35:41 +0100
|
||||
Subject: [PATCH] test-lock: disable the rwlock test
|
||||
|
||||
It hangs indefinitely if the system rwlock implementation does not
|
||||
prevent writer starvation (and glibc does not implement it).
|
||||
|
||||
Bug: http://www.mail-archive.com/bug-gnulib@gnu.org/msg33017.html
|
||||
---
|
||||
gnulib-tests/test-lock.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/gnulib-tests/test-lock.c b/gnulib-tests/test-lock.c
|
||||
index aa6de27..5af0a6c 100644
|
||||
--- a/gnulib-tests/test-lock.c
|
||||
+++ b/gnulib-tests/test-lock.c
|
||||
@@ -42,7 +42,7 @@
|
||||
Uncomment some of these, to verify that all tests crash if no locking
|
||||
is enabled. */
|
||||
#define DO_TEST_LOCK 1
|
||||
-#define DO_TEST_RWLOCK 1
|
||||
+#define DO_TEST_RWLOCK 0
|
||||
#define DO_TEST_RECURSIVE_LOCK 1
|
||||
#define DO_TEST_ONCE 1
|
||||
|
||||
--
|
||||
2.7.4
|
||||
|
|
@ -1,100 +0,0 @@
|
|||
From c7b13f5e1a7ad012c510a8bdd5a8943ab4b55833 Mon Sep 17 00:00:00 2001
|
||||
From: Kamil Dudka <kdudka@redhat.com>
|
||||
Date: Fri, 17 Jun 2016 16:58:18 +0200
|
||||
Subject: [PATCH] downstream changes to default DIR_COLORS
|
||||
|
||||
---
|
||||
DIR_COLORS | 9 ++++++++-
|
||||
DIR_COLORS.lightbgcolor | 21 +++++++++++++++------
|
||||
2 files changed, 23 insertions(+), 7 deletions(-)
|
||||
|
||||
diff --git a/DIR_COLORS b/DIR_COLORS
|
||||
index b465771..ad42b09 100644
|
||||
--- a/DIR_COLORS
|
||||
+++ b/DIR_COLORS
|
||||
@@ -1,3 +1,7 @@
|
||||
+# This file goes in the /etc directory, and must be world readable.
|
||||
+# You can copy this file to .dir_colors in your $HOME directory to override
|
||||
+# the system defaults.
|
||||
+
|
||||
# Configuration file for dircolors, a utility to help you set the
|
||||
# LS_COLORS environment variable used by GNU ls with the --color option.
|
||||
|
||||
@@ -10,6 +14,9 @@
|
||||
|
||||
# Global config options can be specified before TERM or COLORTERM entries
|
||||
|
||||
+# For compatibility, the pattern "^COLOR.*none" is recognized as a way to
|
||||
+# disable colorization. See https://bugzilla.redhat.com/1349579 for details.
|
||||
+
|
||||
# Below are TERM or COLORTERM entries, which can be glob patterns, which
|
||||
# restrict following config to systems with matching environment variables.
|
||||
COLORTERM ?*
|
||||
@@ -62,7 +69,7 @@ DOOR 01;35 # door
|
||||
BLK 40;33;01 # block device driver
|
||||
CHR 40;33;01 # character device driver
|
||||
ORPHAN 40;31;01 # symlink to nonexistent file, or non-stat'able file ...
|
||||
-MISSING 00 # ... and the files they point to
|
||||
+MISSING 01;37;41 # ... and the files they point to
|
||||
SETUID 37;41 # file that is setuid (u+s)
|
||||
SETGID 30;43 # file that is setgid (g+s)
|
||||
CAPABILITY 00 # file with capability (very expensive to lookup)
|
||||
diff --git a/DIR_COLORS.lightbgcolor b/DIR_COLORS.lightbgcolor
|
||||
index eab6258..1627b63 100644
|
||||
--- a/DIR_COLORS.lightbgcolor
|
||||
+++ b/DIR_COLORS.lightbgcolor
|
||||
@@ -1,3 +1,9 @@
|
||||
+# Configuration file for the color ls utility - modified for lighter backgrounds
|
||||
+
|
||||
+# This file goes in the /etc directory, and must be world readable.
|
||||
+# You can copy this file to .dir_colors in your $HOME directory to override
|
||||
+# the system defaults.
|
||||
+
|
||||
# Configuration file for dircolors, a utility to help you set the
|
||||
# LS_COLORS environment variable used by GNU ls with the --color option.
|
||||
|
||||
@@ -10,6 +16,9 @@
|
||||
|
||||
# Global config options can be specified before TERM or COLORTERM entries
|
||||
|
||||
+# For compatibility, the pattern "^COLOR.*none" is recognized as a way to
|
||||
+# disable colorization. See https://bugzilla.redhat.com/1349579 for details.
|
||||
+
|
||||
# Below are TERM or COLORTERM entries, which can be glob patterns, which
|
||||
# restrict following config to systems with matching environment variables.
|
||||
COLORTERM ?*
|
||||
@@ -52,17 +61,17 @@ TERM xterm*
|
||||
#NORMAL 00 # no color code at all
|
||||
#FILE 00 # regular file: use no color at all
|
||||
RESET 0 # reset to "normal" color
|
||||
-DIR 01;34 # directory
|
||||
-LINK 01;36 # symbolic link. (If you set this to 'target' instead of a
|
||||
+DIR 00;34 # directory
|
||||
+LINK 00;36 # symbolic link. (If you set this to 'target' instead of a
|
||||
# numerical value, the color is as for the file pointed to.)
|
||||
MULTIHARDLINK 00 # regular file with more than one link
|
||||
FIFO 40;33 # pipe
|
||||
-SOCK 01;35 # socket
|
||||
-DOOR 01;35 # door
|
||||
+SOCK 00;35 # socket
|
||||
+DOOR 00;35 # door
|
||||
BLK 40;33;01 # block device driver
|
||||
CHR 40;33;01 # character device driver
|
||||
ORPHAN 40;31;01 # symlink to nonexistent file, or non-stat'able file ...
|
||||
-MISSING 00 # ... and the files they point to
|
||||
+MISSING 01;37;41 # ... and the files they point to
|
||||
SETUID 37;41 # file that is setuid (u+s)
|
||||
SETGID 30;43 # file that is setgid (g+s)
|
||||
CAPABILITY 00 # file with capability (very expensive to lookup)
|
||||
@@ -71,7 +80,7 @@ OTHER_WRITABLE 34;42 # dir that is other-writable (o+w) and not sticky
|
||||
STICKY 37;44 # dir with the sticky bit set (+t) and not other-writable
|
||||
|
||||
# This is for files with execute permission:
|
||||
-EXEC 01;32
|
||||
+EXEC 00;32
|
||||
|
||||
# List any file extensions like '.gz' or '.tar' that you would like ls
|
||||
# to color below. Put the extension, a space, and the color init string.
|
||||
--
|
||||
2.34.1
|
||||
|
|
@ -1,8 +1,7 @@
|
|||
diff --git a/doc/coreutils.texi b/doc/coreutils.texi
|
||||
index 400e135..47e4480 100644
|
||||
--- a/doc/coreutils.texi
|
||||
+++ b/doc/coreutils.texi
|
||||
@@ -10829,6 +10829,8 @@ incorrect. @xref{Directory Setuid and Setgid}, for how the
|
||||
diff -urNp coreutils-8.4-orig/doc/coreutils.texi coreutils-8.4/doc/coreutils.texi
|
||||
--- coreutils-8.4-orig/doc/coreutils.texi 2011-01-07 15:01:18.575654333 +0100
|
||||
+++ coreutils-8.4/doc/coreutils.texi 2011-01-07 15:05:38.791655243 +0100
|
||||
@@ -9993,6 +9993,8 @@ incorrect. @xref{Directory Setuid and Setgid}, for how the
|
||||
set-user-ID and set-group-ID bits of directories are inherited unless
|
||||
overridden in this way.
|
||||
|
||||
|
|
|
@ -0,0 +1,13 @@
|
|||
diff -urNp coreutils-8.5-orig/src/dircolors.hin coreutils-8.5/src/dircolors.hin
|
||||
--- coreutils-8.5-orig/src/dircolors.hin 2010-04-20 21:52:04.000000000 +0200
|
||||
+++ coreutils-8.5/src/dircolors.hin 2010-07-22 16:18:41.978036926 +0200
|
||||
@@ -127,6 +127,9 @@ EXEC 01;32
|
||||
.deb 01;31
|
||||
.rpm 01;31
|
||||
.jar 01;31
|
||||
+.war 01;31
|
||||
+.ear 01;31
|
||||
+.sar 01;31
|
||||
.rar 01;31
|
||||
.ace 01;31
|
||||
.zoo 01;31
|
|
@ -0,0 +1,264 @@
|
|||
# Configuration file for the color ls utility
|
||||
# Synchronized with coreutils 8.5 dircolors
|
||||
# This file goes in the /etc directory, and must be world readable.
|
||||
# You can copy this file to .dir_colors in your $HOME directory to override
|
||||
# the system defaults.
|
||||
|
||||
# COLOR needs one of these arguments: 'tty' colorizes output to ttys, but not
|
||||
# pipes. 'all' adds color characters to all output. 'none' shuts colorization
|
||||
# off.
|
||||
COLOR tty
|
||||
|
||||
# Extra command line options for ls go here.
|
||||
# Basically these ones are:
|
||||
# -F = show '/' for dirs, '*' for executables, etc.
|
||||
# -T 0 = don't trust tab spacing when formatting ls output.
|
||||
OPTIONS -F -T 0
|
||||
|
||||
# Below, there should be one TERM entry for each termtype that is colorizable
|
||||
TERM Eterm
|
||||
TERM ansi
|
||||
TERM color-xterm
|
||||
TERM con132x25
|
||||
TERM con132x30
|
||||
TERM con132x43
|
||||
TERM con132x60
|
||||
TERM con80x25
|
||||
TERM con80x28
|
||||
TERM con80x30
|
||||
TERM con80x43
|
||||
TERM con80x50
|
||||
TERM con80x60
|
||||
TERM cons25
|
||||
TERM console
|
||||
TERM cygwin
|
||||
TERM dtterm
|
||||
TERM eterm-color
|
||||
TERM gnome
|
||||
TERM gnome-256color
|
||||
TERM hurd
|
||||
TERM jfbterm
|
||||
TERM konsole
|
||||
TERM kterm
|
||||
TERM linux
|
||||
TERM linux-c
|
||||
TERM mach-color
|
||||
TERM mach-gnu-color
|
||||
TERM mlterm
|
||||
TERM putty
|
||||
TERM putty-256color
|
||||
TERM rxvt
|
||||
TERM rxvt-256color
|
||||
TERM rxvt-cygwin
|
||||
TERM rxvt-cygwin-native
|
||||
TERM rxvt-unicode
|
||||
TERM rxvt-unicode-256color
|
||||
TERM rxvt-unicode256
|
||||
TERM screen
|
||||
TERM screen-256color
|
||||
TERM screen-256color-bce
|
||||
TERM screen-bce
|
||||
TERM screen-w
|
||||
TERM screen.Eterm
|
||||
TERM screen.rxvt
|
||||
TERM screen.linux
|
||||
TERM st
|
||||
TERM st-256color
|
||||
TERM terminator
|
||||
TERM vt100
|
||||
TERM xterm
|
||||
TERM xterm-16color
|
||||
TERM xterm-256color
|
||||
TERM xterm-88color
|
||||
TERM xterm-color
|
||||
TERM xterm-debian
|
||||
|
||||
# EIGHTBIT, followed by '1' for on, '0' for off. (8-bit output)
|
||||
EIGHTBIT 1
|
||||
|
||||
# Below are the color init strings for the basic file types. A color init
|
||||
# string consists of one or more of the following numeric codes:
|
||||
# Attribute codes:
|
||||
# 00=none 01=bold 04=underscore 05=blink 07=reverse 08=concealed
|
||||
# Text color codes:
|
||||
# 30=black 31=red 32=green 33=yellow 34=blue 35=magenta 36=cyan 37=white
|
||||
# Background color codes:
|
||||
# 40=black 41=red 42=green 43=yellow 44=blue 45=magenta 46=cyan 47=white
|
||||
#NORMAL 00 # no color code at all
|
||||
#FILE 00 # normal file, use no color at all
|
||||
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.)
|
||||
MULTIHARDLINK 00 # regular file with more than one link
|
||||
FIFO 40;33 # pipe
|
||||
SOCK 01;35 # socket
|
||||
DOOR 01;35 # door
|
||||
BLK 40;33;01 # block device driver
|
||||
CHR 40;33;01 # character device driver
|
||||
ORPHAN 40;31;01 # symlink to nonexistent file, or non-stat'able file
|
||||
MISSING 01;05;37;41 # ... and the files they point to
|
||||
SETUID 37;41 # file that is setuid (u+s)
|
||||
SETGID 30;43 # file that is setgid (g+s)
|
||||
CAPABILITY 30;41 # file with capability
|
||||
STICKY_OTHER_WRITABLE 30;42 # dir that is sticky and other-writable (+t,o+w)
|
||||
OTHER_WRITABLE 34;42 # dir that is other-writable (o+w) and not sticky
|
||||
STICKY 37;44 # dir with the sticky bit set (+t) and not other-writable
|
||||
|
||||
# This is for files with execute permission:
|
||||
EXEC 01;32
|
||||
|
||||
# List any file extensions like '.gz' or '.tar' that you would like ls
|
||||
# to colorize below. Put the extension, a space, and the color init string.
|
||||
# (and any comments you want to add after a '#')
|
||||
# executables (bright green)
|
||||
#.cmd 01;32
|
||||
#.exe 01;32
|
||||
#.com 01;32
|
||||
#.btm 01;32
|
||||
#.bat 01;32
|
||||
#.sh 01;32
|
||||
#.csh 01;32
|
||||
|
||||
# archives or compressed (bright red)
|
||||
.tar 01;31
|
||||
.tgz 01;31
|
||||
.arc 01;31
|
||||
.arj 01;31
|
||||
.taz 01;31
|
||||
.lha 01;31
|
||||
.lz4 01;31
|
||||
.lzh 01;31
|
||||
.lzma 01;31
|
||||
.tlz 01;31
|
||||
.txz 01;31
|
||||
.tzo 01;31
|
||||
.t7z 01;31
|
||||
.zip 01;31
|
||||
.z 01;31
|
||||
.Z 01;31
|
||||
.dz 01;31
|
||||
.gz 01;31
|
||||
.lrz 01;31
|
||||
.lz 01;31
|
||||
.lzo 01;31
|
||||
.xz 01;31
|
||||
.bz2 01;31
|
||||
.bz 01;31
|
||||
.tbz 01;31
|
||||
.tbz2 01;31
|
||||
.tz 01;31
|
||||
.deb 01;31
|
||||
.rpm 01;31
|
||||
.jar 01;31
|
||||
.war 01;31
|
||||
.ear 01;31
|
||||
.sar 01;31
|
||||
.rar 01;31
|
||||
.alz 01;31
|
||||
.ace 01;31
|
||||
.zoo 01;31
|
||||
.cpio 01;31
|
||||
.7z 01;31
|
||||
.rz 01;31
|
||||
.cab 01;31
|
||||
|
||||
# image formats (magenta)
|
||||
.jpg 01;35
|
||||
.jpeg 01;35
|
||||
.gif 01;35
|
||||
.bmp 01;35
|
||||
.pbm 01;35
|
||||
.pgm 01;35
|
||||
.ppm 01;35
|
||||
.tga 01;35
|
||||
.xbm 01;35
|
||||
.xpm 01;35
|
||||
.tif 01;35
|
||||
.tiff 01;35
|
||||
.png 01;35
|
||||
.svg 01;35
|
||||
.svgz 01;35
|
||||
.mng 01;35
|
||||
.pcx 01;35
|
||||
.mov 01;35
|
||||
.mpg 01;35
|
||||
.mpeg 01;35
|
||||
.m2v 01;35
|
||||
.mkv 01;35
|
||||
.webm 01;35
|
||||
.ogm 01;35
|
||||
.mp4 01;35
|
||||
.m4v 01;35
|
||||
.mp4v 01;35
|
||||
.vob 01;35
|
||||
.qt 01;35
|
||||
.nuv 01;35
|
||||
.wmv 01;35
|
||||
.asf 01;35
|
||||
.rm 01;35
|
||||
.rmvb 01;35
|
||||
.flc 01;35
|
||||
.avi 01;35
|
||||
.fli 01;35
|
||||
.flv 01;35
|
||||
.gl 01;35
|
||||
.dl 01;35
|
||||
.xcf 01;35
|
||||
.xwd 01;35
|
||||
.yuv 01;35
|
||||
.cgm 01;35
|
||||
.emf 01;35
|
||||
|
||||
# http://wiki.xiph.org/index.php/MIME_Types_and_File_Extensions
|
||||
.ogv 01;35
|
||||
.ogx 01;35
|
||||
|
||||
# audio formats (cyan)
|
||||
.aac 01;36
|
||||
.au 01;36
|
||||
.flac 01;36
|
||||
.m4a 01;36
|
||||
.mid 01;36
|
||||
.midi 01;36
|
||||
.mka 01;36
|
||||
.mp3 01;36
|
||||
.mpc 01;36
|
||||
.ogg 01;36
|
||||
.ra 01;36
|
||||
.wav 01;36
|
||||
|
||||
# http://wiki.xiph.org/index.php/MIME_Types_and_File_Extensions
|
||||
.oga 01;36
|
||||
.opus 01;36
|
||||
.spx 01;36
|
||||
.xspf 01;36
|
||||
|
||||
# colorize binary documents (brown)
|
||||
#.pdf 00;33
|
||||
#.ps 00;33
|
||||
#.ps.gz 00;33
|
||||
#.tex 00;33
|
||||
#.xls 00;33
|
||||
#.xlsx 00;33
|
||||
#.ppt 00;33
|
||||
#.pptx 00;33
|
||||
#.rtf 00;33
|
||||
#.doc 00;33
|
||||
#.docx 00;33
|
||||
#.odt 00;33
|
||||
#.ods 00;33
|
||||
#.odp 00;33
|
||||
#.epub 00;33
|
||||
#.abw 00;33
|
||||
#.wpd 00;33
|
||||
#
|
||||
# colorize text documents (brown)
|
||||
#.txt 00;33
|
||||
#.patch 00;33
|
||||
#.diff 00;33
|
||||
#.log 00;33
|
||||
#.htm 00;33
|
||||
#.html 00;33
|
||||
#.shtml 00;33
|
||||
#.xml 00;33
|
|
@ -0,0 +1,226 @@
|
|||
# Configuration file for the 256color ls utility
|
||||
# This file goes in the /etc directory, and must be world readable.
|
||||
# Synchronized with coreutils 8.5 dircolors
|
||||
# You can copy this file to .dir_colors in your $HOME directory to override
|
||||
# the system defaults.
|
||||
# In the case that you are not satisfied with supplied colors, please
|
||||
# submit your color configuration or attach your file with colors readable
|
||||
# on ALL color background schemas (white,gray,black) to RedHat Bugzilla
|
||||
# ticket on https://bugzilla.redhat.com/show_bug.cgi?id=429121 . TIA.
|
||||
# Please just keep ls color conventions from 8 color scheme.
|
||||
|
||||
# COLOR needs one of these arguments: 'tty' colorizes output to ttys, but not
|
||||
# pipes. 'all' adds color characters to all output. 'none' shuts colorization
|
||||
# off.
|
||||
COLOR tty
|
||||
|
||||
# Extra command line options for ls go here.
|
||||
# Basically these ones are:
|
||||
# -F = show '/' for dirs, '*' for executables, etc.
|
||||
# -T 0 = don't trust tab spacing when formatting ls output.
|
||||
OPTIONS -F -T 0
|
||||
|
||||
# Below, there should be one TERM entry for each termtype that is colorizable
|
||||
TERM *256color*
|
||||
TERM rxvt-unicode256
|
||||
|
||||
# EIGHTBIT, followed by '1' for on, '0' for off. (8-bit output)
|
||||
EIGHTBIT 1
|
||||
|
||||
# Below are the color init strings for the basic file types. A color init
|
||||
# string consists of one or more of the following numeric codes:
|
||||
# Attribute codes:
|
||||
# 00=none 01=bold 04=underscore 05=blink 07=reverse 08=concealed
|
||||
# Text color(8 colors mode) codes:
|
||||
# 30=black 31=red 32=green 33=yellow 34=blue 35=magenta 36=cyan 37=white
|
||||
# Background color(8 colors mode) codes:
|
||||
# 40=black 41=red 42=green 43=yellow 44=blue 45=magenta 46=cyan 47=white
|
||||
# Text color(256 colors mode) codes:
|
||||
# Valid syntax for text 256color is 38;5;<color number> , where color number
|
||||
# is number between 0 and 255.
|
||||
# You may find following command useful to search the best one for you:
|
||||
# for ((x=0; x<=255; x++));do echo -e "${x}:\033[38;5;${x}mcolor\033[000m";done
|
||||
# Background color(256 colors mode) codes:
|
||||
# Valid syntax for background 256color is 48;5;<color number> , where
|
||||
# color number is number between 0 and 255.
|
||||
# You may find following command useful to search the best one for you:
|
||||
# for ((x=0; x<=255; x++));do echo -e "${x}:\033[48;5;${x}mcolor\033[000m";done
|
||||
|
||||
#NORMAL 00 # global default, no color code at all
|
||||
#FILE 00 # normal file, use no color at all
|
||||
RESET 0 # reset to "normal" color
|
||||
DIR 38;5;33 # directory
|
||||
LINK 38;5;51 # symbolic link (If you set this to 'target' instead of a
|
||||
# numerical value, the color is as for the file pointed to.)
|
||||
MULTIHARDLINK 00 # regular file with more than one link
|
||||
FIFO 40;38;5;11 # pipe
|
||||
SOCK 38;5;13 # socket
|
||||
DOOR 38;5;5 # door
|
||||
BLK 48;5;232;38;5;11 # block device driver
|
||||
CHR 48;5;232;38;5;3 # character device driver
|
||||
ORPHAN 48;5;232;38;5;9 # symlink to nonexistent file, or non-stat'able file
|
||||
MISSING 01;05;37;41 # ... and the files they point to
|
||||
SETUID 48;5;196;38;5;15 # file that is setuid (u+s)
|
||||
SETGID 48;5;11;38;5;16 # file that is setgid (g+s)
|
||||
CAPABILITY 48;5;196;38;5;226 # file with capability
|
||||
STICKY_OTHER_WRITABLE 48;5;10;38;5;16 # dir that is sticky and other-writable (+t,o+w)
|
||||
OTHER_WRITABLE 48;5;10;38;5;21 # dir that is other-writable (o+w) and not sticky
|
||||
STICKY 48;5;21;38;5;15 # dir with the sticky bit set (+t) and not other-writable
|
||||
|
||||
# This is for files with execute permission:
|
||||
EXEC 38;5;40
|
||||
|
||||
# List any file extensions like '.gz' or '.tar' that you would like ls
|
||||
# to colorize below. Put the extension, a space, and the color init string.
|
||||
# (and any comments you want to add after a '#')
|
||||
# executables (bright green)
|
||||
#.cmd 38;5;34
|
||||
#.exe 38;5;34
|
||||
#.com 38;5;34
|
||||
#.btm 38;5;34
|
||||
#.bat 38;5;34
|
||||
#.sh 38;5;34
|
||||
#.csh 38;5;34
|
||||
|
||||
# archives or compressed (bright red)
|
||||
.tar 38;5;9
|
||||
.tgz 38;5;9
|
||||
.arc 38;5;9
|
||||
.arj 38;5;9
|
||||
.taz 38;5;9
|
||||
.lha 38;5;9
|
||||
.lz4 38;5;9
|
||||
.lzh 38;5;9
|
||||
.lzma 38;5;9
|
||||
.tlz 38;5;9
|
||||
.txz 38;5;9
|
||||
.tzo 38;5;9
|
||||
.t7z 38;5;9
|
||||
.zip 38;5;9
|
||||
.z 38;5;9
|
||||
.Z 38;5;9
|
||||
.dz 38;5;9
|
||||
.gz 38;5;9
|
||||
.lrz 38;5;9
|
||||
.lz 38;5;9
|
||||
.lzo 38;5;9
|
||||
.xz 38;5;9
|
||||
.bz2 38;5;9
|
||||
.bz 38;5;9
|
||||
.tbz 38;5;9
|
||||
.tbz2 38;5;9
|
||||
.tz 38;5;9
|
||||
.deb 38;5;9
|
||||
.rpm 38;5;9
|
||||
.jar 38;5;9
|
||||
.war 38;5;9
|
||||
.ear 38;5;9
|
||||
.sar 38;5;9
|
||||
.rar 38;5;9
|
||||
.alz 38;5;9
|
||||
.ace 38;5;9
|
||||
.zoo 38;5;9
|
||||
.cpio 38;5;9
|
||||
.7z 38;5;9
|
||||
.rz 38;5;9
|
||||
.cab 38;5;9
|
||||
|
||||
# image formats (magenta)
|
||||
.jpg 38;5;13
|
||||
.jpeg 38;5;13
|
||||
.gif 38;5;13
|
||||
.bmp 38;5;13
|
||||
.pbm 38;5;13
|
||||
.pgm 38;5;13
|
||||
.ppm 38;5;13
|
||||
.tga 38;5;13
|
||||
.xbm 38;5;13
|
||||
.xpm 38;5;13
|
||||
.tif 38;5;13
|
||||
.tiff 38;5;13
|
||||
.png 38;5;13
|
||||
.svg 38;5;13
|
||||
.svgz 38;5;13
|
||||
.mng 38;5;13
|
||||
.pcx 38;5;13
|
||||
.mov 38;5;13
|
||||
.mpg 38;5;13
|
||||
.mpeg 38;5;13
|
||||
.m2v 38;5;13
|
||||
.mkv 38;5;13
|
||||
.webm 38;5;13
|
||||
.ogm 38;5;13
|
||||
.mp4 38;5;13
|
||||
.m4v 38;5;13
|
||||
.mp4v 38;5;13
|
||||
.vob 38;5;13
|
||||
.qt 38;5;13
|
||||
.nuv 38;5;13
|
||||
.wmv 38;5;13
|
||||
.asf 38;5;13
|
||||
.rm 38;5;13
|
||||
.rmvb 38;5;13
|
||||
.flc 38;5;13
|
||||
.avi 38;5;13
|
||||
.fli 38;5;13
|
||||
.flv 38;5;13
|
||||
.gl 38;5;13
|
||||
.dl 38;5;13
|
||||
.xcf 38;5;13
|
||||
.xwd 38;5;13
|
||||
.yuv 38;5;13
|
||||
.cgm 38;5;13
|
||||
.emf 38;5;13
|
||||
|
||||
# http://wiki.xiph.org/index.php/MIME_Types_and_File_Extensions
|
||||
.ogv 38;5;13
|
||||
.ogx 38;5;13
|
||||
|
||||
# audio formats (cyan)
|
||||
.aac 38;5;45
|
||||
.au 38;5;45
|
||||
.flac 38;5;45
|
||||
.m4a 38;5;45
|
||||
.mid 38;5;45
|
||||
.midi 38;5;45
|
||||
.mka 38;5;45
|
||||
.mp3 38;5;45
|
||||
.mpc 38;5;45
|
||||
.ogg 38;5;45
|
||||
.ra 38;5;45
|
||||
.wav 38;5;45
|
||||
|
||||
# http://wiki.xiph.org/index.php/MIME_Types_and_File_Extensions
|
||||
.oga 38;5;45
|
||||
.opus 38;5;45
|
||||
.spx 38;5;45
|
||||
.xspf 38;5;45
|
||||
|
||||
# colorize binary documents (brown)
|
||||
#.pdf 00;33
|
||||
#.ps 00;33
|
||||
#.ps.gz 00;33
|
||||
#.tex 00;33
|
||||
#.xls 00;33
|
||||
#.xlsx 00;33
|
||||
#.ppt 00;33
|
||||
#.pptx 00;33
|
||||
#.rtf 00;33
|
||||
#.doc 00;33
|
||||
#.docx 00;33
|
||||
#.odt 00;33
|
||||
#.ods 00;33
|
||||
#.odp 00;33
|
||||
#.epub 00;33
|
||||
#.abw 00;33
|
||||
#.wpd 00;33
|
||||
#
|
||||
# colorize text documents (brown)
|
||||
#.txt 00;33
|
||||
#.patch 00;33
|
||||
#.diff 00;33
|
||||
#.log 00;33
|
||||
#.htm 00;33
|
||||
#.html 00;33
|
||||
#.shtml 00;33
|
||||
#.xml 00;33
|
|
@ -0,0 +1,263 @@
|
|||
# Configuration file for the color ls utility - modified for lighter backgrounds
|
||||
# Synchronized with coreutils 8.5 dircolors
|
||||
# This file goes in the /etc directory, and must be world readable.
|
||||
# You can copy this file to .dir_colors in your $HOME directory to override
|
||||
# the system defaults.
|
||||
|
||||
# COLOR needs one of these arguments: 'tty' colorizes output to ttys, but not
|
||||
# pipes. 'all' adds color characters to all output. 'none' shuts colorization
|
||||
# off.
|
||||
COLOR tty
|
||||
|
||||
# Extra command line options for ls go here.
|
||||
# Basically these ones are:
|
||||
# -F = show '/' for dirs, '*' for executables, etc.
|
||||
# -T 0 = don't trust tab spacing when formatting ls output.
|
||||
OPTIONS -F -T 0
|
||||
|
||||
# Below, there should be one TERM entry for each termtype that is colorizable
|
||||
TERM Eterm
|
||||
TERM ansi
|
||||
TERM color-xterm
|
||||
TERM con132x25
|
||||
TERM con132x30
|
||||
TERM con132x43
|
||||
TERM con132x60
|
||||
TERM con80x25
|
||||
TERM con80x28
|
||||
TERM con80x30
|
||||
TERM con80x43
|
||||
TERM con80x50
|
||||
TERM con80x60
|
||||
TERM cons25
|
||||
TERM console
|
||||
TERM cygwin
|
||||
TERM dtterm
|
||||
TERM eterm-color
|
||||
TERM gnome
|
||||
TERM gnome-256color
|
||||
TERM hurd
|
||||
TERM jfbterm
|
||||
TERM konsole
|
||||
TERM kterm
|
||||
TERM linux
|
||||
TERM linux-c
|
||||
TERM mach-color
|
||||
TERM mach-gnu-color
|
||||
TERM mlterm
|
||||
TERM putty
|
||||
TERM putty-256color
|
||||
TERM rxvt
|
||||
TERM rxvt-256color
|
||||
TERM rxvt-cygwin
|
||||
TERM rxvt-cygwin-native
|
||||
TERM rxvt-unicode
|
||||
TERM rxvt-unicode-256color
|
||||
TERM rxvt-unicode256
|
||||
TERM screen
|
||||
TERM screen-256color
|
||||
TERM screen-256color-bce
|
||||
TERM screen-bce
|
||||
TERM screen-w
|
||||
TERM screen.Eterm
|
||||
TERM screen.rxvt
|
||||
TERM screen.linux
|
||||
TERM st
|
||||
TERM st-256color
|
||||
TERM terminator
|
||||
TERM vt100
|
||||
TERM xterm
|
||||
TERM xterm-16color
|
||||
TERM xterm-256color
|
||||
TERM xterm-88color
|
||||
TERM xterm-color
|
||||
TERM xterm-debian
|
||||
|
||||
# EIGHTBIT, followed by '1' for on, '0' for off. (8-bit output)
|
||||
EIGHTBIT 1
|
||||
|
||||
# Below are the color init strings for the basic file types. A color init
|
||||
# string consists of one or more of the following numeric codes:
|
||||
# Attribute codes:
|
||||
# 00=none 01=bold 04=underscore 05=blink 07=reverse 08=concealed
|
||||
# Text color codes:
|
||||
# 30=black 31=red 32=green 33=yellow 34=blue 35=magenta 36=cyan 37=white
|
||||
# Background color codes:
|
||||
# 40=black 41=red 42=green 43=yellow 44=blue 45=magenta 46=cyan 47=white
|
||||
#NORMAL 00 # no color code at all
|
||||
#FILE 00 # normal file, use no color at all
|
||||
RESET 0 # reset to "normal" color
|
||||
DIR 00;34 # directory
|
||||
LINK 00;36 # symbolic link (If you set this to 'target' instead of a
|
||||
# numerical value, the color is as for the file pointed to.)
|
||||
MULTIHARDLINK 00 # regular file with more than one link
|
||||
FIFO 40;33 # pipe
|
||||
SOCK 00;35 # socket
|
||||
DOOR 00;35 # door
|
||||
BLK 40;33;01 # block device driver
|
||||
CHR 40;33;01 # character device driver
|
||||
ORPHAN 40;31;01 # symlink to nonexistent file, or non-stat'able file
|
||||
MISSING 01;05;37;41 # ... and the files they point to
|
||||
SETUID 37;41 # file that is setuid (u+s)
|
||||
SETGID 30;43 # file that is setgid (g+s)
|
||||
CAPABILITY 30;41 # file with capability
|
||||
STICKY_OTHER_WRITABLE 30;42 # dir that is sticky and other-writable (+t,o+w)
|
||||
OTHER_WRITABLE 34;42 # dir that is other-writable (o+w) and not sticky
|
||||
STICKY 37;44 # dir with the sticky bit set (+t) and not other-writable
|
||||
|
||||
# This is for files with execute permission:
|
||||
EXEC 00;32
|
||||
|
||||
# List any file extensions like '.gz' or '.tar' that you would like ls
|
||||
# to colorize below. Put the extension, a space, and the color init string.
|
||||
# (and any comments you want to add after a '#')
|
||||
#.cmd 00;32 # executables (green)
|
||||
#.exe 00;32
|
||||
#.com 00;32
|
||||
#.btm 00;32
|
||||
#.bat 00;32
|
||||
#.sh 00;32
|
||||
#.csh 00;32
|
||||
|
||||
# archives or compressed (red)
|
||||
.tar 00;31
|
||||
.tgz 00;31
|
||||
.arc 00;31
|
||||
.arj 00;31
|
||||
.taz 00;31
|
||||
.lha 00;31
|
||||
.lz4 00;31
|
||||
.lzh 00;31
|
||||
.lzma 00;31
|
||||
.tlz 00;31
|
||||
.txz 00;31
|
||||
.tzo 00;31
|
||||
.t7z 00;31
|
||||
.zip 00;31
|
||||
.z 00;31
|
||||
.Z 00;31
|
||||
.dz 00;31
|
||||
.gz 00;31
|
||||
.lrz 00;31
|
||||
.lz 00;31
|
||||
.lzo 00;31
|
||||
.xz 00;31
|
||||
.bz2 00;31
|
||||
.bz 00;31
|
||||
.tbz 00;31
|
||||
.tbz2 00;31
|
||||
.tz 00;31
|
||||
.deb 00;31
|
||||
.rpm 00;31
|
||||
.jar 00;31
|
||||
.war 00;31
|
||||
.ear 00;31
|
||||
.sar 00;31
|
||||
.rar 00;31
|
||||
.alz 00;31
|
||||
.ace 00;31
|
||||
.zoo 00;31
|
||||
.cpio 00;31
|
||||
.7z 00;31
|
||||
.rz 00;31
|
||||
.cab 00;31
|
||||
|
||||
# image formats (magenta)
|
||||
.jpg 00;35
|
||||
.jpeg 00;35
|
||||
.gif 00;35
|
||||
.bmp 00;35
|
||||
.pbm 00;35
|
||||
.pgm 00;35
|
||||
.ppm 00;35
|
||||
.tga 00;35
|
||||
.xbm 00;35
|
||||
.xpm 00;35
|
||||
.tif 00;35
|
||||
.tiff 00;35
|
||||
.png 00;35
|
||||
.svg 00;35
|
||||
.svgz 00;35
|
||||
.mng 00;35
|
||||
.pcx 00;35
|
||||
.mov 00;35
|
||||
.mpg 00;35
|
||||
.mpeg 00;35
|
||||
.m2v 00;35
|
||||
.mkv 00;35
|
||||
.webm 00;35
|
||||
.ogm 00;35
|
||||
.mp4 00;35
|
||||
.m4v 00;35
|
||||
.mp4v 00;35
|
||||
.vob 00;35
|
||||
.qt 00;35
|
||||
.nuv 00;35
|
||||
.wmv 00;35
|
||||
.asf 00;35
|
||||
.rm 00;35
|
||||
.rmvb 00;35
|
||||
.flc 00;35
|
||||
.avi 00;35
|
||||
.fli 00;35
|
||||
.flv 00;35
|
||||
.gl 00;35
|
||||
.dl 00;35
|
||||
.xcf 00;35
|
||||
.xwd 00;35
|
||||
.yuv 00;35
|
||||
.cgm 00;35
|
||||
.emf 00;35
|
||||
|
||||
# http://wiki.xiph.org/index.php/MIME_Types_and_File_Extensions
|
||||
.ogv 00;35
|
||||
.ogx 00;35
|
||||
|
||||
# audio formats (cyan)
|
||||
.aac 00;36
|
||||
.au 00;36
|
||||
.flac 00;36
|
||||
.m4a 00;36
|
||||
.mid 00;36
|
||||
.midi 00;36
|
||||
.mka 00;36
|
||||
.mp3 00;36
|
||||
.mpc 00;36
|
||||
.ogg 00;36
|
||||
.ra 00;36
|
||||
.wav 00;36
|
||||
|
||||
# http://wiki.xiph.org/index.php/MIME_Types_and_File_Extensions
|
||||
.oga 00;36
|
||||
.opus 00;36
|
||||
.spx 00;36
|
||||
.xspf 00;36
|
||||
|
||||
# colorize binary documents (brown)
|
||||
#.pdf 00;33
|
||||
#.ps 00;33
|
||||
#.ps.gz 00;33
|
||||
#.tex 00;33
|
||||
#.xls 00;33
|
||||
#.xlsx 00;33
|
||||
#.ppt 00;33
|
||||
#.pptx 00;33
|
||||
#.rtf 00;33
|
||||
#.doc 00;33
|
||||
#.docx 00;33
|
||||
#.odt 00;33
|
||||
#.ods 00;33
|
||||
#.odp 00;33
|
||||
#.epub 00;33
|
||||
#.abw 00;33
|
||||
#.wpd 00;33
|
||||
#
|
||||
# colorize text documents (brown)
|
||||
#.txt 00;33
|
||||
#.patch 00;33
|
||||
#.diff 00;33
|
||||
#.log 00;33
|
||||
#.htm 00;33
|
||||
#.html 00;33
|
||||
#.shtml 00;33
|
||||
#.xml 00;33
|
|
@ -15,6 +15,11 @@ alias l. 'ls -d .*'
|
|||
set COLORS=/etc/DIR_COLORS
|
||||
|
||||
if ($?TERM) then
|
||||
if ( -e "/etc/DIR_COLORS.256color" ) then
|
||||
if ( "`/usr/bin/tput colors`" == "256" ) then
|
||||
set COLORS=/etc/DIR_COLORS.256color
|
||||
endif
|
||||
endif
|
||||
if ( -e "/etc/DIR_COLORS.$TERM" ) then
|
||||
set COLORS="/etc/DIR_COLORS.$TERM"
|
||||
endif
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
# color-ls initialization
|
||||
|
||||
# Skip all for noninteractive shells.
|
||||
[ ! -t 0 ] && return
|
||||
[ -z "$PS1" ] && return
|
||||
|
||||
#when USER_LS_COLORS defined do not override user LS_COLORS, but use them.
|
||||
if [ -z "$USER_LS_COLORS" ]; then
|
||||
|
@ -22,6 +22,10 @@ if [ -z "$USER_LS_COLORS" ]; then
|
|||
[ -z "$COLORS" ] && [ -e "/etc/DIR_COLORS.$TERM" ] && \
|
||||
COLORS="/etc/DIR_COLORS.$TERM"
|
||||
|
||||
[ -z "$COLORS" ] && [ -e "/etc/DIR_COLORS.256color" ] && \
|
||||
[ "x`/usr/bin/tty -s && /usr/bin/tput colors 2>/dev/null`" = "x256" ] && \
|
||||
COLORS="/etc/DIR_COLORS.256color"
|
||||
|
||||
[ -z "$COLORS" ] && [ -e "/etc/DIR_COLORS" ] && \
|
||||
COLORS="/etc/DIR_COLORS"
|
||||
|
||||
|
|
|
@ -1,20 +1,7 @@
|
|||
From 6e36198f10a2f63b89c89ebb5d5c185b20fb3a63 Mon Sep 17 00:00:00 2001
|
||||
From: Kamil Dudka <kdudka@redhat.com>
|
||||
Date: Mon, 29 Mar 2010 17:20:34 +0000
|
||||
Subject: [PATCH] coreutils-df-direct.patch
|
||||
|
||||
---
|
||||
doc/coreutils.texi | 7 ++++++
|
||||
src/df.c | 34 ++++++++++++++++++++++++++--
|
||||
tests/df/direct.sh | 55 ++++++++++++++++++++++++++++++++++++++++++++++
|
||||
3 files changed, 94 insertions(+), 2 deletions(-)
|
||||
create mode 100755 tests/df/direct.sh
|
||||
|
||||
diff --git a/doc/coreutils.texi b/doc/coreutils.texi
|
||||
index 5b9a597..6810c15 100644
|
||||
--- a/doc/coreutils.texi
|
||||
+++ b/doc/coreutils.texi
|
||||
@@ -12074,6 +12074,13 @@ some systems (notably Solaris), doing this yields more up to date results,
|
||||
diff -urNp coreutils-8.21-orig/doc/coreutils.texi coreutils-8.21/doc/coreutils.texi
|
||||
--- coreutils-8.21-orig/doc/coreutils.texi 2013-02-11 10:37:28.000000000 +0100
|
||||
+++ coreutils-8.21/doc/coreutils.texi 2013-02-15 10:15:26.497593689 +0100
|
||||
@@ -11221,6 +11221,13 @@ some systems (notably SunOS), doing this yields more up to date results,
|
||||
but in general this option makes @command{df} much slower, especially when
|
||||
there are many or very busy file systems.
|
||||
|
||||
|
@ -27,12 +14,11 @@ index 5b9a597..6810c15 100644
|
|||
+
|
||||
@item --total
|
||||
@opindex --total
|
||||
@cindex grand total of file system size, usage and available space
|
||||
diff --git a/src/df.c b/src/df.c
|
||||
index 48025b9..c8efa5b 100644
|
||||
--- a/src/df.c
|
||||
+++ b/src/df.c
|
||||
@@ -125,6 +125,9 @@ static bool print_type;
|
||||
@cindex grand total of disk size, usage and available space
|
||||
diff -urNp coreutils-8.21-orig/src/df.c coreutils-8.21/src/df.c
|
||||
--- coreutils-8.21-orig/src/df.c 2013-02-05 00:40:31.000000000 +0100
|
||||
+++ coreutils-8.21/src/df.c 2013-02-15 10:26:41.158651782 +0100
|
||||
@@ -116,6 +116,9 @@ static bool print_type;
|
||||
/* If true, print a grand total at the end. */
|
||||
static bool print_grand_total;
|
||||
|
||||
|
@ -42,7 +28,7 @@ index 48025b9..c8efa5b 100644
|
|||
/* Grand total data. */
|
||||
static struct fs_usage grand_fsu;
|
||||
|
||||
@@ -252,13 +255,15 @@ enum
|
||||
@@ -243,13 +246,15 @@ enum
|
||||
NO_SYNC_OPTION = CHAR_MAX + 1,
|
||||
SYNC_OPTION,
|
||||
TOTAL_OPTION,
|
||||
|
@ -59,7 +45,7 @@ index 48025b9..c8efa5b 100644
|
|||
{"inodes", no_argument, NULL, 'i'},
|
||||
{"human-readable", no_argument, NULL, 'h'},
|
||||
{"si", no_argument, NULL, 'H'},
|
||||
@@ -583,7 +588,10 @@ get_header (void)
|
||||
@@ -505,7 +510,10 @@ get_header (void)
|
||||
for (col = 0; col < ncolumns; col++)
|
||||
{
|
||||
char *cell = NULL;
|
||||
|
@ -71,7 +57,7 @@ index 48025b9..c8efa5b 100644
|
|||
|
||||
if (columns[col]->field == SIZE_FIELD
|
||||
&& (header_mode == DEFAULT_MODE
|
||||
@@ -1486,6 +1494,17 @@ get_point (char const *point, const struct stat *statp)
|
||||
@@ -1352,6 +1360,19 @@ get_point (const char *point, const struct stat *statp)
|
||||
static void
|
||||
get_entry (char const *name, struct stat const *statp)
|
||||
{
|
||||
|
@ -80,16 +66,18 @@ index 48025b9..c8efa5b 100644
|
|||
+ char *resolved = canonicalize_file_name (name);
|
||||
+ if (resolved)
|
||||
+ {
|
||||
+ get_dev (NULL, resolved, name, NULL, NULL, false, false, NULL, false);
|
||||
+ char *mp = find_mount_point (name, statp);
|
||||
+ get_dev (NULL, mp, resolved, NULL, NULL, false, false, NULL, false);
|
||||
+ free(mp);
|
||||
+ free (resolved);
|
||||
+ return;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
if ((S_ISBLK (statp->st_mode) || S_ISCHR (statp->st_mode))
|
||||
&& get_device (name))
|
||||
&& get_disk (name))
|
||||
return;
|
||||
@@ -1556,6 +1575,7 @@ or all file systems by default.\n\
|
||||
@@ -1422,6 +1443,7 @@ or all file systems by default.\n\
|
||||
-B, --block-size=SIZE scale sizes by SIZE before printing them; e.g.,\n\
|
||||
'-BM' prints sizes in units of 1,048,576 bytes;\n\
|
||||
see SIZE format below\n\
|
||||
|
@ -97,7 +85,7 @@ index 48025b9..c8efa5b 100644
|
|||
-h, --human-readable print sizes in powers of 1024 (e.g., 1023M)\n\
|
||||
-H, --si print sizes in powers of 1000 (e.g., 1.1G)\n\
|
||||
"), stdout);
|
||||
@@ -1646,6 +1666,9 @@ main (int argc, char **argv)
|
||||
@@ -1512,6 +1534,9 @@ main (int argc, char **argv)
|
||||
xstrtol_fatal (e, oi, c, long_options, optarg);
|
||||
}
|
||||
break;
|
||||
|
@ -107,7 +95,7 @@ index 48025b9..c8efa5b 100644
|
|||
case 'i':
|
||||
if (header_mode == OUTPUT_MODE)
|
||||
{
|
||||
@@ -1742,6 +1765,13 @@ main (int argc, char **argv)
|
||||
@@ -1608,6 +1633,13 @@ main (int argc, char **argv)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -121,11 +109,9 @@ index 48025b9..c8efa5b 100644
|
|||
if (human_output_opts == -1)
|
||||
{
|
||||
if (posix_format)
|
||||
diff --git a/tests/df/direct.sh b/tests/df/direct.sh
|
||||
new file mode 100755
|
||||
index 0000000..8e4cfb8
|
||||
--- /dev/null
|
||||
+++ b/tests/df/direct.sh
|
||||
diff -urNp coreutils-8.21-orig/tests/df/direct.sh coreutils-8.21/tests/df/direct.sh
|
||||
--- coreutils-8.21-orig/tests/df/direct.sh 1970-01-01 01:00:00.000000000 +0100
|
||||
+++ coreutils-8.21/tests/df/direct.sh 2013-02-15 10:15:26.503644446 +0100
|
||||
@@ -0,0 +1,55 @@
|
||||
+#!/bin/sh
|
||||
+# Ensure "df --direct" works as documented
|
||||
|
@ -182,6 +168,3 @@ index 0000000..8e4cfb8
|
|||
+compare file_out file_exp || fail=1
|
||||
+
|
||||
+Exit $fail
|
||||
--
|
||||
2.31.1
|
||||
|
||||
|
|
|
@ -0,0 +1,25 @@
|
|||
#!/bin/sh -
|
||||
# Reduce requires for coreutils-single
|
||||
# Needed since it has overlapping "binaries" with the main package
|
||||
# Ideally we could do the following in the spec only for the single subpackage
|
||||
# %define __requires_exclude_from ^(%{_bindir}|%{_sbindir})/([^c]|c[^o]|co[^r]|cor[^e])
|
||||
|
||||
original_find_requires="$1"
|
||||
shift
|
||||
|
||||
# Get the list of files.
|
||||
files=`sed "s/['\"]/\\\&/g"`
|
||||
|
||||
single_bin='/usr/bin/coreutils'
|
||||
|
||||
single=`echo $files | grep "$single_bin"`
|
||||
|
||||
echo $files | tr [:blank:] '\n' |
|
||||
if [ "$single" ]; then
|
||||
# Only allow the coreutils multicall binary
|
||||
# Also adjust for .single renaming
|
||||
sed -n 's|\(.*'"$single_bin"'\)\(.single\)\?$|\1.single|p'
|
||||
else
|
||||
cat
|
||||
fi |
|
||||
$original_find_requires
|
|
@ -21,15 +21,7 @@ diff --git a/lib/mgetgroups.c b/lib/mgetgroups.c
|
|||
index 76474c2..0a9d221 100644
|
||||
--- a/lib/mgetgroups.c
|
||||
+++ b/lib/mgetgroups.c
|
||||
@@ -31,6 +31,7 @@
|
||||
#endif
|
||||
|
||||
#include "getugroups.h"
|
||||
+#include "xalloc.h"
|
||||
#include "xalloc-oversized.h"
|
||||
|
||||
/* Work around an incompatibility of OS X 10.11: getgrouplist
|
||||
@@ -119,9 +120,17 @@ mgetgroups (char const *username, gid_t gid, gid_t **groups)
|
||||
@@ -121,9 +121,17 @@ mgetgroups (char const *username, gid_t gid, gid_t **groups)
|
||||
/* else no username, so fall through and use getgroups. */
|
||||
#endif
|
||||
|
||||
|
@ -38,7 +30,7 @@ index 76474c2..0a9d221 100644
|
|||
- : getgroups (0, NULL));
|
||||
+ if (!username)
|
||||
+ max_n_groups = getgroups(0, NULL);
|
||||
+ else
|
||||
+ else
|
||||
+ {
|
||||
+#ifdef HAVE_GETGROUPLIST
|
||||
+ max_n_groups = 0;
|
||||
|
@ -50,7 +42,7 @@ index 76474c2..0a9d221 100644
|
|||
|
||||
/* If we failed to count groups because there is no supplemental
|
||||
group support, then return an array containing just GID.
|
||||
@@ -143,10 +152,25 @@ mgetgroups (char const *username, gid_t gid, gid_t **groups)
|
||||
@@ -145,10 +153,25 @@ mgetgroups (char const *username, gid_t gid, gid_t **groups)
|
||||
if (g == NULL)
|
||||
return -1;
|
||||
|
||||
|
@ -84,7 +76,7 @@ diff --git a/m4/jm-macros.m4 b/m4/jm-macros.m4
|
|||
index 62777c7..5180243 100644
|
||||
--- a/m4/jm-macros.m4
|
||||
+++ b/m4/jm-macros.m4
|
||||
@@ -68,6 +68,7 @@ AC_DEFUN([coreutils_MACROS],
|
||||
@@ -82,6 +82,7 @@ AC_DEFUN([coreutils_MACROS],
|
||||
fchown
|
||||
fchmod
|
||||
ftruncate
|
||||
|
|
|
@ -0,0 +1,564 @@
|
|||
diff -urNp coreutils-8.25-orig/src/cut.c coreutils-8.25/src/cut.c
|
||||
--- coreutils-8.25-orig/src/cut.c 2015-06-26 19:05:22.000000000 +0200
|
||||
+++ coreutils-8.25/src/cut.c 2015-07-05 09:04:33.028546950 +0200
|
||||
@@ -28,6 +28,11 @@
|
||||
#include <assert.h>
|
||||
#include <getopt.h>
|
||||
#include <sys/types.h>
|
||||
+
|
||||
+/* Get mbstate_t, mbrtowc(). */
|
||||
+#if HAVE_WCHAR_H
|
||||
+# include <wchar.h>
|
||||
+#endif
|
||||
#include "system.h"
|
||||
|
||||
#include "error.h"
|
||||
@@ -38,6 +43,18 @@
|
||||
|
||||
#include "set-fields.h"
|
||||
|
||||
+/* MB_LEN_MAX is incorrectly defined to be 1 in at least one GCC
|
||||
+ installation; work around this configuration error. */
|
||||
+#if !defined MB_LEN_MAX || MB_LEN_MAX < 2
|
||||
+# undef MB_LEN_MAX
|
||||
+# define MB_LEN_MAX 16
|
||||
+#endif
|
||||
+
|
||||
+/* Some systems, like BeOS, have multibyte encodings but lack mbstate_t. */
|
||||
+#if HAVE_MBRTOWC && defined mbstate_t
|
||||
+# define mbrtowc(pwc, s, n, ps) (mbrtowc) (pwc, s, n, 0)
|
||||
+#endif
|
||||
+
|
||||
/* The official name of this program (e.g., no 'g' prefix). */
|
||||
#define PROGRAM_NAME "cut"
|
||||
|
||||
@@ -54,6 +71,52 @@
|
||||
} \
|
||||
while (0)
|
||||
|
||||
+/* Refill the buffer BUF to get a multibyte character. */
|
||||
+#define REFILL_BUFFER(BUF, BUFPOS, BUFLEN, STREAM) \
|
||||
+ do \
|
||||
+ { \
|
||||
+ if (BUFLEN < MB_LEN_MAX && !feof (STREAM) && !ferror (STREAM)) \
|
||||
+ { \
|
||||
+ memmove (BUF, BUFPOS, BUFLEN); \
|
||||
+ BUFLEN += fread (BUF + BUFLEN, sizeof(char), BUFSIZ, STREAM); \
|
||||
+ BUFPOS = BUF; \
|
||||
+ } \
|
||||
+ } \
|
||||
+ while (0)
|
||||
+
|
||||
+/* Get wide character on BUFPOS. BUFPOS is not included after that.
|
||||
+ If byte sequence is not valid as a character, CONVFAIL is true. Otherwise false. */
|
||||
+#define GET_NEXT_WC_FROM_BUFFER(WC, BUFPOS, BUFLEN, MBLENGTH, STATE, CONVFAIL) \
|
||||
+ do \
|
||||
+ { \
|
||||
+ mbstate_t state_bak; \
|
||||
+ \
|
||||
+ if (BUFLEN < 1) \
|
||||
+ { \
|
||||
+ WC = WEOF; \
|
||||
+ break; \
|
||||
+ } \
|
||||
+ \
|
||||
+ /* Get a wide character. */ \
|
||||
+ CONVFAIL = false; \
|
||||
+ state_bak = STATE; \
|
||||
+ MBLENGTH = mbrtowc ((wchar_t *)&WC, BUFPOS, BUFLEN, &STATE); \
|
||||
+ \
|
||||
+ switch (MBLENGTH) \
|
||||
+ { \
|
||||
+ case (size_t)-1: \
|
||||
+ case (size_t)-2: \
|
||||
+ CONVFAIL = true; \
|
||||
+ STATE = state_bak; \
|
||||
+ /* Fall througn. */ \
|
||||
+ \
|
||||
+ case 0: \
|
||||
+ MBLENGTH = 1; \
|
||||
+ break; \
|
||||
+ } \
|
||||
+ } \
|
||||
+ while (0)
|
||||
+
|
||||
|
||||
/* Pointer inside RP. When checking if a byte or field is selected
|
||||
by a finite range, we check if it is between CURRENT_RP.LO
|
||||
@@ -61,6 +124,9 @@
|
||||
CURRENT_RP.HI then we make CURRENT_RP to point to the next range pair. */
|
||||
static struct field_range_pair *current_rp;
|
||||
|
||||
+/* Length of the delimiter given as argument to -d. */
|
||||
+size_t delimlen;
|
||||
+
|
||||
/* This buffer is used to support the semantics of the -s option
|
||||
(or lack of same) when the specified field list includes (does
|
||||
not include) the first field. In both of those cases, the entire
|
||||
@@ -77,15 +143,25 @@ enum operating_mode
|
||||
{
|
||||
undefined_mode,
|
||||
|
||||
- /* Output characters that are in the given bytes. */
|
||||
+ /* Output bytes that are at the given positions. */
|
||||
byte_mode,
|
||||
|
||||
+ /* Output characters that are at the given positions. */
|
||||
+ character_mode,
|
||||
+
|
||||
/* Output the given delimiter-separated fields. */
|
||||
field_mode
|
||||
};
|
||||
|
||||
static enum operating_mode operating_mode;
|
||||
|
||||
+/* If nonzero, when in byte mode, don't split multibyte characters. */
|
||||
+static int byte_mode_character_aware;
|
||||
+
|
||||
+/* If nonzero, the function for single byte locale is work
|
||||
+ if this program runs on multibyte locale. */
|
||||
+static int force_singlebyte_mode;
|
||||
+
|
||||
/* If true do not output lines containing no delimiter characters.
|
||||
Otherwise, all such lines are printed. This option is valid only
|
||||
with field mode. */
|
||||
@@ -97,6 +173,9 @@ static bool complement;
|
||||
|
||||
/* The delimiter character for field mode. */
|
||||
static unsigned char delim;
|
||||
+#if HAVE_WCHAR_H
|
||||
+static wchar_t wcdelim;
|
||||
+#endif
|
||||
|
||||
/* The delimiter for each line/record. */
|
||||
static unsigned char line_delim = '\n';
|
||||
@@ -164,7 +243,7 @@ Print selected parts of lines from each FILE to standard output.\n\
|
||||
-f, --fields=LIST select only these fields; also print any line\n\
|
||||
that contains no delimiter character, unless\n\
|
||||
the -s option is specified\n\
|
||||
- -n (ignored)\n\
|
||||
+ -n with -b: don't split multibyte characters\n\
|
||||
"), stdout);
|
||||
fputs (_("\
|
||||
--complement complement the set of selected bytes, characters\n\
|
||||
@@ -280,6 +359,82 @@ cut_bytes (FILE *stream)
|
||||
}
|
||||
}
|
||||
|
||||
+#if HAVE_MBRTOWC
|
||||
+/* This function is in use for the following case.
|
||||
+
|
||||
+ 1. Read from the stream STREAM, printing to standard output any selected
|
||||
+ characters.
|
||||
+
|
||||
+ 2. Read from stream STREAM, printing to standard output any selected bytes,
|
||||
+ without splitting multibyte characters. */
|
||||
+
|
||||
+static void
|
||||
+cut_characters_or_cut_bytes_no_split (FILE *stream)
|
||||
+{
|
||||
+ size_t idx; /* number of bytes or characters in the line so far. */
|
||||
+ char buf[MB_LEN_MAX + BUFSIZ]; /* For spooling a read byte sequence. */
|
||||
+ char *bufpos; /* Next read position of BUF. */
|
||||
+ size_t buflen; /* The length of the byte sequence in buf. */
|
||||
+ wint_t wc; /* A gotten wide character. */
|
||||
+ size_t mblength; /* The byte size of a multibyte character which shows
|
||||
+ as same character as WC. */
|
||||
+ mbstate_t state; /* State of the stream. */
|
||||
+ bool convfail = false; /* true, when conversion failed. Otherwise false. */
|
||||
+ /* Whether to begin printing delimiters between ranges for the current line.
|
||||
+ Set after we've begun printing data corresponding to the first range. */
|
||||
+ bool print_delimiter = false;
|
||||
+
|
||||
+ idx = 0;
|
||||
+ buflen = 0;
|
||||
+ bufpos = buf;
|
||||
+ memset (&state, '\0', sizeof(mbstate_t));
|
||||
+
|
||||
+ current_rp = frp;
|
||||
+
|
||||
+ while (1)
|
||||
+ {
|
||||
+ REFILL_BUFFER (buf, bufpos, buflen, stream);
|
||||
+
|
||||
+ GET_NEXT_WC_FROM_BUFFER (wc, bufpos, buflen, mblength, state, convfail);
|
||||
+ (void) convfail; /* ignore unused */
|
||||
+
|
||||
+ if (wc == WEOF)
|
||||
+ {
|
||||
+ if (idx > 0)
|
||||
+ putchar (line_delim);
|
||||
+ break;
|
||||
+ }
|
||||
+ else if (wc == line_delim)
|
||||
+ {
|
||||
+ putchar (line_delim);
|
||||
+ idx = 0;
|
||||
+ print_delimiter = false;
|
||||
+ current_rp = frp;
|
||||
+ }
|
||||
+ else
|
||||
+ {
|
||||
+ next_item (&idx);
|
||||
+ if (print_kth (idx))
|
||||
+ {
|
||||
+ if (output_delimiter_specified)
|
||||
+ {
|
||||
+ if (print_delimiter && is_range_start_index (idx))
|
||||
+ {
|
||||
+ fwrite (output_delimiter_string, sizeof (char),
|
||||
+ output_delimiter_length, stdout);
|
||||
+ }
|
||||
+ print_delimiter = true;
|
||||
+ }
|
||||
+ fwrite (bufpos, mblength, sizeof(char), stdout);
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ buflen -= mblength;
|
||||
+ bufpos += mblength;
|
||||
+ }
|
||||
+}
|
||||
+#endif
|
||||
+
|
||||
/* Read from stream STREAM, printing to standard output any selected fields. */
|
||||
|
||||
static void
|
||||
@@ -425,13 +580,211 @@ cut_fields (FILE *stream)
|
||||
}
|
||||
}
|
||||
|
||||
+#if HAVE_MBRTOWC
|
||||
+static void
|
||||
+cut_fields_mb (FILE *stream)
|
||||
+{
|
||||
+ int c;
|
||||
+ size_t field_idx;
|
||||
+ int found_any_selected_field;
|
||||
+ int buffer_first_field;
|
||||
+ int empty_input;
|
||||
+ char buf[MB_LEN_MAX + BUFSIZ]; /* For spooling a read byte sequence. */
|
||||
+ char *bufpos; /* Next read position of BUF. */
|
||||
+ size_t buflen; /* The length of the byte sequence in buf. */
|
||||
+ wint_t wc = 0; /* A gotten wide character. */
|
||||
+ size_t mblength; /* The byte size of a multibyte character which shows
|
||||
+ as same character as WC. */
|
||||
+ mbstate_t state; /* State of the stream. */
|
||||
+ bool convfail = false; /* true, when conversion failed. Otherwise false. */
|
||||
+
|
||||
+ current_rp = frp;
|
||||
+
|
||||
+ found_any_selected_field = 0;
|
||||
+ field_idx = 1;
|
||||
+ bufpos = buf;
|
||||
+ buflen = 0;
|
||||
+ memset (&state, '\0', sizeof(mbstate_t));
|
||||
+
|
||||
+ c = getc (stream);
|
||||
+ empty_input = (c == EOF);
|
||||
+ if (c != EOF)
|
||||
+ {
|
||||
+ ungetc (c, stream);
|
||||
+ wc = 0;
|
||||
+ }
|
||||
+ else
|
||||
+ wc = WEOF;
|
||||
+
|
||||
+ /* To support the semantics of the -s flag, we may have to buffer
|
||||
+ all of the first field to determine whether it is `delimited.'
|
||||
+ But that is unnecessary if all non-delimited lines must be printed
|
||||
+ and the first field has been selected, or if non-delimited lines
|
||||
+ must be suppressed and the first field has *not* been selected.
|
||||
+ That is because a non-delimited line has exactly one field. */
|
||||
+ buffer_first_field = (suppress_non_delimited ^ !print_kth (1));
|
||||
+
|
||||
+ while (1)
|
||||
+ {
|
||||
+ if (field_idx == 1 && buffer_first_field)
|
||||
+ {
|
||||
+ int len = 0;
|
||||
+
|
||||
+ while (1)
|
||||
+ {
|
||||
+ REFILL_BUFFER (buf, bufpos, buflen, stream);
|
||||
+
|
||||
+ GET_NEXT_WC_FROM_BUFFER
|
||||
+ (wc, bufpos, buflen, mblength, state, convfail);
|
||||
+
|
||||
+ if (wc == WEOF)
|
||||
+ break;
|
||||
+
|
||||
+ field_1_buffer = xrealloc (field_1_buffer, len + mblength);
|
||||
+ memcpy (field_1_buffer + len, bufpos, mblength);
|
||||
+ len += mblength;
|
||||
+ buflen -= mblength;
|
||||
+ bufpos += mblength;
|
||||
+
|
||||
+ if (!convfail && (wc == line_delim || wc == wcdelim))
|
||||
+ break;
|
||||
+ }
|
||||
+
|
||||
+ if (len <= 0 && wc == WEOF)
|
||||
+ break;
|
||||
+
|
||||
+ /* If the first field extends to the end of line (it is not
|
||||
+ delimited) and we are printing all non-delimited lines,
|
||||
+ print this one. */
|
||||
+ if (convfail || (!convfail && wc != wcdelim))
|
||||
+ {
|
||||
+ if (suppress_non_delimited)
|
||||
+ {
|
||||
+ /* Empty. */
|
||||
+ }
|
||||
+ else
|
||||
+ {
|
||||
+ fwrite (field_1_buffer, sizeof (char), len, stdout);
|
||||
+ /* Make sure the output line is newline terminated. */
|
||||
+ if (convfail || (!convfail && wc != line_delim))
|
||||
+ putchar (line_delim);
|
||||
+ }
|
||||
+ continue;
|
||||
+ }
|
||||
+
|
||||
+ if (print_kth (1))
|
||||
+ {
|
||||
+ /* Print the field, but not the trailing delimiter. */
|
||||
+ fwrite (field_1_buffer, sizeof (char), len - 1, stdout);
|
||||
+ found_any_selected_field = 1;
|
||||
+ }
|
||||
+ next_item (&field_idx);
|
||||
+ }
|
||||
+
|
||||
+ if (wc != WEOF)
|
||||
+ {
|
||||
+ if (print_kth (field_idx))
|
||||
+ {
|
||||
+ if (found_any_selected_field)
|
||||
+ {
|
||||
+ fwrite (output_delimiter_string, sizeof (char),
|
||||
+ output_delimiter_length, stdout);
|
||||
+ }
|
||||
+ found_any_selected_field = 1;
|
||||
+ }
|
||||
+
|
||||
+ while (1)
|
||||
+ {
|
||||
+ REFILL_BUFFER (buf, bufpos, buflen, stream);
|
||||
+
|
||||
+ GET_NEXT_WC_FROM_BUFFER
|
||||
+ (wc, bufpos, buflen, mblength, state, convfail);
|
||||
+
|
||||
+ if (wc == WEOF)
|
||||
+ break;
|
||||
+ else if (!convfail && (wc == wcdelim || wc == line_delim))
|
||||
+ {
|
||||
+ buflen -= mblength;
|
||||
+ bufpos += mblength;
|
||||
+ break;
|
||||
+ }
|
||||
+
|
||||
+ if (print_kth (field_idx))
|
||||
+ fwrite (bufpos, mblength, sizeof(char), stdout);
|
||||
+
|
||||
+ buflen -= mblength;
|
||||
+ bufpos += mblength;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ if ((!convfail || wc == line_delim) && buflen < 1)
|
||||
+ wc = WEOF;
|
||||
+
|
||||
+ if (!convfail && wc == wcdelim)
|
||||
+ next_item (&field_idx);
|
||||
+ else if (wc == WEOF || (!convfail && wc == line_delim))
|
||||
+ {
|
||||
+ if (found_any_selected_field
|
||||
+ || (!empty_input && !(suppress_non_delimited && field_idx == 1)))
|
||||
+ putchar (line_delim);
|
||||
+ if (wc == WEOF)
|
||||
+ break;
|
||||
+ field_idx = 1;
|
||||
+ current_rp = frp;
|
||||
+ found_any_selected_field = 0;
|
||||
+ }
|
||||
+ }
|
||||
+}
|
||||
+#endif
|
||||
+
|
||||
static void
|
||||
cut_stream (FILE *stream)
|
||||
{
|
||||
- if (operating_mode == byte_mode)
|
||||
- cut_bytes (stream);
|
||||
+#if HAVE_MBRTOWC
|
||||
+ if (MB_CUR_MAX > 1 && !force_singlebyte_mode)
|
||||
+ {
|
||||
+ switch (operating_mode)
|
||||
+ {
|
||||
+ case byte_mode:
|
||||
+ if (byte_mode_character_aware)
|
||||
+ cut_characters_or_cut_bytes_no_split (stream);
|
||||
+ else
|
||||
+ cut_bytes (stream);
|
||||
+ break;
|
||||
+
|
||||
+ case character_mode:
|
||||
+ cut_characters_or_cut_bytes_no_split (stream);
|
||||
+ break;
|
||||
+
|
||||
+ case field_mode:
|
||||
+ if (delimlen == 1)
|
||||
+ {
|
||||
+ /* Check if we have utf8 multibyte locale, so we can use this
|
||||
+ optimization because of uniqueness of characters, which is
|
||||
+ not true for e.g. SJIS */
|
||||
+ char * loc = setlocale(LC_CTYPE, NULL);
|
||||
+ if (loc && (strstr (loc, "UTF-8") || strstr (loc, "utf-8") ||
|
||||
+ strstr (loc, "UTF8") || strstr (loc, "utf8")))
|
||||
+ {
|
||||
+ cut_fields (stream);
|
||||
+ break;
|
||||
+ }
|
||||
+ }
|
||||
+ cut_fields_mb (stream);
|
||||
+ break;
|
||||
+
|
||||
+ default:
|
||||
+ abort ();
|
||||
+ }
|
||||
+ }
|
||||
else
|
||||
- cut_fields (stream);
|
||||
+#endif
|
||||
+ {
|
||||
+ if (operating_mode == field_mode)
|
||||
+ cut_fields (stream);
|
||||
+ else
|
||||
+ cut_bytes (stream);
|
||||
+ }
|
||||
}
|
||||
|
||||
/* Process file FILE to standard output.
|
||||
@@ -483,6 +836,7 @@ main (int argc, char **argv)
|
||||
bool ok;
|
||||
bool delim_specified = false;
|
||||
char *spec_list_string IF_LINT ( = NULL);
|
||||
+ char mbdelim[MB_LEN_MAX + 1];
|
||||
|
||||
initialize_main (&argc, &argv);
|
||||
set_program_name (argv[0]);
|
||||
@@ -505,7 +859,6 @@ main (int argc, char **argv)
|
||||
switch (optc)
|
||||
{
|
||||
case 'b':
|
||||
- case 'c':
|
||||
/* Build the byte list. */
|
||||
if (operating_mode != undefined_mode)
|
||||
FATAL_ERROR (_("only one type of list may be specified"));
|
||||
@@ -513,6 +866,14 @@ main (int argc, char **argv)
|
||||
spec_list_string = optarg;
|
||||
break;
|
||||
|
||||
+ case 'c':
|
||||
+ /* Build the character list. */
|
||||
+ if (operating_mode != undefined_mode)
|
||||
+ FATAL_ERROR (_("only one type of list may be specified"));
|
||||
+ operating_mode = character_mode;
|
||||
+ spec_list_string = optarg;
|
||||
+ break;
|
||||
+
|
||||
case 'f':
|
||||
/* Build the field list. */
|
||||
if (operating_mode != undefined_mode)
|
||||
@@ -524,10 +885,38 @@ main (int argc, char **argv)
|
||||
case 'd':
|
||||
/* New delimiter. */
|
||||
/* Interpret -d '' to mean 'use the NUL byte as the delimiter.' */
|
||||
- if (optarg[0] != '\0' && optarg[1] != '\0')
|
||||
- FATAL_ERROR (_("the delimiter must be a single character"));
|
||||
- delim = optarg[0];
|
||||
- delim_specified = true;
|
||||
+ {
|
||||
+#if HAVE_MBRTOWC
|
||||
+ if(MB_CUR_MAX > 1)
|
||||
+ {
|
||||
+ mbstate_t state;
|
||||
+
|
||||
+ memset (&state, '\0', sizeof(mbstate_t));
|
||||
+ delimlen = mbrtowc (&wcdelim, optarg, strnlen(optarg, MB_LEN_MAX), &state);
|
||||
+
|
||||
+ if (delimlen == (size_t)-1 || delimlen == (size_t)-2)
|
||||
+ ++force_singlebyte_mode;
|
||||
+ else
|
||||
+ {
|
||||
+ delimlen = (delimlen < 1) ? 1 : delimlen;
|
||||
+ if (wcdelim != L'\0' && *(optarg + delimlen) != '\0')
|
||||
+ FATAL_ERROR (_("the delimiter must be a single character"));
|
||||
+ memcpy (mbdelim, optarg, delimlen);
|
||||
+ mbdelim[delimlen] = '\0';
|
||||
+ if (delimlen == 1)
|
||||
+ delim = *optarg;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ if (MB_CUR_MAX <= 1 || force_singlebyte_mode)
|
||||
+#endif
|
||||
+ {
|
||||
+ if (optarg[0] != '\0' && optarg[1] != '\0')
|
||||
+ FATAL_ERROR (_("the delimiter must be a single character"));
|
||||
+ delim = (unsigned char) optarg[0];
|
||||
+ }
|
||||
+ delim_specified = true;
|
||||
+ }
|
||||
break;
|
||||
|
||||
case OUTPUT_DELIMITER_OPTION:
|
||||
@@ -540,6 +929,7 @@ main (int argc, char **argv)
|
||||
break;
|
||||
|
||||
case 'n':
|
||||
+ byte_mode_character_aware = 1;
|
||||
break;
|
||||
|
||||
case 's':
|
||||
@@ -579,15 +969,34 @@ main (int argc, char **argv)
|
||||
| (complement ? SETFLD_COMPLEMENT : 0) );
|
||||
|
||||
if (!delim_specified)
|
||||
- delim = '\t';
|
||||
+ {
|
||||
+ delim = '\t';
|
||||
+#ifdef HAVE_MBRTOWC
|
||||
+ wcdelim = L'\t';
|
||||
+ mbdelim[0] = '\t';
|
||||
+ mbdelim[1] = '\0';
|
||||
+ delimlen = 1;
|
||||
+#endif
|
||||
+ }
|
||||
|
||||
if (output_delimiter_string == NULL)
|
||||
{
|
||||
- static char dummy[2];
|
||||
- dummy[0] = delim;
|
||||
- dummy[1] = '\0';
|
||||
- output_delimiter_string = dummy;
|
||||
- output_delimiter_length = 1;
|
||||
+#ifdef HAVE_MBRTOWC
|
||||
+ if (MB_CUR_MAX > 1 && !force_singlebyte_mode)
|
||||
+ {
|
||||
+ output_delimiter_string = xstrdup(mbdelim);
|
||||
+ output_delimiter_length = delimlen;
|
||||
+ }
|
||||
+
|
||||
+ if (MB_CUR_MAX <= 1 || force_singlebyte_mode)
|
||||
+#endif
|
||||
+ {
|
||||
+ static char dummy[2];
|
||||
+ dummy[0] = delim;
|
||||
+ dummy[1] = '\0';
|
||||
+ output_delimiter_string = dummy;
|
||||
+ output_delimiter_length = 1;
|
||||
+ }
|
||||
}
|
||||
|
||||
if (optind == argc)
|
|
@ -0,0 +1,585 @@
|
|||
--- coreutils-8.24/src/cut.c 2015-06-26 19:05:22.000000000 +0200
|
||||
+++ cut.c 2016-01-15 10:15:04.863804121 +0100
|
||||
@@ -28,6 +28,11 @@
|
||||
#include <assert.h>
|
||||
#include <getopt.h>
|
||||
#include <sys/types.h>
|
||||
+
|
||||
+#include <mbfile.h>
|
||||
+#include <mbiter.h>
|
||||
+#include <string.h>
|
||||
+
|
||||
#include "system.h"
|
||||
|
||||
#include "error.h"
|
||||
@@ -61,25 +66,16 @@
|
||||
CURRENT_RP.HI then we make CURRENT_RP to point to the next range pair. */
|
||||
static struct field_range_pair *current_rp;
|
||||
|
||||
-/* This buffer is used to support the semantics of the -s option
|
||||
- (or lack of same) when the specified field list includes (does
|
||||
- not include) the first field. In both of those cases, the entire
|
||||
- first field must be read into this buffer to determine whether it
|
||||
- is followed by a delimiter or a newline before any of it may be
|
||||
- output. Otherwise, cut_fields can do the job without using this
|
||||
- buffer. */
|
||||
-static char *field_1_buffer;
|
||||
-
|
||||
-/* The number of bytes allocated for FIELD_1_BUFFER. */
|
||||
-static size_t field_1_bufsize;
|
||||
-
|
||||
enum operating_mode
|
||||
{
|
||||
undefined_mode,
|
||||
|
||||
- /* Output characters that are in the given bytes. */
|
||||
+ /* Output the given bytes. */
|
||||
byte_mode,
|
||||
|
||||
+ /* Output characters that are in the given positions . */
|
||||
+ char_mode,
|
||||
+
|
||||
/* Output the given delimiter-separated fields. */
|
||||
field_mode
|
||||
};
|
||||
@@ -91,12 +87,16 @@ static enum operating_mode operating_mode;
|
||||
with field mode. */
|
||||
static bool suppress_non_delimited;
|
||||
|
||||
+/* Unless true, we do not recognize multibyte characters in byte-splitting
|
||||
+ mode. */
|
||||
+static bool no_break_mb_chars;
|
||||
+
|
||||
/* If true, print all bytes, characters, or fields _except_
|
||||
those that were specified. */
|
||||
static bool complement;
|
||||
|
||||
/* The delimiter character for field mode. */
|
||||
-static unsigned char delim;
|
||||
+static mbf_char_t delim;
|
||||
|
||||
/* The delimiter for each line/record. */
|
||||
static unsigned char line_delim = '\n';
|
||||
@@ -109,7 +109,7 @@ static size_t output_delimiter_length;
|
||||
|
||||
/* The output field separator string. Defaults to the 1-character
|
||||
string consisting of the input delimiter. */
|
||||
-static char *output_delimiter_string;
|
||||
+static char const *output_delimiter_string;
|
||||
|
||||
/* True if we have ever read standard input. */
|
||||
static bool have_read_stdin;
|
||||
@@ -164,7 +164,7 @@ Print selected parts of lines from each FILE to standard output.\n\
|
||||
-f, --fields=LIST select only these fields; also print any line\n\
|
||||
that contains no delimiter character, unless\n\
|
||||
the -s option is specified\n\
|
||||
- -n (ignored)\n\
|
||||
+ -n with -b, don't split multibyte characters\n\
|
||||
"), stdout);
|
||||
fputs (_("\
|
||||
--complement complement the set of selected bytes, characters\n\
|
||||
@@ -211,6 +211,12 @@ next_item (size_t *item_idx)
|
||||
current_rp++;
|
||||
}
|
||||
|
||||
+static inline void
|
||||
+next_item_n (size_t *item_idx, size_t n)
|
||||
+{
|
||||
+ while (n-- > 0)
|
||||
+ next_item (item_idx);
|
||||
+}
|
||||
/* Return nonzero if the K'th field or byte is printable. */
|
||||
|
||||
static inline bool
|
||||
@@ -219,6 +225,15 @@ print_kth (size_t k)
|
||||
return current_rp->lo <= k;
|
||||
}
|
||||
|
||||
+/* The lo and hi params should be used for the current characters byte position
|
||||
+ * and byte size, respectively. */
|
||||
+static inline bool
|
||||
+rp_intersect (size_t lo, size_t hi)
|
||||
+{
|
||||
+ return ((current_rp->lo <= lo && current_rp->hi >= lo)
|
||||
+ || (current_rp->lo <= hi && current_rp->hi >= hi));
|
||||
+}
|
||||
+
|
||||
/* Return nonzero if K'th byte is the beginning of a range. */
|
||||
|
||||
static inline bool
|
||||
@@ -281,23 +296,215 @@ cut_bytes (FILE *stream)
|
||||
}
|
||||
|
||||
/* Read from stream STREAM, printing to standard output any selected fields. */
|
||||
+extern ssize_t
|
||||
+mb_getndelim2 (mbf_char_t **lineptr, size_t *linesize, size_t nmax,
|
||||
+ mbf_char_t delim1, mbf_char_t delim2, mb_file_t *stream)
|
||||
+{
|
||||
+/* The maximum value that getndelim2 can return without suffering from
|
||||
+ overflow problems, either internally (because of pointer
|
||||
+ subtraction overflow) or due to the API (because of ssize_t). */
|
||||
+#define GETNDELIM2_MAXIMUM (PTRDIFF_MAX < SSIZE_MAX ? PTRDIFF_MAX : SSIZE_MAX)
|
||||
+
|
||||
+/* Try to add at least this many bytes when extending the buffer.
|
||||
+ MIN_CHUNK must be no greater than GETNDELIM2_MAXIMUM. */
|
||||
+#define MIN_CHUNK 64
|
||||
+ size_t nchars_avail; /* Allocated but unused chars in *LINEPTR. */
|
||||
+ mbf_char_t *read_pos; /* Where we're reading into *LINEPTR. */
|
||||
+ ssize_t chars_stored = -1;
|
||||
+ mbf_char_t *ptr = *lineptr;
|
||||
+ size_t size = *linesize;
|
||||
+ bool found_delimiter;
|
||||
+
|
||||
+ if (!ptr)
|
||||
+ {
|
||||
+ size = nmax < MIN_CHUNK ? nmax : MIN_CHUNK;
|
||||
+ ptr = malloc (size * sizeof (mbf_char_t));
|
||||
+ if (!ptr)
|
||||
+ return -1;
|
||||
+ }
|
||||
+
|
||||
+ if (size < 0)
|
||||
+ goto done;
|
||||
+
|
||||
+ nchars_avail = size;
|
||||
+ read_pos = ptr;
|
||||
+
|
||||
+ if (nchars_avail == 0 && nmax <= size)
|
||||
+ goto done;
|
||||
+
|
||||
+ /* Normalize delimiters, since memchr2 doesn't handle EOF. */
|
||||
+ if (mb_iseof (delim1))
|
||||
+ mb_copy (&delim1, &delim2);
|
||||
+ else if (mb_iseof (delim2))
|
||||
+ mb_copy (&delim2, &delim1);
|
||||
+
|
||||
+ flockfile (stream);
|
||||
+
|
||||
+ found_delimiter = false;
|
||||
+ do
|
||||
+ {
|
||||
+ /* Here always ptr + size == read_pos + nchars_avail.
|
||||
+ Also nchars_avail > 0 || size < nmax. */
|
||||
+
|
||||
+ mbf_char_t c IF_LINT (= 0);
|
||||
+ {
|
||||
+ mbf_getc (c, *stream);
|
||||
+ if (mb_iseof (c))
|
||||
+ {
|
||||
+ /* Return partial line, if any. */
|
||||
+ if (read_pos == ptr)
|
||||
+ goto unlock_done;
|
||||
+ else
|
||||
+ break;
|
||||
+ }
|
||||
+ if (mb_equal (c, delim1) || mb_equal (c, delim2))
|
||||
+ found_delimiter = true;
|
||||
+ }
|
||||
+
|
||||
+ /* We always want at least one byte left in the buffer, since we
|
||||
+ always (unless we get an error while reading the first byte)
|
||||
+ NUL-terminate the line buffer. */
|
||||
+
|
||||
+ if (!nchars_avail)
|
||||
+ {
|
||||
+ /* Grow size proportionally, not linearly, to avoid O(n^2)
|
||||
+ running time. */
|
||||
+ size_t newsize = size < MIN_CHUNK ? size + MIN_CHUNK : 2 * size;
|
||||
+ mbf_char_t *newptr;
|
||||
+
|
||||
+ /* Respect nmax. This handles possible integer overflow. */
|
||||
+ if (! (size < newsize && newsize <= nmax))
|
||||
+ newsize = nmax;
|
||||
+
|
||||
+ if (GETNDELIM2_MAXIMUM < newsize)
|
||||
+ {
|
||||
+ size_t newsizemax = GETNDELIM2_MAXIMUM + 1;
|
||||
+ if (size == newsizemax)
|
||||
+ goto unlock_done;
|
||||
+ newsize = newsizemax;
|
||||
+ }
|
||||
+ nchars_avail = newsize - (read_pos - ptr);
|
||||
+ newptr = realloc (ptr, newsize * sizeof (mbf_char_t));
|
||||
+ if (!newptr)
|
||||
+ goto unlock_done;
|
||||
+ ptr = newptr;
|
||||
+ size = newsize;
|
||||
+ read_pos = size - nchars_avail + ptr;
|
||||
+ }
|
||||
+
|
||||
+ /* Here, if size < nmax, nchars_avail >= buffer_len + 1.
|
||||
+ If size == nmax, nchars_avail > 0. */
|
||||
+
|
||||
+ if (1 < nchars_avail--)
|
||||
+ {
|
||||
+ mb_copy(read_pos++, &c);
|
||||
+ }
|
||||
+
|
||||
+ }
|
||||
+ while (!found_delimiter);
|
||||
+
|
||||
+ chars_stored = (read_pos - ptr);
|
||||
+
|
||||
+ unlock_done:
|
||||
+ funlockfile (stream);
|
||||
+
|
||||
+ done:
|
||||
+ *lineptr = ptr;
|
||||
+ *linesize = size;
|
||||
+ return chars_stored;
|
||||
+}
|
||||
+
|
||||
+static void
|
||||
+cut_chars (FILE *stream)
|
||||
+{
|
||||
+ size_t char_idx; /* Number of chars in the line so far. */
|
||||
+ bool print_delimiter;
|
||||
+ mbf_char_t c;
|
||||
+ mb_file_t mbf;
|
||||
+
|
||||
+ print_delimiter = false;
|
||||
+ char_idx = 0;
|
||||
+ current_rp = frp;
|
||||
+
|
||||
+ mbf_init (mbf, stream);
|
||||
+ while (true)
|
||||
+ {
|
||||
+ mbf_getc (c, mbf);
|
||||
+
|
||||
+ if (mb_iseq (c, line_delim))
|
||||
+ {
|
||||
+ putc (line_delim, stdout);
|
||||
+ char_idx = 0;
|
||||
+ print_delimiter = false;
|
||||
+ current_rp = frp;
|
||||
+ }
|
||||
+ else if (mb_iseof (c))
|
||||
+ {
|
||||
+ if (char_idx > 0)
|
||||
+ putc (line_delim, stdout);
|
||||
+ break;
|
||||
+ }
|
||||
+ else
|
||||
+ {
|
||||
+ /* Forward by one byte. */
|
||||
+ next_item (&char_idx);
|
||||
+
|
||||
+ /* Check if the current characters byte range is within
|
||||
+ * the argument list. */
|
||||
+ if (rp_intersect (char_idx, char_idx + mb_len (c) - 1))
|
||||
+ {
|
||||
+ if (output_delimiter_specified)
|
||||
+ {
|
||||
+ if (print_delimiter && is_range_start_index (char_idx))
|
||||
+ {
|
||||
+ fwrite (output_delimiter_string, sizeof (char),
|
||||
+ output_delimiter_length, stdout);
|
||||
+ }
|
||||
+ print_delimiter = true;
|
||||
+ }
|
||||
+ mb_putc (c, stdout);
|
||||
+ }
|
||||
+
|
||||
+ /* Byte mode with multibyte characters uncut (-b -n). */
|
||||
+ if (no_break_mb_chars)
|
||||
+ /* Forward by an additional byte_length (c) - 1. */
|
||||
+ next_item_n (&char_idx, mb_len (c) - 1);
|
||||
+ }
|
||||
+ }
|
||||
+}
|
||||
|
||||
static void
|
||||
cut_fields (FILE *stream)
|
||||
{
|
||||
- int c;
|
||||
+
|
||||
+ /* This buffer is used to support the semantics of the -s option
|
||||
+ (or lack of same) when the specified field list includes (does
|
||||
+ not include) the first field. In both of those cases, the entire
|
||||
+ first field must be read into this buffer to determine whether it
|
||||
+ is followed by a delimiter or a newline before any of it may be
|
||||
+ output. Otherwise, cut_fields can do the job without using this
|
||||
+ buffer. */
|
||||
+ mbf_char_t *field_1_buffer = 0;
|
||||
+ /* The number of bytes allocated for FIELD_1_BUFFER. */
|
||||
+ size_t field_1_bufsize;
|
||||
+
|
||||
+
|
||||
+ mbf_char_t c, d;
|
||||
+ mb_file_t mbf;
|
||||
size_t field_idx = 1;
|
||||
bool found_any_selected_field = false;
|
||||
bool buffer_first_field;
|
||||
|
||||
current_rp = frp;
|
||||
|
||||
- c = getc (stream);
|
||||
- if (c == EOF)
|
||||
+ mbf_init (mbf, stream);
|
||||
+ mbf_getc (c, mbf);
|
||||
+ if (mb_iseof (c))
|
||||
return;
|
||||
|
||||
- ungetc (c, stream);
|
||||
- c = 0;
|
||||
+ mbf_ungetc (c, mbf);
|
||||
+ mb_setascii (&c, 0);
|
||||
+ mb_copy (&d, &delim);
|
||||
|
||||
/* To support the semantics of the -s flag, we may have to buffer
|
||||
all of the first field to determine whether it is 'delimited.'
|
||||
@@ -312,10 +519,14 @@ cut_fields (FILE *stream)
|
||||
if (field_idx == 1 && buffer_first_field)
|
||||
{
|
||||
ssize_t len;
|
||||
- size_t n_bytes;
|
||||
+ size_t n_chars;
|
||||
+ mbf_char_t nl;
|
||||
+ mb_setascii (&nl, line_delim);
|
||||
+
|
||||
+ len = mb_getndelim2 (&field_1_buffer, &field_1_bufsize,
|
||||
+ GETNLINE_NO_LIMIT, d, nl, &mbf);
|
||||
+
|
||||
|
||||
- len = getndelim2 (&field_1_buffer, &field_1_bufsize, 0,
|
||||
- GETNLINE_NO_LIMIT, delim, line_delim, stream);
|
||||
if (len < 0)
|
||||
{
|
||||
free (field_1_buffer);
|
||||
@@ -325,15 +536,15 @@ cut_fields (FILE *stream)
|
||||
xalloc_die ();
|
||||
}
|
||||
|
||||
- n_bytes = len;
|
||||
- assert (n_bytes != 0);
|
||||
+ n_chars = len;
|
||||
+ //assert (n_chars != 0);
|
||||
|
||||
- c = 0;
|
||||
+ mb_setascii (&c, 0);
|
||||
|
||||
/* If the first field extends to the end of line (it is not
|
||||
delimited) and we are printing all non-delimited lines,
|
||||
print this one. */
|
||||
- if (to_uchar (field_1_buffer[n_bytes - 1]) != delim)
|
||||
+ if (!mb_equal (field_1_buffer[n_chars - 1], d))
|
||||
{
|
||||
if (suppress_non_delimited)
|
||||
{
|
||||
@@ -341,26 +552,30 @@ cut_fields (FILE *stream)
|
||||
}
|
||||
else
|
||||
{
|
||||
- fwrite (field_1_buffer, sizeof (char), n_bytes, stdout);
|
||||
+ for (int i = 0; i < n_chars; ++i)
|
||||
+ mb_putc (field_1_buffer[i], stdout);
|
||||
+
|
||||
/* Make sure the output line is newline terminated. */
|
||||
- if (field_1_buffer[n_bytes - 1] != line_delim)
|
||||
+ if (!mb_iseq (field_1_buffer[n_chars - 1], line_delim))
|
||||
putchar (line_delim);
|
||||
- c = line_delim;
|
||||
+ mb_setascii (&c, line_delim);
|
||||
}
|
||||
continue;
|
||||
}
|
||||
if (print_kth (1))
|
||||
{
|
||||
/* Print the field, but not the trailing delimiter. */
|
||||
- fwrite (field_1_buffer, sizeof (char), n_bytes - 1, stdout);
|
||||
+ for (int i = 0; i < n_chars - 1; ++i)
|
||||
+ mb_putc (field_1_buffer[i], stdout);
|
||||
|
||||
/* With -d$'\n' don't treat the last '\n' as a delimiter. */
|
||||
- if (delim == line_delim)
|
||||
+ if (mb_iseq (d, line_delim))
|
||||
{
|
||||
- int last_c = getc (stream);
|
||||
- if (last_c != EOF)
|
||||
+ mbf_char_t last_c;
|
||||
+ mbf_getc (last_c, mbf);
|
||||
+ if (!mb_iseof (last_c))
|
||||
{
|
||||
- ungetc (last_c, stream);
|
||||
+ mbf_ungetc (last_c, mbf);
|
||||
found_any_selected_field = true;
|
||||
}
|
||||
}
|
||||
@@ -370,7 +585,8 @@ cut_fields (FILE *stream)
|
||||
next_item (&field_idx);
|
||||
}
|
||||
|
||||
- int prev_c = c;
|
||||
+ mbf_char_t prev_c;
|
||||
+ mb_copy (&prev_c, &c);
|
||||
|
||||
if (print_kth (field_idx))
|
||||
{
|
||||
@@ -381,42 +597,46 @@ cut_fields (FILE *stream)
|
||||
}
|
||||
found_any_selected_field = true;
|
||||
|
||||
- while ((c = getc (stream)) != delim && c != line_delim && c != EOF)
|
||||
+ mbf_getc (c, mbf);
|
||||
+ while (!mb_equal (c, d) && !mb_iseq (c, line_delim) && !mb_iseof (c))
|
||||
{
|
||||
- putchar (c);
|
||||
- prev_c = c;
|
||||
+ mb_putc (c, stdout);
|
||||
+ mb_copy (&prev_c, &c);
|
||||
+ mbf_getc (c, mbf);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
- while ((c = getc (stream)) != delim && c != line_delim && c != EOF)
|
||||
+ mbf_getc (c, mbf);
|
||||
+ while (!mb_equal (c, d) && !mb_iseq (c, line_delim) && !mb_iseof (c))
|
||||
{
|
||||
- prev_c = c;
|
||||
+ mb_copy (&prev_c, &c);
|
||||
+ mbf_getc (c, mbf);
|
||||
}
|
||||
}
|
||||
|
||||
/* With -d$'\n' don't treat the last '\n' as a delimiter. */
|
||||
- if (delim == line_delim && c == delim)
|
||||
+ if (mb_iseq (d, line_delim) && mb_equal (c, d))
|
||||
{
|
||||
- int last_c = getc (stream);
|
||||
- if (last_c != EOF)
|
||||
- ungetc (last_c, stream);
|
||||
+ mbf_char_t last_c;
|
||||
+ mbf_getc (last_c, mbf);
|
||||
+ if (!mb_iseof (last_c))
|
||||
+ mbf_ungetc (last_c, mbf);
|
||||
else
|
||||
- c = last_c;
|
||||
+ mb_copy (&c, &last_c);
|
||||
}
|
||||
|
||||
- if (c == delim)
|
||||
+ if (mb_equal (c, d))
|
||||
next_item (&field_idx);
|
||||
- else if (c == line_delim || c == EOF)
|
||||
+ else if (mb_iseq (c, line_delim) || mb_iseof (c))
|
||||
{
|
||||
if (found_any_selected_field
|
||||
|| !(suppress_non_delimited && field_idx == 1))
|
||||
{
|
||||
- if (c == line_delim || prev_c != line_delim
|
||||
- || delim == line_delim)
|
||||
+ if (mb_iseq (c, line_delim) || !mb_iseq (prev_c, line_delim) || mb_iseq (d, line_delim))
|
||||
putchar (line_delim);
|
||||
}
|
||||
- if (c == EOF)
|
||||
+ if (mb_iseof (c))
|
||||
break;
|
||||
field_idx = 1;
|
||||
current_rp = frp;
|
||||
@@ -429,7 +649,14 @@ static void
|
||||
cut_stream (FILE *stream)
|
||||
{
|
||||
if (operating_mode == byte_mode)
|
||||
- cut_bytes (stream);
|
||||
+ {
|
||||
+ if (no_break_mb_chars)
|
||||
+ cut_chars (stream);
|
||||
+ else
|
||||
+ cut_bytes (stream);
|
||||
+ }
|
||||
+ else if (operating_mode == char_mode)
|
||||
+ cut_chars (stream);
|
||||
else
|
||||
cut_fields (stream);
|
||||
}
|
||||
@@ -483,6 +710,7 @@ main (int argc, char **argv)
|
||||
bool ok;
|
||||
bool delim_specified = false;
|
||||
char *spec_list_string IF_LINT ( = NULL);
|
||||
+ mbi_iterator_t iter;
|
||||
|
||||
initialize_main (&argc, &argv);
|
||||
set_program_name (argv[0]);
|
||||
@@ -496,8 +724,10 @@ main (int argc, char **argv)
|
||||
|
||||
/* By default, all non-delimited lines are printed. */
|
||||
suppress_non_delimited = false;
|
||||
+ /* Default behaviour for -b, unless -n is also specified. */
|
||||
+ no_break_mb_chars = false;
|
||||
|
||||
- delim = '\0';
|
||||
+ mb_setascii (&delim, '\0');
|
||||
have_read_stdin = false;
|
||||
|
||||
while ((optc = getopt_long (argc, argv, "b:c:d:f:nsz", longopts, NULL)) != -1)
|
||||
@@ -505,7 +735,6 @@ main (int argc, char **argv)
|
||||
switch (optc)
|
||||
{
|
||||
case 'b':
|
||||
- case 'c':
|
||||
/* Build the byte list. */
|
||||
if (operating_mode != undefined_mode)
|
||||
FATAL_ERROR (_("only one type of list may be specified"));
|
||||
@@ -513,6 +742,14 @@ main (int argc, char **argv)
|
||||
spec_list_string = optarg;
|
||||
break;
|
||||
|
||||
+ case 'c':
|
||||
+ /* Build the char list. */
|
||||
+ if (operating_mode != undefined_mode)
|
||||
+ FATAL_ERROR (_("only one type of list may be specified"));
|
||||
+ operating_mode = char_mode;
|
||||
+ spec_list_string = optarg;
|
||||
+ break;
|
||||
+
|
||||
case 'f':
|
||||
/* Build the field list. */
|
||||
if (operating_mode != undefined_mode)
|
||||
@@ -524,9 +761,17 @@ main (int argc, char **argv)
|
||||
case 'd':
|
||||
/* New delimiter. */
|
||||
/* Interpret -d '' to mean 'use the NUL byte as the delimiter.' */
|
||||
- if (optarg[0] != '\0' && optarg[1] != '\0')
|
||||
+ mbi_init (iter, optarg, strlen (optarg));
|
||||
+ if (!mbi_avail (iter))
|
||||
+ mb_setascii (&delim, '\0');
|
||||
+ else
|
||||
+ {
|
||||
+ mb_copy (&delim, &mbi_cur (iter));
|
||||
+
|
||||
+ mbi_advance (iter);
|
||||
+ if (mbi_avail (iter))
|
||||
FATAL_ERROR (_("the delimiter must be a single character"));
|
||||
- delim = optarg[0];
|
||||
+ }
|
||||
delim_specified = true;
|
||||
break;
|
||||
|
||||
@@ -540,6 +785,7 @@ main (int argc, char **argv)
|
||||
break;
|
||||
|
||||
case 'n':
|
||||
+ no_break_mb_chars = true;
|
||||
break;
|
||||
|
||||
case 's':
|
||||
@@ -579,15 +825,12 @@ main (int argc, char **argv)
|
||||
| (complement ? SETFLD_COMPLEMENT : 0) );
|
||||
|
||||
if (!delim_specified)
|
||||
- delim = '\t';
|
||||
+ mb_setascii (&delim, '\t');
|
||||
|
||||
if (output_delimiter_string == NULL)
|
||||
{
|
||||
- static char dummy[2];
|
||||
- dummy[0] = delim;
|
||||
- dummy[1] = '\0';
|
||||
- output_delimiter_string = dummy;
|
||||
- output_delimiter_length = 1;
|
||||
+ output_delimiter_string = mb_ptr (delim);
|
||||
+ output_delimiter_length = mb_len (delim);
|
||||
}
|
||||
|
||||
if (optind == argc)
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,60 @@
|
|||
From lkundrak@v3.sk Thu Jan 28 20:57:48 2016
|
||||
Return-Path: lkundrak@v3.sk
|
||||
Received: from zimbra.v3.sk (LHLO zimbra.v3.sk) (10.13.37.31) by
|
||||
zimbra.v3.sk with LMTP; Thu, 28 Jan 2016 20:57:48 +0100 (CET)
|
||||
Received: from localhost (localhost [127.0.0.1]) by zimbra.v3.sk (Postfix)
|
||||
with ESMTP id D4DD260F92 for <lkundrak@v3.sk>; Thu, 28 Jan 2016 20:57:47
|
||||
+0100 (CET)
|
||||
X-Spam-Flag: NO
|
||||
X-Spam-Score: -2.9
|
||||
X-Spam-Level:
|
||||
X-Spam-Status: No, score=-2.9 tagged_above=-10 required=3
|
||||
tests=[ALL_TRUSTED=-1, BAYES_00=-1.9] autolearn=ham autolearn_force=no
|
||||
Received: from shell.v3.sk ([127.0.0.1]) by localhost (zimbra.v3.sk
|
||||
[127.0.0.1]) (amavisd-new, port 10032) with ESMTP id HB5H5ynfOcyL; Thu, 28
|
||||
Jan 2016 20:57:45 +0100 (CET)
|
||||
Received: from localhost (localhost [127.0.0.1]) by zimbra.v3.sk (Postfix)
|
||||
with ESMTP id 3FEF160F90; Thu, 28 Jan 2016 20:57:45 +0100 (CET)
|
||||
X-Virus-Scanned: amavisd-new at zimbra.v3.sk
|
||||
Received: from shell.v3.sk ([127.0.0.1]) by localhost (zimbra.v3.sk
|
||||
[127.0.0.1]) (amavisd-new, port 10026) with ESMTP id TUF9p5l6r9SN; Thu, 28
|
||||
Jan 2016 20:57:44 +0100 (CET)
|
||||
Received: from odvarok.localdomain (s559633cb.adsl.online.nl
|
||||
[85.150.51.203]) by zimbra.v3.sk (Postfix) with ESMTPSA id 6763560F8F; Thu,
|
||||
28 Jan 2016 20:57:44 +0100 (CET)
|
||||
From: Lubomir Rintel <lkundrak@v3.sk>
|
||||
To: =?UTF-8?q?Ond=C5=99ej=20Va=C5=A1=C3=ADk?= <ovasik@redhat.com>, Ondrej
|
||||
Oprala <ooprala@redhat.com>
|
||||
Cc: Lubomir Rintel <lkundrak@v3.sk>
|
||||
Subject: [PATCH] unexpand: fix blank line handling
|
||||
Date: Thu, 28 Jan 2016 20:57:22 +0100
|
||||
Message-Id: <1454011042-30492-1-git-send-email-lkundrak@v3.sk>
|
||||
X-Mailer: git-send-email 2.5.0
|
||||
X-Evolution-Source: 1409576065.5421.4@dhcp-24-163.brq.redhat.com
|
||||
Content-Transfer-Encoding: 8bit
|
||||
Mime-Version: 1.0
|
||||
|
||||
echo '' |./src/unexpand -a
|
||||
|
||||
Really?
|
||||
---
|
||||
src/unexpand.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/unexpand.c b/src/unexpand.c
|
||||
index d6ff662..762c56b 100644
|
||||
--- a/src/unexpand.c
|
||||
+++ b/src/unexpand.c
|
||||
@@ -304,7 +304,7 @@ unexpand (void)
|
||||
next_tab_column = column;
|
||||
tab_index -= !!tab_index;
|
||||
}
|
||||
- else
|
||||
+ else if (!mb_iseq (c, '\n'))
|
||||
{
|
||||
column += mb_width (c);
|
||||
if (!column)
|
||||
--
|
||||
2.5.0
|
||||
|
||||
|
|
@ -0,0 +1,104 @@
|
|||
diff -up ./src/expand.c.orig ./src/expand.c
|
||||
--- ./src/expand.c.orig 2016-06-01 12:42:49.330373488 +0200
|
||||
+++ ./src/expand.c 2016-06-07 14:35:16.011142041 +0200
|
||||
@@ -173,15 +173,19 @@ expand (void)
|
||||
|
||||
do
|
||||
{
|
||||
- do {
|
||||
+ while (true) {
|
||||
mbf_getc (c, mbf);
|
||||
- if (mb_iseof (c))
|
||||
+ if ((mb_iseof (c)) && (fp = next_file (fp)))
|
||||
{
|
||||
- mbf_init (mbf, fp = next_file (fp));
|
||||
+ mbf_init (mbf, fp);
|
||||
continue;
|
||||
}
|
||||
+ else
|
||||
+ {
|
||||
+ break;
|
||||
+ }
|
||||
}
|
||||
- while (false);
|
||||
+
|
||||
|
||||
if (convert)
|
||||
{
|
||||
diff -up ./src/unexpand.c.orig ./src/unexpand.c
|
||||
--- ./src/unexpand.c.orig 2016-06-07 14:26:57.380746446 +0200
|
||||
+++ ./src/unexpand.c 2016-06-07 14:34:54.059256698 +0200
|
||||
@@ -220,15 +220,19 @@ unexpand (void)
|
||||
|
||||
do
|
||||
{
|
||||
- do {
|
||||
+ while (true) {
|
||||
mbf_getc (c, mbf);
|
||||
- if (mb_iseof (c))
|
||||
+ if ((mb_iseof (c)) && (fp = next_file (fp)))
|
||||
{
|
||||
- mbf_init (mbf, fp = next_file (fp));
|
||||
+ mbf_init (mbf, fp);
|
||||
continue;
|
||||
}
|
||||
+ else
|
||||
+ {
|
||||
+ break;
|
||||
+ }
|
||||
}
|
||||
- while (false);
|
||||
+
|
||||
|
||||
if (convert)
|
||||
{
|
||||
diff -up ./tests/expand/mb.sh.orig ./tests/expand/mb.sh
|
||||
--- ./tests/expand/mb.sh.orig 2016-05-11 14:13:53.095289000 +0200
|
||||
+++ ./tests/expand/mb.sh 2016-06-07 14:38:48.259033445 +0200
|
||||
@@ -44,6 +44,20 @@ EOF
|
||||
expand < in > out || fail=1
|
||||
compare exp out > /dev/null 2>&1 || fail=1
|
||||
|
||||
+#multiple files as an input
|
||||
+cat <<\EOF >> exp || framework_failure_
|
||||
+1234567812345678123456781
|
||||
+. . . .
|
||||
+a b c d
|
||||
+. . . .
|
||||
+ä ö ü ß
|
||||
+. . . .
|
||||
+ äöü . öüä. ä xx
|
||||
+EOF
|
||||
+
|
||||
+expand ./in ./in > out || fail=1
|
||||
+compare exp out > /dev/null 2>&1 || fail=1
|
||||
+
|
||||
#test characters with display widths != 1
|
||||
env printf '12345678
|
||||
e\t|ascii(1)
|
||||
diff -up ./tests/unexpand/mb.sh.orig ./tests/unexpand/mb.sh
|
||||
--- ./tests/unexpand/mb.sh.orig 2016-06-07 14:41:44.210106466 +0200
|
||||
+++ ./tests/unexpand/mb.sh 2016-06-07 14:52:28.848639772 +0200
|
||||
@@ -44,6 +44,22 @@ EOF
|
||||
unexpand -a < in > out || fail=1
|
||||
compare exp out > /dev/null 2>&1 || fail=1
|
||||
|
||||
+
|
||||
+#multiple files as an input
|
||||
+cat >> exp <<\EOF
|
||||
+1234567812345678123456781
|
||||
+. . . .
|
||||
+a b c d
|
||||
+. . . .
|
||||
+ä ö ü ß
|
||||
+. . . .
|
||||
+ äöü . öüä. ä xx
|
||||
+EOF
|
||||
+
|
||||
+
|
||||
+unexpand -a ./in ./in > out || fail=1
|
||||
+compare exp out > /dev/null 2>&1 || fail=1
|
||||
+
|
||||
#test characters with a display width larger than 1
|
||||
|
||||
env printf '12345678
|
|
@ -0,0 +1,35 @@
|
|||
From 3976ef5a20369d8b490907ab2cba2d617305a5e0 Mon Sep 17 00:00:00 2001
|
||||
From: Kamil Dudka <kdudka@redhat.com>
|
||||
Date: Mon, 30 May 2016 16:19:20 +0200
|
||||
Subject: [PATCH] sort: do not use static array 'blanks' in human_numcompare()
|
||||
|
||||
... because the array is not initialized with MB locales. Note this is
|
||||
rather a conservative fix. I plan to do more cleanup of the i18n patch
|
||||
in Fedora to prevent mistakes like this in future updates of coreutils.
|
||||
---
|
||||
src/sort.c | 8 +++-----
|
||||
1 file changed, 3 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/src/sort.c b/src/sort.c
|
||||
index 9e07ad8..e47b039 100644
|
||||
--- a/src/sort.c
|
||||
+++ b/src/sort.c
|
||||
@@ -2274,12 +2274,10 @@ find_unit_order (char const *number)
|
||||
<none/unknown> < K/k < M < G < T < P < E < Z < Y */
|
||||
|
||||
static int
|
||||
-human_numcompare (char const *a, char const *b)
|
||||
+human_numcompare (char *a, char *b)
|
||||
{
|
||||
- while (blanks[to_uchar (*a)])
|
||||
- a++;
|
||||
- while (blanks[to_uchar (*b)])
|
||||
- b++;
|
||||
+ skipblanks(&a, a + strlen(a));
|
||||
+ skipblanks(&b, b + strlen(b));
|
||||
|
||||
int diff = find_unit_order (a) - find_unit_order (b);
|
||||
return (diff ? diff : strnumcmp (a, b, decimal_point, thousands_sep));
|
||||
--
|
||||
2.5.5
|
||||
|
|
@ -0,0 +1,443 @@
|
|||
diff -up ./src/expand-core.c.orig ./src/expand-core.c
|
||||
--- ./src/expand-core.c.orig 2016-06-28 14:44:18.281619000 +0200
|
||||
+++ ./src/expand-core.c 2016-06-30 11:46:50.025109755 +0200
|
||||
@@ -18,6 +18,7 @@
|
||||
|
||||
#include <stdio.h>
|
||||
#include <sys/types.h>
|
||||
+#include <mbfile.h>
|
||||
|
||||
#include "system.h"
|
||||
#include "error.h"
|
||||
@@ -27,6 +28,119 @@
|
||||
|
||||
#include "expand-core.h"
|
||||
|
||||
+extern inline int
|
||||
+set_utf_locale (void)
|
||||
+{
|
||||
+ /*try using some predefined locale */
|
||||
+ const char* predef_locales[] = {"C.UTF8","en_US.UTF8","en_GB.UTF8"};
|
||||
+
|
||||
+ const int predef_locales_count=3;
|
||||
+ for (int i=0;i<predef_locales_count;i++)
|
||||
+ {
|
||||
+ if (setlocale(LC_ALL,predef_locales[i])!=NULL)
|
||||
+ {
|
||||
+ break;
|
||||
+ }
|
||||
+ else if (i==predef_locales_count-1)
|
||||
+ {
|
||||
+ return 1;
|
||||
+ error (EXIT_FAILURE, errno, _("cannot set UTF-8 locale"));
|
||||
+ }
|
||||
+ }
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+extern bool
|
||||
+check_utf_locale(void)
|
||||
+{
|
||||
+ char* locale = setlocale (LC_CTYPE , NULL);
|
||||
+ if (locale == NULL)
|
||||
+ {
|
||||
+ return false;
|
||||
+ }
|
||||
+ else if (strcasestr(locale, "utf8") == NULL && strcasestr(locale, "utf-8") == NULL)
|
||||
+ {
|
||||
+ return false;
|
||||
+ }
|
||||
+ return true;
|
||||
+}
|
||||
+
|
||||
+extern bool
|
||||
+check_bom(FILE* fp, mb_file_t *mbf)
|
||||
+{
|
||||
+ int c;
|
||||
+
|
||||
+
|
||||
+ c=fgetc(fp);
|
||||
+
|
||||
+ /*test BOM header of the first file */
|
||||
+ mbf->bufcount=0;
|
||||
+ if (c == 0xEF)
|
||||
+ {
|
||||
+ c=fgetc(fp);
|
||||
+ }
|
||||
+ else
|
||||
+ {
|
||||
+ if (c != EOF)
|
||||
+ {
|
||||
+ ungetc(c,fp);
|
||||
+ }
|
||||
+ return false;
|
||||
+ }
|
||||
+
|
||||
+ if (c == 0xBB)
|
||||
+ {
|
||||
+ c=fgetc(fp);
|
||||
+ }
|
||||
+ else
|
||||
+ {
|
||||
+ if ( c!= EOF )
|
||||
+ {
|
||||
+ mbf->buf[0]=(unsigned char) 0xEF;
|
||||
+ mbf->bufcount=1;
|
||||
+ ungetc(c,fp);
|
||||
+ return false;
|
||||
+ }
|
||||
+ else
|
||||
+ {
|
||||
+ ungetc(0xEF,fp);
|
||||
+ return false;
|
||||
+ }
|
||||
+ }
|
||||
+ if (c == 0xBF)
|
||||
+ {
|
||||
+ mbf->bufcount=0;
|
||||
+ return true;
|
||||
+ }
|
||||
+ else
|
||||
+ {
|
||||
+ if (c != EOF)
|
||||
+ {
|
||||
+ mbf->buf[0]=(unsigned char) 0xEF;
|
||||
+ mbf->buf[1]=(unsigned char) 0xBB;
|
||||
+ mbf->bufcount=2;
|
||||
+ ungetc(c,fp);
|
||||
+ return false;
|
||||
+ }
|
||||
+ else
|
||||
+ {
|
||||
+ mbf->buf[0]=(unsigned char) 0xEF;
|
||||
+ mbf->bufcount=1;
|
||||
+ ungetc(0xBB,fp);
|
||||
+ return false;
|
||||
+ }
|
||||
+ }
|
||||
+ return false;
|
||||
+}
|
||||
+
|
||||
+extern inline void
|
||||
+print_bom(void)
|
||||
+{
|
||||
+ putc (0xEF, stdout);
|
||||
+ putc (0xBB, stdout);
|
||||
+ putc (0xBF, stdout);
|
||||
+}
|
||||
+
|
||||
/* Add the comma or blank separated list of tab stops STOPS
|
||||
to the list of tab stops. */
|
||||
|
||||
diff -up ./src/expand-core.h.orig ./src/expand-core.h
|
||||
--- ./src/expand-core.h.orig 2016-06-28 14:44:18.281619000 +0200
|
||||
+++ ./src/expand-core.h 2016-06-30 11:47:18.929437205 +0200
|
||||
@@ -15,7 +15,7 @@
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
||||
|
||||
#ifndef EXPAND_CORE_H_
|
||||
-# define EXPAND_CORE_H_
|
||||
+#define EXPAND_CORE_H_
|
||||
|
||||
extern size_t first_free_tab;
|
||||
|
||||
@@ -29,6 +29,18 @@ extern char **file_list;
|
||||
|
||||
extern bool have_read_stdin;
|
||||
|
||||
+inline int
|
||||
+set_utf_locale (void);
|
||||
+
|
||||
+bool
|
||||
+check_utf_locale(void);
|
||||
+
|
||||
+bool
|
||||
+check_bom(FILE* fp, mb_file_t *mbf);
|
||||
+
|
||||
+inline void
|
||||
+print_bom(void);
|
||||
+
|
||||
void
|
||||
parse_tab_stops (char const *stops, void (*add_tab_stop)(uintmax_t));
|
||||
|
||||
diff -up ./src/expand.c.orig ./src/expand.c
|
||||
--- ./src/expand.c.orig 2016-06-28 14:44:18.286619000 +0200
|
||||
+++ ./src/expand.c 2016-06-30 11:50:15.077312947 +0200
|
||||
@@ -149,11 +149,33 @@ expand (void)
|
||||
FILE *fp = next_file (NULL);
|
||||
mb_file_t mbf;
|
||||
mbf_char_t c;
|
||||
-
|
||||
+ /* True if the starting locale is utf8. */
|
||||
+ bool using_utf_locale;
|
||||
+
|
||||
+ /* True if the first file contains BOM header. */
|
||||
+ bool found_bom;
|
||||
+ using_utf_locale=check_utf_locale();
|
||||
+
|
||||
if (!fp)
|
||||
return;
|
||||
-
|
||||
mbf_init (mbf, fp);
|
||||
+ found_bom=check_bom(fp,&mbf);
|
||||
+
|
||||
+ if (using_utf_locale == false && found_bom == true)
|
||||
+ {
|
||||
+ /*try using some predefined locale */
|
||||
+
|
||||
+ if (set_utf_locale () != 0)
|
||||
+ {
|
||||
+ error (EXIT_FAILURE, errno, _("cannot set UTF-8 locale"));
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+
|
||||
+ if (found_bom == true)
|
||||
+ {
|
||||
+ print_bom();
|
||||
+ }
|
||||
|
||||
while (true)
|
||||
{
|
||||
@@ -178,6 +200,27 @@ expand (void)
|
||||
if ((mb_iseof (c)) && (fp = next_file (fp)))
|
||||
{
|
||||
mbf_init (mbf, fp);
|
||||
+ if (fp!=NULL)
|
||||
+ {
|
||||
+ if (check_bom(fp,&mbf)==true)
|
||||
+ {
|
||||
+ /*Not the first file - check BOM header*/
|
||||
+ if (using_utf_locale==false && found_bom==false)
|
||||
+ {
|
||||
+ /*BOM header in subsequent file but not in the first one. */
|
||||
+ error (EXIT_FAILURE, errno, _("combination of files with and without BOM header"));
|
||||
+ }
|
||||
+ }
|
||||
+ else
|
||||
+ {
|
||||
+ if(using_utf_locale==false && found_bom==true)
|
||||
+ {
|
||||
+ /*First file conatined BOM header - locale was switched to UTF
|
||||
+ /*all subsequent files should contain BOM. */
|
||||
+ error (EXIT_FAILURE, errno, _("combination of files with and without BOM header"));
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
continue;
|
||||
}
|
||||
else
|
||||
diff -up ./src/unexpand.c.orig ./src/unexpand.c
|
||||
--- ./src/unexpand.c.orig 2016-06-28 17:39:22.894259000 +0200
|
||||
+++ ./src/unexpand.c 2016-07-07 09:48:07.659924755 +0200
|
||||
@@ -172,16 +172,36 @@ unexpand (void)
|
||||
include characters other than spaces, so the blanks must be
|
||||
stored, not merely counted. */
|
||||
mbf_char_t *pending_blank;
|
||||
+ /* True if the starting locale is utf8. */
|
||||
+ bool using_utf_locale;
|
||||
+
|
||||
+ /* True if the first file contains BOM header. */
|
||||
+ bool found_bom;
|
||||
+ using_utf_locale=check_utf_locale();
|
||||
|
||||
if (!fp)
|
||||
return;
|
||||
+ mbf_init (mbf, fp);
|
||||
+ found_bom=check_bom(fp,&mbf);
|
||||
|
||||
+ if (using_utf_locale == false && found_bom == true)
|
||||
+ {
|
||||
+ /*try using some predefined locale */
|
||||
+
|
||||
+ if (set_utf_locale () != 0)
|
||||
+ {
|
||||
+ error (EXIT_FAILURE, errno, _("cannot set UTF-8 locale"));
|
||||
+ }
|
||||
+ }
|
||||
/* The worst case is a non-blank character, then one blank, then a
|
||||
tab stop, then MAX_COLUMN_WIDTH - 1 blanks, then a non-blank; so
|
||||
allocate MAX_COLUMN_WIDTH bytes to store the blanks. */
|
||||
pending_blank = xmalloc (max_column_width * sizeof (mbf_char_t));
|
||||
|
||||
- mbf_init (mbf, fp);
|
||||
+ if (found_bom == true)
|
||||
+ {
|
||||
+ print_bom();
|
||||
+ }
|
||||
|
||||
while (true)
|
||||
{
|
||||
@@ -225,6 +245,27 @@ unexpand (void)
|
||||
if ((mb_iseof (c)) && (fp = next_file (fp)))
|
||||
{
|
||||
mbf_init (mbf, fp);
|
||||
+ if (fp!=NULL)
|
||||
+ {
|
||||
+ if (check_bom(fp,&mbf)==true)
|
||||
+ {
|
||||
+ /*Not the first file - check BOM header*/
|
||||
+ if (using_utf_locale==false && found_bom==false)
|
||||
+ {
|
||||
+ /*BOM header in subsequent file but not in the first one. */
|
||||
+ error (EXIT_FAILURE, errno, _("combination of files with and without BOM header"));
|
||||
+ }
|
||||
+ }
|
||||
+ else
|
||||
+ {
|
||||
+ if(using_utf_locale==false && found_bom==true)
|
||||
+ {
|
||||
+ /*First file conatined BOM header - locale was switched to UTF
|
||||
+ /*all subsequent files should contain BOM. */
|
||||
+ error (EXIT_FAILURE, errno, _("combination of files with and without BOM header"));
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
continue;
|
||||
}
|
||||
else
|
||||
diff -up ./tests/expand/mb.sh.orig ./tests/expand/mb.sh
|
||||
--- ./tests/expand/mb.sh.orig 2016-06-28 14:44:18.287619000 +0200
|
||||
+++ ./tests/expand/mb.sh 2016-06-30 11:57:10.038407216 +0200
|
||||
@@ -109,4 +109,75 @@ äbcdef\xFF |
|
||||
expand < in > out || fail=1
|
||||
compare exp out > /dev/null 2>&1 || fail=1
|
||||
|
||||
+
|
||||
+
|
||||
+#BOM header test 1
|
||||
+printf "\xEF\xBB\xBF" > in; cat <<\EOF >> in || framework_failure_
|
||||
+1234567812345678123456781
|
||||
+. . . .
|
||||
+a b c d
|
||||
+. . . .
|
||||
+ä ö ü ß
|
||||
+. . . .
|
||||
+EOF
|
||||
+env printf ' äöü\t. öüä. \tä xx\n' >> in || framework_failure_
|
||||
+
|
||||
+printf "\xEF\xBB\xBF" > exp; cat <<\EOF >> exp || framework_failure_
|
||||
+1234567812345678123456781
|
||||
+. . . .
|
||||
+a b c d
|
||||
+. . . .
|
||||
+ä ö ü ß
|
||||
+. . . .
|
||||
+ äöü . öüä. ä xx
|
||||
+EOF
|
||||
+
|
||||
+
|
||||
+expand < in > out || fail=1
|
||||
+compare exp out > /dev/null 2>&1 || fail=1
|
||||
+
|
||||
+LANG=C expand < in > out || fail=1
|
||||
+compare exp out > /dev/null 2>&1 || fail=1
|
||||
+
|
||||
+LC_ALL=C expand < in > out || fail=1
|
||||
+compare exp out > /dev/null 2>&1 || fail=1
|
||||
+
|
||||
+
|
||||
+printf '\xEF\xBB\xBF' > in1; cat <<\EOF >> in1 || framework_failure_
|
||||
+1234567812345678123456781
|
||||
+. . . .
|
||||
+a b c d
|
||||
+. . . .
|
||||
+ä ö ü ß
|
||||
+. . . .
|
||||
+EOF
|
||||
+env printf ' äöü\t. öüä. \tä xx\n' >> in1 || framework_failure_
|
||||
+
|
||||
+
|
||||
+printf '\xEF\xBB\xBF' > exp; cat <<\EOF >> exp || framework_failure_
|
||||
+1234567812345678123456781
|
||||
+. . . .
|
||||
+a b c d
|
||||
+. . . .
|
||||
+ä ö ü ß
|
||||
+. . . .
|
||||
+ äöü . öüä. ä xx
|
||||
+1234567812345678123456781
|
||||
+. . . .
|
||||
+a b c d
|
||||
+. . . .
|
||||
+ä ö ü ß
|
||||
+. . . .
|
||||
+ äöü . öüä. ä xx
|
||||
+EOF
|
||||
+
|
||||
+expand in1 in1 > out || fail=1
|
||||
+compare exp out > /dev/null 2>&1 || fail=1
|
||||
+
|
||||
+LANG=C expand in1 in1 > out || fail=1
|
||||
+compare exp out > /dev/null 2>&1 || fail=1
|
||||
+
|
||||
+LC_ALL=C expand in1 in1 > out || fail=1
|
||||
+compare exp out > /dev/null 2>&1 || fail=1
|
||||
+
|
||||
exit $fail
|
||||
diff -up ./tests/unexpand/mb.sh.orig ./tests/unexpand/mb.sh
|
||||
--- ./tests/unexpand/mb.sh.orig 2016-06-28 17:39:22.895259000 +0200
|
||||
+++ ./tests/unexpand/mb.sh 2016-07-07 09:55:00.098281917 +0200
|
||||
@@ -111,3 +111,62 @@ äbcdef\xFF\t|
|
||||
|
||||
unexpand -a < in > out || fail=1
|
||||
compare exp out > /dev/null 2>&1 || fail=1
|
||||
+
|
||||
+#BOM header test 1
|
||||
+printf "\xEF\xBB\xBF" > in; cat <<\EOF >> in || framework_failure_
|
||||
+1234567812345678123456781
|
||||
+. . . .
|
||||
+a b c d
|
||||
+. . . .
|
||||
+ä ö ü ß
|
||||
+. . . .
|
||||
+ äöü . öüä. ä xx
|
||||
+EOF
|
||||
+env printf ' äöü\t. öüä. \tä xx\n' >> in || framework_failure_
|
||||
+
|
||||
+printf "\xEF\xBB\xBF" > exp; cat <<\EOF >> exp || framework_failure_
|
||||
+1234567812345678123456781
|
||||
+. . . .
|
||||
+a b c d
|
||||
+. . . .
|
||||
+ä ö ü ß
|
||||
+. . . .
|
||||
+ äöü . öüä. ä xx
|
||||
+EOF
|
||||
+
|
||||
+unexpand < in > out || fail=1
|
||||
+compare exp out > /dev/null 2>&1 || fail=1
|
||||
+
|
||||
+LANG=C unexpand < in > out || fail=1
|
||||
+compare exp out > /dev/null 2>&1 || fail=1
|
||||
+
|
||||
+LC_ALL=C unexpand < in > out || fail=1
|
||||
+compare exp out > /dev/null 2>&1 || fail=1
|
||||
+
|
||||
+
|
||||
+printf "\xEF\xBB\xBF" > exp; cat <<\EOF >> exp || framework_failure_
|
||||
+1234567812345678123456781
|
||||
+. . . .
|
||||
+a b c d
|
||||
+. . . .
|
||||
+ä ö ü ß
|
||||
+. . . .
|
||||
+ äöü . öüä. ä xx
|
||||
+1234567812345678123456781
|
||||
+. . . .
|
||||
+a b c d
|
||||
+. . . .
|
||||
+ä ö ü ß
|
||||
+. . . .
|
||||
+ äöü . öüä. ä xx
|
||||
+EOF
|
||||
+
|
||||
+
|
||||
+unexpand in in > out || fail=1
|
||||
+compare exp out > /dev/null 2>&1 || fail=1
|
||||
+
|
||||
+LANG=C unexpand in in > out || fail=1
|
||||
+compare exp out > /dev/null 2>&1 || fail=1
|
||||
+
|
||||
+LC_ALL=C unexpand in in > out || fail=1
|
||||
+compare exp out > /dev/null 2>&1 || fail=1
|
2780
coreutils-i18n.patch
2780
coreutils-i18n.patch
File diff suppressed because it is too large
Load Diff
|
@ -1,312 +0,0 @@
|
|||
Release GPG keyring of coreutils group.
|
||||
|
||||
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||
|
||||
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
|
||||
ELphkzjc6eM3CaOZ73u4GVXotheeUabUHQ==
|
||||
=drvb
|
||||
-----END PGP PUBLIC KEY BLOCK-----
|
|
@ -0,0 +1,11 @@
|
|||
--- coreutils-5.2.1/src/who.c.overflow 2005-05-25 09:59:06.000000000 +0100
|
||||
+++ coreutils-5.2.1/src/who.c 2005-05-25 10:00:31.000000000 +0100
|
||||
@@ -79,7 +79,7 @@
|
||||
# define UT_TYPE_NEW_TIME(U) false
|
||||
#endif
|
||||
|
||||
-#define IDLESTR_LEN 6
|
||||
+#define IDLESTR_LEN 10
|
||||
|
||||
#if HAVE_STRUCT_XTMP_UT_PID
|
||||
# define PIDSTR_DECL_AND_INIT(Var, Utmp_ent) \
|
|
@ -1,9 +0,0 @@
|
|||
Provides: bundled(gnulib)
|
||||
|
||||
# make it possible to install the latest available Adobe Reader RPM for Linux
|
||||
Provides: /bin/cat
|
||||
Provides: /bin/chmod
|
||||
Provides: /bin/echo
|
||||
Provides: /bin/ln
|
||||
Provides: /bin/rm
|
||||
Provides: /bin/touch
|
|
@ -1,46 +1,15 @@
|
|||
From d70ddb3eb845c494280e7365e2b889242e7e1bb9 Mon Sep 17 00:00:00 2001
|
||||
From: rpm-build <rpm-build>
|
||||
Date: Mon, 4 Oct 2021 08:45:53 +0200
|
||||
Subject: [PATCH] coreutils-selinux.patch
|
||||
|
||||
---
|
||||
doc/coreutils.texi | 5 +++++
|
||||
man/chcon.x | 2 +-
|
||||
man/runcon.x | 2 +-
|
||||
src/cp.c | 16 +++++++++++++++-
|
||||
src/install.c | 10 ++++++++--
|
||||
5 files changed, 30 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/doc/coreutils.texi b/doc/coreutils.texi
|
||||
index 6810c15..19b535c 100644
|
||||
--- a/doc/coreutils.texi
|
||||
+++ b/doc/coreutils.texi
|
||||
@@ -8766,6 +8766,11 @@ done
|
||||
exit $fail
|
||||
@end example
|
||||
|
||||
+@item -c
|
||||
+@cindex SELinux security context information, preserving
|
||||
+Preserve SELinux security context of the original files if possible.
|
||||
+Some file systems don't support storing of SELinux security context.
|
||||
+
|
||||
@item --copy-contents
|
||||
@cindex directories, copying recursively
|
||||
@cindex copying directories recursively
|
||||
diff --git a/man/chcon.x b/man/chcon.x
|
||||
index 8c1ff6f..c84fb96 100644
|
||||
--- a/man/chcon.x
|
||||
+++ b/man/chcon.x
|
||||
diff -urNp coreutils-8.21-orig/man/chcon.x coreutils-8.21/man/chcon.x
|
||||
--- coreutils-8.21-orig/man/chcon.x 2011-08-23 15:44:01.000000000 +0200
|
||||
+++ coreutils-8.21/man/chcon.x 2013-02-15 14:31:58.937482694 +0100
|
||||
@@ -1,4 +1,4 @@
|
||||
[NAME]
|
||||
-chcon \- change file security context
|
||||
+chcon \- change file SELinux security context
|
||||
[DESCRIPTION]
|
||||
.\" Add any additional description here
|
||||
diff --git a/man/runcon.x b/man/runcon.x
|
||||
index d2df13e..5c5f5d8 100644
|
||||
--- a/man/runcon.x
|
||||
+++ b/man/runcon.x
|
||||
diff -urNp coreutils-8.21-orig/man/runcon.x coreutils-8.21/man/runcon.x
|
||||
--- coreutils-8.21-orig/man/runcon.x 2011-08-23 15:44:01.000000000 +0200
|
||||
+++ coreutils-8.21/man/runcon.x 2013-02-15 14:31:58.938486496 +0100
|
||||
@@ -1,5 +1,5 @@
|
||||
[NAME]
|
||||
-runcon \- run command with specified security context
|
||||
|
@ -48,36 +17,35 @@ index d2df13e..5c5f5d8 100644
|
|||
[DESCRIPTION]
|
||||
Run COMMAND with completely-specified CONTEXT, or with current or
|
||||
transitioned security context modified by one or more of LEVEL,
|
||||
diff --git a/src/cp.c b/src/cp.c
|
||||
index c97a675..89fb8ec 100644
|
||||
--- a/src/cp.c
|
||||
+++ b/src/cp.c
|
||||
@@ -191,6 +191,9 @@ Copy SOURCE to DEST, or multiple SOURCE(s) to DIRECTORY.\n\
|
||||
additional attributes: context, links, xattr,\
|
||||
\n\
|
||||
diff -urNp coreutils-8.21-orig/src/cp.c coreutils-8.21/src/cp.c
|
||||
--- coreutils-8.21-orig/src/cp.c 2013-02-07 10:37:05.000000000 +0100
|
||||
+++ coreutils-8.21/src/cp.c 2013-02-15 14:31:58.945468929 +0100
|
||||
@@ -202,6 +202,9 @@ Copy SOURCE to DEST, or multiple SOURCE(s) to DIRECTORY.\n\
|
||||
all\n\
|
||||
+"), stdout);
|
||||
+ fputs (_("\
|
||||
+ -c deprecated, same as --preserve=context\n\
|
||||
"), stdout);
|
||||
fputs (_("\
|
||||
+ -c deprecated, same as --preserve=context\n\
|
||||
+"), stdout);
|
||||
+ fputs (_("\
|
||||
--no-preserve=ATTR_LIST don't preserve the specified attributes\n\
|
||||
@@ -954,7 +957,7 @@ main (int argc, char **argv)
|
||||
selinux_enabled = (0 < is_selinux_enabled ());
|
||||
cp_option_init (&x);
|
||||
--parents use full source file name under DIRECTORY\n\
|
||||
"), stdout);
|
||||
@@ -943,7 +946,7 @@ main (int argc, char **argv)
|
||||
we'll actually use backup_suffix_string. */
|
||||
backup_suffix_string = getenv ("SIMPLE_BACKUP_SUFFIX");
|
||||
|
||||
- while ((c = getopt_long (argc, argv, "abdfHilLnprst:uvxPRS:TZ",
|
||||
+ while ((c = getopt_long (argc, argv, "abcdfHilLnprst:uvxPRS:TZ",
|
||||
long_opts, NULL))
|
||||
!= -1)
|
||||
{
|
||||
@@ -1002,6 +1005,17 @@ main (int argc, char **argv)
|
||||
@@ -991,6 +994,17 @@ main (int argc, char **argv)
|
||||
copy_contents = true;
|
||||
break;
|
||||
|
||||
+ case 'c':
|
||||
+ fprintf (stderr, "%s: warning: option '-c' is deprecated, please use '--preserve=context' instead\n", argv[0]);
|
||||
+ if ( x.set_security_context ) {
|
||||
+ if ( x.set_security_context ) {
|
||||
+ (void) fprintf(stderr, "%s: cannot force target context and preserve it\n", argv[0]);
|
||||
+ exit( 1 );
|
||||
+ }
|
||||
|
@ -89,29 +57,40 @@ index c97a675..89fb8ec 100644
|
|||
case 'd':
|
||||
x.preserve_links = true;
|
||||
x.dereference = DEREF_NEVER;
|
||||
diff --git a/src/install.c b/src/install.c
|
||||
index c9456fe..2b1bee9 100644
|
||||
--- a/src/install.c
|
||||
+++ b/src/install.c
|
||||
@@ -638,7 +638,7 @@ In the 4th form, create all components of the given DIRECTORY(ies).\n\
|
||||
diff -urNp coreutils-8.21-orig/src/id.c coreutils-8.21/src/id.c
|
||||
--- coreutils-8.21-orig/src/id.c 2013-01-31 01:46:24.000000000 +0100
|
||||
+++ coreutils-8.21/src/id.c 2013-02-15 14:31:58.946469154 +0100
|
||||
@@ -113,7 +113,7 @@ int
|
||||
main (int argc, char **argv)
|
||||
{
|
||||
int optc;
|
||||
- int selinux_enabled = (is_selinux_enabled () > 0);
|
||||
+ bool selinux_enabled = (is_selinux_enabled () > 0);
|
||||
bool smack_enabled = is_smack_enabled ();
|
||||
bool opt_zero = false;
|
||||
char *pw_name = NULL;
|
||||
diff -urNp coreutils-8.21-orig/src/install.c coreutils-8.21/src/install.c
|
||||
--- coreutils-8.21-orig/src/install.c 2013-02-07 10:37:05.000000000 +0100
|
||||
+++ coreutils-8.21/src/install.c 2013-02-15 14:31:58.948469440 +0100
|
||||
@@ -649,7 +649,7 @@ In the 4th form, create all components of the given DIRECTORY(ies).\n\
|
||||
-v, --verbose print the name of each directory as it is created\n\
|
||||
"), stdout);
|
||||
fputs (_("\
|
||||
- --preserve-context preserve SELinux security context\n\
|
||||
+ -P, --preserve-context preserve SELinux security context (-P deprecated)\n\
|
||||
-Z set SELinux security context of destination\n\
|
||||
file and each created directory to default type\n\
|
||||
file to default type\n\
|
||||
--context[=CTX] like -Z, or if CTX is specified then set the\n\
|
||||
@@ -790,7 +790,7 @@ main (int argc, char **argv)
|
||||
dir_arg = false;
|
||||
umask (0);
|
||||
@@ -817,7 +817,7 @@ main (int argc, char **argv)
|
||||
we'll actually use backup_suffix_string. */
|
||||
backup_suffix_string = getenv ("SIMPLE_BACKUP_SUFFIX");
|
||||
|
||||
- while ((optc = getopt_long (argc, argv, "bcCsDdg:m:o:pt:TvS:Z", long_options,
|
||||
+ while ((optc = getopt_long (argc, argv, "bcCsDdg:m:o:pPt:TvS:Z", long_options,
|
||||
NULL)) != -1)
|
||||
{
|
||||
switch (optc)
|
||||
@@ -851,6 +851,8 @@ main (int argc, char **argv)
|
||||
@@ -878,6 +878,8 @@ main (int argc, char **argv)
|
||||
no_target_directory = true;
|
||||
break;
|
||||
|
||||
|
@ -120,7 +99,7 @@ index c9456fe..2b1bee9 100644
|
|||
case PRESERVE_CONTEXT_OPTION:
|
||||
if (! selinux_enabled)
|
||||
{
|
||||
@@ -858,6 +860,10 @@ main (int argc, char **argv)
|
||||
@@ -885,6 +887,10 @@ main (int argc, char **argv)
|
||||
"this kernel is not SELinux-enabled"));
|
||||
break;
|
||||
}
|
||||
|
@ -131,6 +110,3 @@ index c9456fe..2b1bee9 100644
|
|||
x.preserve_security_context = true;
|
||||
use_default_selinux_context = false;
|
||||
break;
|
||||
--
|
||||
2.31.1
|
||||
|
||||
|
|
|
@ -0,0 +1,15 @@
|
|||
diff -urNp coreutils-6.10-orig/doc/coreutils.texi coreutils-6.10/doc/coreutils.texi
|
||||
--- coreutils-6.10-orig/doc/coreutils.texi 2008-04-07 17:52:11.000000000 +0200
|
||||
+++ coreutils-6.10/doc/coreutils.texi 2008-04-07 18:01:43.000000000 +0200
|
||||
@@ -8002,6 +8002,11 @@ done
|
||||
exit $fail
|
||||
@end example
|
||||
|
||||
+@item -c
|
||||
+@cindex SELinux security context information, preserving
|
||||
+Preserve SELinux security context of the original files if possible.
|
||||
+Some file systems don't support storing of SELinux security context.
|
||||
+
|
||||
@item --copy-contents
|
||||
@cindex directories, copying recursively
|
||||
@cindex copying directories recursively
|
|
@ -0,0 +1,165 @@
|
|||
From ba5fe2d4b8b6a8366f48b1ad1f97fe26c9089b53 Mon Sep 17 00:00:00 2001
|
||||
From: Sebastian Kisela <skisela@redhat.com>
|
||||
Date: Wed, 5 Apr 2017 09:40:41 +0200
|
||||
Subject: [PATCH] tail: revert to polling if a followed directory is replaced
|
||||
|
||||
* src/tail.c (tail_forever_inotify): Add the IN_DELETE_SELF flag when
|
||||
creating watch for the parent directory. After the parent directory
|
||||
is removed, an event is caught and then we switch from inotify to
|
||||
polling mode. Till now, inotify has always frozen because it waited for
|
||||
an event from a watched dir, which has been already deleted and was not
|
||||
added again.
|
||||
* tests/tail-2/inotify-dir-recreate.sh: Add a test case.
|
||||
* tests/local.mk: Reference the new test.
|
||||
Fixes http://bugs.gnu.org/26363
|
||||
Reported at https://bugzilla.redhat.com/1283760
|
||||
---
|
||||
src/tail.c | 22 +++++++++-
|
||||
tests/local.mk | 1 +
|
||||
tests/tail-2/inotify-dir-recreate.sh | 82 ++++++++++++++++++++++++++++++++++++
|
||||
4 files changed, 107 insertions(+), 1 deletion(-)
|
||||
create mode 100755 tests/tail-2/inotify-dir-recreate.sh
|
||||
|
||||
diff --git a/src/tail.c b/src/tail.c
|
||||
index d1552d4..6328fe0 100644
|
||||
--- a/src/tail.c
|
||||
+++ b/src/tail.c
|
||||
@@ -1457,7 +1457,8 @@ tail_forever_inotify (int wd, struct File_spec *f, size_t n_files,
|
||||
In that case the same watch descriptor is returned. */
|
||||
f[i].parent_wd = inotify_add_watch (wd, dirlen ? f[i].name : ".",
|
||||
(IN_CREATE | IN_DELETE
|
||||
- | IN_MOVED_TO | IN_ATTRIB));
|
||||
+ | IN_MOVED_TO | IN_ATTRIB
|
||||
+ | IN_DELETE_SELF));
|
||||
|
||||
f[i].name[dirlen] = prev;
|
||||
|
||||
@@ -1628,6 +1629,25 @@ tail_forever_inotify (int wd, struct File_spec *f, size_t n_files,
|
||||
ev = void_ev;
|
||||
evbuf_off += sizeof (*ev) + ev->len;
|
||||
|
||||
+ /* If a directory is deleted, IN_DELETE_SELF is emitted
|
||||
+ with ev->name of length 0.
|
||||
+ We need to catch it, otherwise it would wait forever,
|
||||
+ as wd for directory becomes inactive. Revert to polling now. */
|
||||
+ if ((ev->mask & IN_DELETE_SELF) && ! ev->len)
|
||||
+ {
|
||||
+ for (i = 0; i < n_files; i++)
|
||||
+ {
|
||||
+ if (ev->wd == f[i].parent_wd)
|
||||
+ {
|
||||
+ hash_free (wd_to_name);
|
||||
+ error (0, 0,
|
||||
+ _("directory containing watched file was removed"));
|
||||
+ errno = 0; /* we've already diagnosed enough errno detail. */
|
||||
+ return true;
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
if (ev->len) /* event on ev->name in watched directory. */
|
||||
{
|
||||
size_t j;
|
||||
diff --git a/tests/local.mk b/tests/local.mk
|
||||
index 3fe9ba8..e890c9a 100644
|
||||
--- a/tests/local.mk
|
||||
+++ b/tests/local.mk
|
||||
@@ -176,6 +176,7 @@ all_tests = \
|
||||
tests/tail-2/descriptor-vs-rename.sh \
|
||||
tests/tail-2/inotify-rotate.sh \
|
||||
tests/tail-2/inotify-rotate-resources.sh \
|
||||
+ tests/tail-2/inotify-dir-recreate.sh \
|
||||
tests/chmod/no-x.sh \
|
||||
tests/chgrp/basic.sh \
|
||||
tests/rm/dangling-symlink.sh \
|
||||
diff --git a/tests/tail-2/inotify-dir-recreate.sh b/tests/tail-2/inotify-dir-recreate.sh
|
||||
new file mode 100755
|
||||
index 0000000..eaa8422
|
||||
--- /dev/null
|
||||
+++ b/tests/tail-2/inotify-dir-recreate.sh
|
||||
@@ -0,0 +1,82 @@
|
||||
+#!/bin/sh
|
||||
+# Makes sure, inotify will switch to polling mode if directory
|
||||
+# of the watched file was removed and recreated.
|
||||
+# (...instead of getting stuck forever)
|
||||
+
|
||||
+# Copyright (C) 2006-2017 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 of the License, 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, see <http://www.gnu.org/licenses/>.
|
||||
+
|
||||
+. "${srcdir=.}/tests/init.sh"; path_prepend_ ./src
|
||||
+print_ver_ tail
|
||||
+
|
||||
+
|
||||
+# Terminate any background tail process
|
||||
+cleanup_() { kill $pid 2>/dev/null && wait $pid; }
|
||||
+
|
||||
+cleanup_fail_ ()
|
||||
+{
|
||||
+ warn_ $1
|
||||
+ cleanup_
|
||||
+ fail=1
|
||||
+}
|
||||
+
|
||||
+# $check_re - string to be found
|
||||
+# $check_f - file to be searched
|
||||
+check_tail_output_ ()
|
||||
+{
|
||||
+ local delay="$1"
|
||||
+ grep $check_re $check_f > /dev/null ||
|
||||
+ { sleep $delay ; return 1; }
|
||||
+}
|
||||
+
|
||||
+grep_timeout_ ()
|
||||
+{
|
||||
+ check_re="$1"
|
||||
+ check_f="$2"
|
||||
+ retry_delay_ check_tail_output_ .1 5
|
||||
+}
|
||||
+
|
||||
+# Prepare the file to be watched
|
||||
+mkdir dir && echo 'inotify' > dir/file || framework_failure_
|
||||
+
|
||||
+#tail must print content of the file to stdout, verify
|
||||
+timeout 60 tail -F dir/file &>out & pid=$!
|
||||
+grep_timeout_ 'inotify' 'out' ||
|
||||
+{ cleanup_fail_ 'file to be tailed does not exist'; }
|
||||
+
|
||||
+# Remove the directory, should get the message about the deletion
|
||||
+rm -r dir || framework_failure_
|
||||
+grep_timeout_ 'polling' 'out' ||
|
||||
+{ cleanup_fail_ 'tail did not switch to polling mode'; }
|
||||
+
|
||||
+# Recreate the dir, must get a message about recreation
|
||||
+mkdir dir && touch dir/file || framework_failure_
|
||||
+grep_timeout_ 'appeared' 'out' ||
|
||||
+{ cleanup_fail_ 'previously removed file did not appear'; }
|
||||
+
|
||||
+cleanup_
|
||||
+
|
||||
+# Expected result for the whole process
|
||||
+cat <<\EOF > exp || framework_failure_
|
||||
+inotify
|
||||
+tail: 'dir/file' has become inaccessible: No such file or directory
|
||||
+tail: directory containing watched file was removed
|
||||
+tail: inotify cannot be used, reverting to polling
|
||||
+tail: 'dir/file' has appeared; following new file
|
||||
+EOF
|
||||
+
|
||||
+compare exp out || fail=1
|
||||
+
|
||||
+Exit $fail
|
||||
--
|
||||
2.9.3
|
||||
|
677
coreutils.spec
677
coreutils.spec
|
@ -1,34 +1,44 @@
|
|||
Summary: A set of basic GNU tools commonly used in shell scripts
|
||||
Name: coreutils
|
||||
Version: 9.1
|
||||
Release: 4%{?dist}
|
||||
Version: 8.25
|
||||
Release: 9%{?dist}
|
||||
License: GPLv3+
|
||||
Url: https://www.gnu.org/software/coreutils/
|
||||
Source0: https://ftp.gnu.org/gnu/%{name}/%{name}-%{version}.tar.xz
|
||||
Source1: https://ftp.gnu.org/gnu/%{name}/%{name}-%{version}.tar.xz.sig
|
||||
# From https://savannah.gnu.org/project/release-gpgkeys.php?group=coreutils&download=1
|
||||
# which is linked as project keyring on https://savannah.gnu.org/projects/coreutils
|
||||
Source2: coreutils-keyring.gpg
|
||||
Group: System Environment/Base
|
||||
Url: http://www.gnu.org/software/coreutils/
|
||||
Source0: ftp://ftp.gnu.org/gnu/%{name}/%{name}-%{version}.tar.xz
|
||||
Source2: ftp://ftp.gnu.org/gnu/%{name}/%{name}-%{version}.tar.xz.sig
|
||||
Source50: supported_utils
|
||||
Source51: coreutils-provides.inc
|
||||
Source101: coreutils-DIR_COLORS
|
||||
Source102: coreutils-DIR_COLORS.lightbgcolor
|
||||
Source103: coreutils-DIR_COLORS.256color
|
||||
Source105: coreutils-colorls.sh
|
||||
Source106: coreutils-colorls.csh
|
||||
|
||||
# do not make coreutils-single depend on /usr/bin/coreutils
|
||||
%global __requires_exclude ^%{_bindir}/coreutils$
|
||||
# Provide our own custom requires for coreutils-single package
|
||||
Source10: coreutils-find-requires.sh
|
||||
%global _use_internal_dependency_generator 0
|
||||
%global __find_provides %{_rpmconfigdir}/find-provides
|
||||
%global __find_requires %{SOURCE10} %{_rpmconfigdir}/find-requires
|
||||
|
||||
# Make simple backups in correct dir; broken in 9.1
|
||||
Patch1: gnulib-simple-backup-fix.patch
|
||||
# From upstream
|
||||
Patch952: coreutils-8.25-intall-Z-selinux.patch
|
||||
# fix 'sort -h -k' in locales that use blank as thousands separator (#1355780)
|
||||
Patch953: coreutils-8.25-sort-thousands-sep.patch
|
||||
# ls: allow interruption when reading slow directories (#1365933)
|
||||
Patch954: coreutils-8.25-ls-signal.patch
|
||||
# md5sum,sha*sum: fix --ignore-missing with checksums starting with 00
|
||||
Patch955: coreutils-8.25-sum-ignore-missing.patch
|
||||
# install,mkdir: fix handling of -DZ and -pZ, respectively (#1398913)
|
||||
Patch956: coreutils-8.25-mkdir-p-selinux.patch
|
||||
# tail: revert to polling if a followed directory is replaced(#1283760)
|
||||
Patch957: coreutils-tail-inotify-recreate.patch
|
||||
|
||||
# disable the test-lock gnulib test prone to deadlock
|
||||
Patch100: coreutils-8.26-test-lock.patch
|
||||
|
||||
# require_selinux_(): use selinuxenabled(8) if available
|
||||
Patch105: coreutils-8.26-selinuxenable.patch
|
||||
|
||||
# downstream changes to default DIR_COLORS
|
||||
Patch102: coreutils-8.32-DIR_COLORS.patch
|
||||
# to be removed (#548834)
|
||||
# Our patches
|
||||
#general patch to workaround koji build system issues
|
||||
Patch100: coreutils-6.10-configuration.patch
|
||||
#add note about no difference between binary/text mode on Linux - md5sum manpage
|
||||
Patch101: coreutils-6.10-manpages.patch
|
||||
#do display processor type for uname -p/-i based on uname(2) syscall
|
||||
Patch103: coreutils-8.2-uname-processortype.patch
|
||||
#df --direct
|
||||
Patch104: coreutils-df-direct.patch
|
||||
|
@ -38,55 +48,106 @@ Patch107: coreutils-8.4-mkdir-modenote.patch
|
|||
# sh-utils
|
||||
#add info about TZ envvar to date manpage
|
||||
Patch703: sh-utils-2.0.11-dateman.patch
|
||||
Patch713: coreutils-4.5.3-langinfo.patch
|
||||
|
||||
# (sb) lin18nux/lsb compliance - multibyte functionality patch
|
||||
Patch800: coreutils-i18n.patch
|
||||
# (sb) lin18nux/lsb compliance - expand/unexpand
|
||||
Patch801: coreutils-i18n-expand-unexpand.patch
|
||||
# (sb) lin18nux/lsb compliance - cut - not stable enough, not applied
|
||||
Patch802: coreutils-i18n-cut.patch
|
||||
# i18n patch for cut - old version - used
|
||||
Patch804: coreutils-i18n-cut-old.patch
|
||||
# The unexpand patch above is not correct. Sent to the patch authors
|
||||
Patch803: coreutils-i18n-fix-unexpand.patch
|
||||
#(un)expand - allow multiple files on input - broken by patch 801
|
||||
Patch805: coreutils-i18n-fix2-expand-unexpand.patch
|
||||
#(un)expand - test BOM headers
|
||||
Patch806: coreutils-i18n-un-expand-BOM.patch
|
||||
# make 'sort -h' work for arbitrary column even when using UTF-8 locales
|
||||
Patch807: coreutils-i18n-sort-human.patch
|
||||
|
||||
#getgrouplist() patch from Ulrich Drepper.
|
||||
Patch908: coreutils-getgrouplist.patch
|
||||
#Prevent buffer overflow in who(1) (bug #158405).
|
||||
Patch912: coreutils-overflow.patch
|
||||
#Temporarily disable df symlink test, failing
|
||||
Patch913: coreutils-8.22-temporarytestoff.patch
|
||||
|
||||
#SELINUX Patch - implements Redhat changes
|
||||
#(upstream did some SELinux implementation unlike with RedHat patch)
|
||||
Patch950: coreutils-selinux.patch
|
||||
Patch951: coreutils-selinuxmanpages.patch
|
||||
|
||||
Conflicts: filesystem < 3
|
||||
# To avoid clobbering installs
|
||||
Conflicts: coreutils-single
|
||||
# To give priority to this package
|
||||
Obsoletes: coreutils-single
|
||||
Provides: /bin/basename
|
||||
Provides: /bin/cat
|
||||
Provides: /bin/chgrp
|
||||
Provides: /bin/chmod
|
||||
Provides: /bin/chown
|
||||
Provides: /bin/cp
|
||||
Provides: /bin/cut
|
||||
Provides: /bin/date
|
||||
Provides: /bin/dd
|
||||
Provides: /bin/df
|
||||
Provides: /bin/echo
|
||||
Provides: /bin/env
|
||||
Provides: /bin/false
|
||||
Provides: /bin/ln
|
||||
Provides: /bin/ls
|
||||
Provides: /bin/mkdir
|
||||
Provides: /bin/mknod
|
||||
Provides: /bin/mktemp
|
||||
Provides: /bin/mv
|
||||
Provides: /bin/nice
|
||||
Provides: /bin/pwd
|
||||
Provides: /bin/readlink
|
||||
Provides: /bin/rm
|
||||
Provides: /bin/rmdir
|
||||
Provides: /bin/sleep
|
||||
Provides: /bin/sort
|
||||
Provides: /bin/stty
|
||||
Provides: /bin/sync
|
||||
Provides: /bin/touch
|
||||
Provides: /bin/true
|
||||
Provides: /bin/uname
|
||||
|
||||
BuildRequires: attr
|
||||
BuildRequires: libselinux-devel
|
||||
BuildRequires: libacl-devel
|
||||
BuildRequires: gettext bison
|
||||
BuildRequires: texinfo
|
||||
BuildRequires: autoconf
|
||||
BuildRequires: automake
|
||||
BuildRequires: gcc
|
||||
BuildRequires: gettext-devel
|
||||
BuildRequires: gmp-devel
|
||||
BuildRequires: hostname
|
||||
BuildRequires: libacl-devel
|
||||
BuildRequires: libattr-devel
|
||||
BuildRequires: libcap-devel
|
||||
BuildRequires: libselinux-devel
|
||||
BuildRequires: libselinux-utils
|
||||
BuildRequires: make
|
||||
BuildRequires: libattr-devel
|
||||
BuildRequires: openssl-devel
|
||||
BuildRequires: gmp-devel
|
||||
BuildRequires: attr
|
||||
BuildRequires: strace
|
||||
BuildRequires: texinfo
|
||||
|
||||
# For gpg verification of source tarball
|
||||
BuildRequires: gnupg2
|
||||
|
||||
# test-only dependencies
|
||||
BuildRequires: perl-interpreter
|
||||
BuildRequires: perl(FileHandle)
|
||||
%if 23 < 0%{?fedora} || 7 < 0%{?rhel}
|
||||
# needed by i18n test-cases
|
||||
BuildRequires: glibc-langpack-en
|
||||
BuildRequires: glibc-langpack-fr
|
||||
BuildRequires: glibc-langpack-ko
|
||||
%endif
|
||||
|
||||
Requires: %{name}-common = %{version}-%{release}
|
||||
Requires(pre): /sbin/install-info
|
||||
Requires(preun): /sbin/install-info
|
||||
Requires(post): /sbin/install-info
|
||||
Requires(post): grep
|
||||
Requires: ncurses
|
||||
|
||||
Provides: coreutils-full = %{version}-%{release}
|
||||
%include %{SOURCE51}
|
||||
Provides: fileutils = %{version}-%{release}
|
||||
Provides: sh-utils = %{version}-%{release}
|
||||
Provides: stat = %{version}-%{release}
|
||||
Provides: textutils = %{version}-%{release}
|
||||
#old mktemp package had epoch 3, so we have to use 4 for coreutils
|
||||
Provides: mktemp = 4:%{version}-%{release}
|
||||
Provides: bundled(gnulib)
|
||||
Obsoletes: mktemp < 4:%{version}-%{release}
|
||||
Obsoletes: fileutils <= 4.1.9
|
||||
Obsoletes: sh-utils <= 2.0.12
|
||||
Obsoletes: stat <= 3.3
|
||||
Obsoletes: textutils <= 2.0.21
|
||||
Obsoletes: %{name} < 8.24-100
|
||||
|
||||
%description
|
||||
|
@ -97,8 +158,6 @@ the old GNU fileutils, sh-utils, and textutils packages.
|
|||
Summary: coreutils multicall binary
|
||||
Suggests: coreutils-common
|
||||
Provides: coreutils = %{version}-%{release}
|
||||
Provides: coreutils%{?_isa} = %{version}-%{release}
|
||||
%include %{SOURCE51}
|
||||
# To avoid clobbering installs
|
||||
Conflicts: coreutils < 8.24-100
|
||||
# Note RPM doesn't support separate buildroots for %files
|
||||
|
@ -114,86 +173,90 @@ packaged as a single multicall binary.
|
|||
# yum obsoleting rules explained at:
|
||||
# https://bugzilla.redhat.com/show_bug.cgi?id=1107973#c7
|
||||
Obsoletes: %{name} < 8.24-100
|
||||
|
||||
# info doc refers to "Specifying the Time Zone" from glibc-doc (#959597)
|
||||
Suggests: glibc-doc
|
||||
|
||||
Summary: coreutils common optional components
|
||||
%description common
|
||||
Optional though recommended components,
|
||||
including documentation and translations.
|
||||
|
||||
%prep
|
||||
%{gpgverify} --keyring='%{SOURCE2}' --signature='%{SOURCE1}' --data='%{SOURCE0}'
|
||||
%autosetup -N
|
||||
%setup -q
|
||||
|
||||
# will be regenerated in the build directories
|
||||
rm -f src/fs.h
|
||||
# Our patches
|
||||
%patch100 -p1 -b .configure
|
||||
%patch101 -p1 -b .manpages
|
||||
%patch103 -p1 -b .sysinfo
|
||||
%patch104 -p1 -b .dfdirect
|
||||
%patch107 -p1 -b .mkdirmode
|
||||
|
||||
# will be further modified by coreutils-8.32-DIR_COLORS.patch
|
||||
sed src/dircolors.hin \
|
||||
-e 's| 00;36$| 01;36|' \
|
||||
> DIR_COLORS
|
||||
sed src/dircolors.hin \
|
||||
-e 's| 01;31$| 00;31|' \
|
||||
-e 's| 01;35$| 00;35|' \
|
||||
> DIR_COLORS.lightbgcolor
|
||||
# sh-utils
|
||||
%patch703 -p1 -b .dateman
|
||||
%patch713 -p1 -b .langinfo
|
||||
|
||||
# git add DIR_COLORS{,.lightbgcolor}
|
||||
# git commit -m "clone DIR_COLORS before patching"
|
||||
# li18nux/lsb
|
||||
%patch800 -p1 -b .i18n
|
||||
%patch801 -p1 -b .i18n-expand
|
||||
#%%patch802 -p1 -b .i18n-cut
|
||||
%patch803 -p1 -b .i18n-fix-expand
|
||||
%patch804 -p1 -b .i18n-cutold
|
||||
%patch805 -p1 -b .i18n-fix2-expand-unexpand
|
||||
%patch806 -p1 -b .i18n-BOM-expand-unexpand
|
||||
%patch807 -p1
|
||||
|
||||
# apply all patches
|
||||
%autopatch -p1
|
||||
# Coreutils
|
||||
%patch908 -p1 -b .getgrouplist
|
||||
%patch912 -p1 -b .overflow
|
||||
%patch913 -p1 -b .testoff
|
||||
|
||||
(echo ">>> Fixing permissions on tests") 2>/dev/null
|
||||
find tests -name '*.sh' -perm 0644 -print -exec chmod 0755 '{}' '+'
|
||||
(echo "<<< done") 2>/dev/null
|
||||
#SELinux
|
||||
%patch950 -p1 -b .selinux
|
||||
%patch951 -p1 -b .selinuxman
|
||||
%patch952 -p1
|
||||
|
||||
autoreconf -fiv
|
||||
# upstream patches
|
||||
%patch953 -p1
|
||||
%patch954 -p1
|
||||
%patch955 -p1
|
||||
%patch956 -p1
|
||||
%patch957 -p1
|
||||
|
||||
chmod a+x \
|
||||
tests/df/direct.sh \
|
||||
tests/install/install-Z-selinux.sh \
|
||||
tests/misc/sort-h-thousands-sep.sh \
|
||||
tests/misc/sort-mb-tests.sh \
|
||||
|| :
|
||||
|
||||
#fix typos/mistakes in localized documentation(#439410, #440056)
|
||||
find ./po/ -name "*.p*" | xargs \
|
||||
sed -i \
|
||||
-e 's/-dpR/-cdpR/'
|
||||
|
||||
%build
|
||||
export CFLAGS="$RPM_OPT_FLAGS -fno-strict-aliasing -fpic"
|
||||
|
||||
# disable -flto on ppc64le to make test-float pass (#1789115)
|
||||
%ifarch ppc64le
|
||||
CFLAGS="$CFLAGS -fno-lto"
|
||||
%endif
|
||||
|
||||
# Upstream suggests to build with -Dlint for static analyzers:
|
||||
# https://lists.gnu.org/archive/html/coreutils/2018-06/msg00110.html
|
||||
# ... and even for production binary RPMs:
|
||||
# https://lists.gnu.org/archive/html/bug-gnulib/2020-05/msg00130.html
|
||||
# There is currently no measurable performance drop or other known downside.
|
||||
CFLAGS="$CFLAGS -Dlint"
|
||||
|
||||
# make mknod work again in chroot without /proc being mounted (#1811038)
|
||||
export ac_cv_func_lchmod="no"
|
||||
|
||||
# needed for out-of-tree build
|
||||
%global _configure ../configure
|
||||
|
||||
%{expand:%%global optflags %{optflags} -D_GNU_SOURCE=1}
|
||||
#autoreconf -i -v
|
||||
touch aclocal.m4 configure config.hin Makefile.in */Makefile.in
|
||||
aclocal -I m4
|
||||
autoconf --force
|
||||
automake --copy --add-missing
|
||||
for type in separate single; do
|
||||
mkdir -p $type && \
|
||||
(cd $type || exit $?
|
||||
mkdir $type && \
|
||||
(cd $type && ln -s ../configure || exit 1
|
||||
if test $type = 'single'; then
|
||||
config_single='--enable-single-binary'
|
||||
config_single="$config_single --without-openssl" # smaller/slower sha*sum
|
||||
config_single="$config_single --without-libgmp" # expr/factor machine ints
|
||||
config_single="$config_single --without-gmp" # expr/factor machine ints
|
||||
else
|
||||
config_single='--with-openssl' # faster sha*sum
|
||||
fi
|
||||
%configure $config_single \
|
||||
--cache-file=../config.cache \
|
||||
--enable-install-program=arch \
|
||||
--enable-no-install-program=kill,uptime \
|
||||
--enable-no-install-program=uptime \
|
||||
--with-tty-group \
|
||||
DEFAULT_POSIX2_VERSION=200112 alternative=199209 || :
|
||||
%make_build all V=1
|
||||
|
||||
# make sure that parse-datetime.{c,y} ends up in debuginfo (#1555079)
|
||||
ln -fv ../lib/parse-datetime.{c,y} .
|
||||
)
|
||||
mkdir src # not needed with coreutils > 8.24
|
||||
make all %{?_smp_mflags})
|
||||
done
|
||||
|
||||
# Get the list of supported utilities
|
||||
|
@ -229,385 +292,119 @@ for type in separate single; do
|
|||
fi
|
||||
done
|
||||
|
||||
# fix japanese catalog file
|
||||
if [ -d $RPM_BUILD_ROOT%{_datadir}/locale/ja_JP.EUC/LC_MESSAGES ]; then
|
||||
mkdir -p $RPM_BUILD_ROOT%{_datadir}/locale/ja/LC_MESSAGES
|
||||
mv $RPM_BUILD_ROOT%{_datadir}/locale/ja_JP.EUC/LC_MESSAGES/*mo \
|
||||
$RPM_BUILD_ROOT%{_datadir}/locale/ja/LC_MESSAGES
|
||||
rm -rf $RPM_BUILD_ROOT%{_datadir}/locale/ja_JP.EUC
|
||||
fi
|
||||
|
||||
bzip2 -9f ChangeLog
|
||||
|
||||
mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/profile.d
|
||||
install -p -c -m644 DIR_COLORS{,.lightbgcolor} $RPM_BUILD_ROOT%{_sysconfdir}
|
||||
install -p -c -m644 %SOURCE101 $RPM_BUILD_ROOT%{_sysconfdir}/DIR_COLORS
|
||||
install -p -c -m644 %SOURCE102 $RPM_BUILD_ROOT%{_sysconfdir}/DIR_COLORS.lightbgcolor
|
||||
install -p -c -m644 %SOURCE103 $RPM_BUILD_ROOT%{_sysconfdir}/DIR_COLORS.256color
|
||||
install -p -c -m644 %SOURCE105 $RPM_BUILD_ROOT%{_sysconfdir}/profile.d/colorls.sh
|
||||
install -p -c -m644 %SOURCE106 $RPM_BUILD_ROOT%{_sysconfdir}/profile.d/colorls.csh
|
||||
|
||||
# These come from util-linux and/or procps.
|
||||
# With coreutils > 8.24 one can just add to --enable-no-install-program
|
||||
# rather than manually removing here, since tests depending on
|
||||
# built utilities are correctly skipped if not present.
|
||||
for i in kill ; do
|
||||
rm -f $RPM_BUILD_ROOT{%{_bindir}/$i,%{_mandir}/man1/$i.1}
|
||||
rm -f $RPM_BUILD_ROOT%{_bindir}/$i.single
|
||||
done
|
||||
|
||||
# Compress ChangeLogs from before the fileutils/textutils/etc merge
|
||||
bzip2 -f9 old/*/C*
|
||||
|
||||
# Use hard links instead of symbolic links for LC_TIME files (bug #246729).
|
||||
find %{buildroot}%{_datadir}/locale -type l | \
|
||||
(while read link
|
||||
do
|
||||
target=$(readlink "$link")
|
||||
rm -f "$link"
|
||||
ln "$(dirname "$link")/$target" "$link"
|
||||
done)
|
||||
|
||||
%find_lang %name
|
||||
# Add the %%lang(xyz) ownership for the LC_TIME dirs as well...
|
||||
#Add the %lang(xyz) ownership for the LC_TIME dirs as well...
|
||||
grep LC_TIME %name.lang | cut -d'/' -f1-6 | sed -e 's/) /) %%dir /g' >>%name.lang
|
||||
|
||||
# (sb) Deal with Installed (but unpackaged) file(s) found
|
||||
rm -f $RPM_BUILD_ROOT%{_infodir}/dir
|
||||
|
||||
%pre
|
||||
# We must deinstall these info files since they're merged in
|
||||
# coreutils.info. else their postun'll be run too late
|
||||
# and install-info will fail badly because of duplicates
|
||||
for file in sh-utils textutils fileutils; do
|
||||
if [ -f %{_infodir}/$file.info.gz ]; then
|
||||
/sbin/install-info --delete %{_infodir}/$file.info.gz --dir=%{_infodir}/dir &> /dev/null || :
|
||||
fi
|
||||
done
|
||||
|
||||
%preun
|
||||
if [ $1 = 0 ]; then
|
||||
if [ -f %{_infodir}/%{name}.info.gz ]; then
|
||||
/sbin/install-info --delete %{_infodir}/%{name}.info.gz %{_infodir}/dir || :
|
||||
fi
|
||||
fi
|
||||
|
||||
%post
|
||||
%{_bindir}/grep -v '(sh-utils)\|(fileutils)\|(textutils)' %{_infodir}/dir > \
|
||||
%{_infodir}/dir.rpmmodify || exit 0
|
||||
/bin/mv -f %{_infodir}/dir.rpmmodify %{_infodir}/dir
|
||||
if [ -f %{_infodir}/%{name}.info.gz ]; then
|
||||
/sbin/install-info %{_infodir}/%{name}.info.gz %{_infodir}/dir || :
|
||||
fi
|
||||
|
||||
%files -f supported_utils
|
||||
%defattr(-,root,root,-)
|
||||
%exclude %{_bindir}/*.single
|
||||
%dir %{_libexecdir}/coreutils
|
||||
%{_libexecdir}/coreutils/*.so
|
||||
|
||||
%files single
|
||||
%defattr(-,root,root,-)
|
||||
%{_bindir}/*.single
|
||||
%{_sbindir}/chroot.single
|
||||
%dir %{_libexecdir}/coreutils
|
||||
%{_libexecdir}/coreutils/*.so.single
|
||||
# duplicate the license because coreutils-common does not need to be installed
|
||||
%{!?_licensedir:%global license %%doc}
|
||||
%license COPYING
|
||||
|
||||
%files common -f %{name}.lang
|
||||
%defattr(-,root,root,-)
|
||||
%config(noreplace) %{_sysconfdir}/DIR_COLORS*
|
||||
%config(noreplace) %{_sysconfdir}/profile.d/*
|
||||
%{_infodir}/coreutils*
|
||||
%{_mandir}/man*/*
|
||||
# The following go to /usr/share/doc/coreutils-common
|
||||
%doc ABOUT-NLS NEWS README THANKS TODO
|
||||
%{!?_licensedir:%global license %%doc}
|
||||
%license COPYING
|
||||
|
||||
%changelog
|
||||
* Mon Aug 01 2022 Kamil Dudka <kdudka@redhat.com> - 9.1-4
|
||||
- prevent unexpand from failing on control characters (#2112870)
|
||||
* Fri Apr 28 2017 Sebastian Kisela <skisela@redhat.com> - 8.25-9
|
||||
- tail: revert to polling if a followed directory is replaced(#1283760)
|
||||
|
||||
* Wed Jul 20 2022 Fedora Release Engineering <releng@fedoraproject.org>
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild
|
||||
* Thu Mar 02 2017 Kamil Dudka <kdudka@redhat.com> - 8.25-8
|
||||
- install,mkdir: fix handling of -DZ and -pZ, respectively (#1398913)
|
||||
|
||||
* Sat Apr 23 2022 Pádraig Brady <P@draigBrady.com> - 9.1-2
|
||||
- make simple backups in correct dir; broken in 9.1
|
||||
|
||||
* Tue Apr 19 2022 Kamil Dudka <kdudka@redhat.com> - 9.1-1
|
||||
- new upstream release 9.1
|
||||
|
||||
* Mon Mar 21 2022 Kamil Dudka <kdudka@redhat.com> - 9.0-5
|
||||
- ls, stat: avoid triggering automounts (#2044981)
|
||||
|
||||
* Tue Mar 01 2022 Kamil Dudka <kdudka@redhat.com> - 9.0-4
|
||||
- make `df --direct` work again (#2058686)
|
||||
|
||||
* Wed Jan 19 2022 Fedora Release Engineering <releng@fedoraproject.org>
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild
|
||||
|
||||
* Mon Oct 04 2021 Kamil Dudka <kdudka@redhat.com> - 9.0-2
|
||||
- chmod: fix exit status when ignoring symlinks
|
||||
|
||||
* Sun Sep 26 2021 Kamil Dudka <kdudka@redhat.com> - 9.0-1
|
||||
- new upstream release 9.0
|
||||
|
||||
* Tue Sep 14 2021 Sahana Prasad <sahana@redhat.com>
|
||||
- Rebuilt with OpenSSL 3.0.0
|
||||
|
||||
* Wed Jul 21 2021 Fedora Release Engineering <releng@fedoraproject.org>
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild
|
||||
|
||||
* Wed Jul 07 2021 Kamil Dudka <kdudka@redhat.com> - 8.32-30
|
||||
- df: fix duplicated remote entries due to bind mounts (#1979814)
|
||||
|
||||
* Thu Jul 01 2021 Kamil Dudka <kdudka@redhat.com> - 8.32-28
|
||||
- tail: fix stack out-of-bounds write with --follow
|
||||
|
||||
* Tue Jun 08 2021 Kamil Dudka <kdudka@redhat.com> - 8.32-27
|
||||
- mountlist: recognize fuse.portal as dummy file system (#1913358)
|
||||
|
||||
* Mon May 17 2021 Kamil Dudka <kdudka@redhat.com> - 8.32-26
|
||||
- cp: pick additional copy_file_range()-related fixes from upstream
|
||||
|
||||
* Mon May 03 2021 Kamil Dudka <kdudka@redhat.com> - 8.32-24
|
||||
- copy: ensure we enforce --reflink=never (#1956080)
|
||||
|
||||
* Tue Apr 27 2021 Kamil Dudka <kdudka@redhat.com> - 8.32-23
|
||||
- copy: do not refuse to copy a swap file
|
||||
|
||||
* Fri Apr 09 2021 Kamil Dudka <kdudka@redhat.com> - 8.32-22
|
||||
- weaken the dependency on glibc-doc to reduce minimal installations
|
||||
- drop the last use of ncurses no longer needed (#1830318)
|
||||
- utimens: fix confusing arg type in internal func
|
||||
|
||||
* Fri Mar 26 2021 Kamil Dudka <kdudka@redhat.com> - 8.32-21
|
||||
- hostname,ln: fix memory leaks detected by Coverity
|
||||
|
||||
* Wed Mar 24 2021 Kamil Dudka <kdudka@redhat.com> - 8.32-20
|
||||
- cp: use copy_file_range if available
|
||||
|
||||
* Thu Feb 18 2021 Kamil Dudka <kdudka@redhat.com> - 8.32-19
|
||||
- stat: add support for the exfat file system (#1921427)
|
||||
|
||||
* Wed Feb 03 2021 Kamil Dudka <kdudka@redhat.com> - 8.32-18
|
||||
- make coreutils-common recommend glibc-doc for info doc refs (#959597)
|
||||
|
||||
* Tue Feb 02 2021 Kamil Dudka <kdudka@redhat.com> - 8.32-17
|
||||
- ls: fix crash printing SELinux context for unstatable files (#1921249)
|
||||
- split: fix --number=K/N to output correct part of file (#1921246)
|
||||
- expr: fix invalid read with unmatched \(...\) (#1919775)
|
||||
|
||||
* Tue Jan 26 2021 Fedora Release Engineering <releng@fedoraproject.org>
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild
|
||||
|
||||
* Tue Dec 08 2020 Kamil Dudka <kdudka@redhat.com> - 8.32-15
|
||||
- rm: do not skip files upon failure to remove an empty dir (#1905481)
|
||||
|
||||
* Tue Nov 03 2020 Kamil Dudka <kdudka@redhat.com> - 8.32-14
|
||||
- df,stat,tail: recognize more file system types
|
||||
|
||||
* Wed Oct 14 2020 Kamil Dudka <kdudka@redhat.com> - 8.32-13
|
||||
- make the %%build section idempotent
|
||||
|
||||
* Mon Aug 17 2020 Kamil Dudka <kdudka@redhat.com> - 8.32-12
|
||||
- do not install /etc/DIR_COLORS.256color (#1830318)
|
||||
|
||||
* Thu Jul 30 2020 Kamil Dudka <kdudka@redhat.com> - 8.32-11
|
||||
- cp: default to --reflink=auto (#1861108)
|
||||
|
||||
* Mon Jul 27 2020 Fedora Release Engineering <releng@fedoraproject.org>
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
|
||||
|
||||
* Fri Jul 24 2020 Kamil Dudka <kdudka@redhat.com> - 8.32-9
|
||||
- disable -flto on ppc64le to make test-float pass (#1789115)
|
||||
|
||||
* Mon Jul 13 2020 Tom Stellard <tstellar@redhat.com> - 8.32-8
|
||||
- Use make macros
|
||||
- https://fedoraproject.org/wiki/Changes/UseMakeBuildInstallMacro
|
||||
|
||||
* Fri Jun 26 2020 James Cassell <cyberpear@fedoraproject.org> - 8.32-7
|
||||
- move ncurses to -common package since it's needed for colorls.sh
|
||||
- make ncurses optional
|
||||
|
||||
* Fri May 15 2020 Kamil Dudka <kdudka@redhat.com> - 8.32-6
|
||||
- compile with -Dlint to enable optional initialization and cleanup code
|
||||
|
||||
* Thu Apr 23 2020 Kamil Dudka <kdudka@redhat.com> - 8.32-5
|
||||
- du: simplify leaf optimization for XFS (#1823247)
|
||||
|
||||
* Fri Apr 17 2020 Tom Stellard <tstellar@redhat.com> - 8.32-4
|
||||
- Fix missing inline function definition
|
||||
|
||||
* Wed Mar 11 2020 Kamil Dudka <kdudka@redhat.com> - 8.32-3
|
||||
- uniq: remove collation handling as required by newer POSIX
|
||||
|
||||
* Mon Mar 09 2020 Kamil Dudka <kdudka@redhat.com> - 8.32-2
|
||||
- make mknod work again in chroot without /proc being mounted (#1811038)
|
||||
- ls: restore 8.31 behavior on removed directories
|
||||
|
||||
* Thu Mar 05 2020 Kamil Dudka <kdudka@redhat.com> - 8.32-1
|
||||
- new upstream release 8.32
|
||||
|
||||
* Tue Feb 11 2020 Kamil Dudka <kdudka@redhat.com> - 8.31-10
|
||||
- make upstream test-suite work with root privileges (#1800597)
|
||||
|
||||
* Wed Feb 05 2020 Kamil Dudka <kdudka@redhat.com> - 8.31-9
|
||||
- use upstream fix the cp/proc-short-read test
|
||||
|
||||
* Thu Jan 30 2020 Kamil Dudka <kdudka@redhat.com> - 8.31-8
|
||||
- skip a test that relies on /proc/kallsyms having immutable content
|
||||
|
||||
* Tue Jan 28 2020 Fedora Release Engineering <releng@fedoraproject.org>
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild
|
||||
|
||||
* Thu Oct 17 2019 Kamil Dudka <kdudka@redhat.com> - 8.31-6
|
||||
- temporarily disable the use of statx (#1760300)
|
||||
|
||||
* Fri Oct 11 2019 Kamil Dudka <kdudka@redhat.com> - 8.31-5
|
||||
- use statx instead of stat when available (#1760300)
|
||||
|
||||
* Wed Jul 24 2019 Fedora Release Engineering <releng@fedoraproject.org>
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild
|
||||
|
||||
* Tue Jul 16 2019 Kamil Dudka <kdudka@redhat.com> - 8.31-3
|
||||
- disable flashing in ls colors for broken symbolic links (#1728986)
|
||||
|
||||
* Mon Mar 18 2019 Kamil Dudka <kdudka@redhat.com> - 8.31-2
|
||||
- fix formatting of sha512sum(1) man page (#1688740)
|
||||
|
||||
* Mon Mar 11 2019 Kamil Dudka <kdudka@redhat.com> - 8.31-1
|
||||
- new upstream release 8.31
|
||||
|
||||
* Thu Jan 31 2019 Fedora Release Engineering <releng@fedoraproject.org>
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild
|
||||
|
||||
* Wed Nov 07 2018 Kamil Dudka <kdudka@redhat.com> - 8.30-8
|
||||
- sync: fix open() fallback bug
|
||||
- fix implicit declaration warning in coreutils-getgrouplist.patch
|
||||
|
||||
* Sat Nov 03 2018 Kevin Fenzi <kevin@scrye.com> - 8.30-7
|
||||
- Also remove Requires pre/post used by info scriptlets.
|
||||
|
||||
* Sat Nov 03 2018 Kevin Fenzi <kevin@scrye.com> - 8.30-6
|
||||
- Remove no longer needed info scriptlets
|
||||
|
||||
* Thu Oct 11 2018 Kamil Dudka <kdudka@redhat.com> - 8.30-5
|
||||
- fix heap-based buffer overflow in vasnprintf() (CVE-2018-17942)
|
||||
|
||||
* Thu Jul 12 2018 Fedora Release Engineering <releng@fedoraproject.org> - 8.30-4
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild
|
||||
|
||||
* Tue Jul 10 2018 Kamil Dudka <kdudka@redhat.com> - 8.30-3
|
||||
- rename gnulib's renameat2 to renameatu to avoid clash with glibc (#1598518)
|
||||
|
||||
* Wed Jul 04 2018 Kamil Dudka <kdudka@redhat.com> - 8.30-2
|
||||
- sync i18n patches with Suse (patch by Bernhard Voelker)
|
||||
|
||||
* Mon Jul 02 2018 Kamil Dudka <kdudka@redhat.com> - 8.30-1
|
||||
- new upstream release 8.30
|
||||
|
||||
* Wed May 30 2018 Kamil Dudka <kdudka@redhat.com> - 8.29-12
|
||||
- add provides to coreutils-single to make it a drop-in replacement
|
||||
|
||||
* Mon May 28 2018 Kamil Dudka <kdudka@redhat.com> - 8.29-11
|
||||
- ls: increase the allowed abmon width from 5 to 12 (#1577872)
|
||||
- date, ls: pick strftime fixes from glibc to improve locale support (#1577872)
|
||||
|
||||
* Fri Apr 20 2018 Kamil Dudka <kdudka@redhat.com> - 8.29-10
|
||||
- fix crash caused by mistakenly enabled leaf optimization (#1558249)
|
||||
|
||||
* Fri Mar 23 2018 Kamil Dudka <kdudka@redhat.com> - 8.29-9
|
||||
- make it possible to install the latest available Adobe Reader RPM for Linux
|
||||
|
||||
* Mon Mar 19 2018 Kamil Dudka <kdudka@redhat.com> - 8.29-8
|
||||
- drop BR for bison, which is not used during the build
|
||||
|
||||
* Fri Mar 16 2018 Kamil Dudka <kdudka@redhat.com> - 8.29-7
|
||||
- make sure that parse-datetime.{c,y} ends up in debuginfo (#1555079)
|
||||
|
||||
* Tue Mar 06 2018 Kamil Dudka <kdudka@redhat.com> - 8.29-6
|
||||
- fix build failure with glibc-2.28
|
||||
|
||||
* Mon Feb 26 2018 Igor Gnatenko <ignatenkobrain@fedoraproject.org> - 8.29-5
|
||||
- Remove /bin/* Provides
|
||||
|
||||
* Mon Feb 19 2018 Kamil Dudka <kdudka@redhat.com> - 8.29-4
|
||||
- add explicit BR for the gcc compiler
|
||||
|
||||
* Wed Feb 07 2018 Fedora Release Engineering <releng@fedoraproject.org> - 8.29-3
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild
|
||||
|
||||
* Tue Jan 23 2018 Kamil Dudka <kdudka@redhat.com> - 8.29-2
|
||||
- doc: warn about following symlinks recursively in chown/chgrp (CVE-2017-18018)
|
||||
- mv -n: do not overwrite the destination
|
||||
|
||||
* Tue Jan 02 2018 Kamil Dudka <kdudka@redhat.com> - 8.29-1
|
||||
- new upstream release 8.29
|
||||
|
||||
* Tue Nov 07 2017 Igor Gnatenko <ignatenkobrain@fedoraproject.org> - 8.28-2
|
||||
- Remove very old Provides (mktemp, sh-utils, textwrap, fileutils, stat)
|
||||
|
||||
* Mon Sep 04 2017 Kamil Dudka <kdudka@redhat.com> - 8.28-1
|
||||
- new upstream release 8.28
|
||||
|
||||
* Tue Aug 22 2017 Ville Skyttä <ville.skytta@iki.fi> - 8.27-16
|
||||
- Own the %%{_libexecdir}/coreutils dir
|
||||
|
||||
* Fri Aug 18 2017 Kamil Dudka <kdudka@redhat.com> - 8.27-15
|
||||
- ptx: fix a possible crash caused by integer overflow (#1482445)
|
||||
|
||||
* Wed Aug 02 2017 Fedora Release Engineering <releng@fedoraproject.org> - 8.27-14
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild
|
||||
|
||||
* Fri Jul 28 2017 Igor Gnatenko <ignatenkobrain@fedoraproject.org> - 8.27-13
|
||||
- Enable separate debuginfo back
|
||||
|
||||
* Wed Jul 26 2017 Kamil Dudka <kdudka@redhat.com> - 8.27-12
|
||||
- avoid build failure caused broken RPM code that produces debuginfo packages
|
||||
|
||||
* Wed Jul 26 2017 Fedora Release Engineering <releng@fedoraproject.org> - 8.27-11
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild
|
||||
|
||||
* Tue May 30 2017 Sebastian Kisela <skisela@redhat.com> - 8.27-10
|
||||
- doc: mention `setpriv --no-new-privs` feature in runcon info
|
||||
|
||||
* Tue May 16 2017 Kamil Dudka <kdudka@redhat.com> - 8.27-9
|
||||
- add coreutils-full provides for coreutils to make it explicitly installable
|
||||
|
||||
* Wed May 03 2017 Kamil Dudka <kdudka@redhat.com> - 8.27-8
|
||||
- drop coreutils-overflow.patch no longer needed (#158405)
|
||||
|
||||
* Wed May 03 2017 Kamil Dudka <kdudka@redhat.com> - 8.27-7
|
||||
- drop workaround for already fixed rpm-build bug (#1306559)
|
||||
|
||||
* Wed May 03 2017 Kamil Dudka <kdudka@redhat.com> - 8.27-6
|
||||
- do not mention a deprecated option in localized man pages
|
||||
- drop workaround no longer needed for 10 years old rpm-build bug (#246729)
|
||||
- drop unnecessary uses of %%defattr
|
||||
|
||||
* Fri Apr 28 2017 Sebastian Kisela <skisela@redhat.com> - 8.27-5
|
||||
- tail: revert to polling if a followed directory is replaced (#1283760)
|
||||
|
||||
* Thu Apr 27 2017 Kamil Dudka <kdudka@redhat.com> - 8.27-4
|
||||
- date, touch: fix out-of-bounds write via large TZ variable (CVE-2017-7476)
|
||||
|
||||
* Tue Apr 25 2017 Kamil Dudka <kdudka@redhat.com> - 8.27-3
|
||||
- do not obsolete coreutils-single, so it can be installed by DNF2 (#1444802)
|
||||
|
||||
* Wed Mar 15 2017 Kamil Dudka <kdudka@redhat.com> - 8.27-2
|
||||
- fix spurious build failure caused by the misc/date-debug test
|
||||
|
||||
* Thu Mar 09 2017 Kamil Dudka <kdudka@redhat.com> - 8.27-1
|
||||
- new upstream release 8.27
|
||||
|
||||
* Fri Feb 10 2017 Fedora Release Engineering <releng@fedoraproject.org> - 8.26-7
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild
|
||||
|
||||
* Fri Feb 03 2017 Kamil Dudka <kdudka@redhat.com> - 8.26-6
|
||||
- fold: preserve new-lines in mutlibyte text (#1418505)
|
||||
|
||||
* Mon Jan 23 2017 Kamil Dudka <kdudka@redhat.com> - 8.26-5
|
||||
- date: fix TZ= regression (patch by Pádraig Brady)
|
||||
|
||||
* Mon Jan 02 2017 Kamil Dudka <kdudka@redhat.com> - 8.26-4
|
||||
- use upstream patch for gnulib's test-lock (instead of disabling it)
|
||||
|
||||
* Thu Dec 15 2016 Kamil Dudka <kdudka@redhat.com> - 8.26-3
|
||||
- drop build fixes no longer needed
|
||||
|
||||
* Fri Dec 02 2016 Kamil Dudka <kdudka@redhat.com> - 8.26-2
|
||||
- apply patches automatically to ease maintenance
|
||||
|
||||
* Thu Dec 01 2016 Kamil Dudka <kdudka@redhat.com> - 8.26-1
|
||||
- new upstream release 8.26
|
||||
|
||||
* Mon Oct 31 2016 Kamil Dudka <kdudka@redhat.com> - 8.25-17
|
||||
* Mon Oct 31 2016 Kamil Dudka <kdudka@redhat.com> - 8.25-7
|
||||
- md5sum,sha*sum: fix --ignore-missing with checksums starting with 00
|
||||
|
||||
* Tue Oct 11 2016 Tomáš Mráz <tmraz@redhat.com> - 8.25-16
|
||||
- rebuild with OpenSSL 1.1.0
|
||||
|
||||
* Wed Sep 07 2016 Kamil Dudka <kdudka@redhat.com> - 8.25-15
|
||||
- ls: allow interruption when reading slow directories (#1365933)
|
||||
|
||||
* Tue Jul 19 2016 Kamil Dudka <kdudka@redhat.com> - 8.25-14
|
||||
- run autoreconf in %%prep
|
||||
- drop post-install fix for Japanese locales that no longer applies
|
||||
- fix 'sort -h -k' in locales that use blank as thousands separator (#1355780)
|
||||
|
||||
* Thu Jul 14 2016 Kamil Dudka <kdudka@redhat.com> - 8.25-13
|
||||
- make 'sort -h' work for arbitrary column even when using UTF-8 locales
|
||||
|
||||
* Mon Jul 11 2016 Kamil Dudka <kdudka@redhat.com> - 8.25-12
|
||||
- install -Z now sets default SELinux context for created directories (#1339135)
|
||||
- drop the %%pre scriptlet, which is no longer needed (#1354078)
|
||||
- clarify recognition of "^COLOR.*none" in /etc/DIR_COLORS (#1349579)
|
||||
|
||||
* Thu Jul 07 2016 Jakub Martisko <jamartis@redhat.com> - 8.25-11
|
||||
- switch to UTF8 locale when (un)expand input contains BOM header
|
||||
(#1158494)
|
||||
- fixed regression where (un)expand would end with "long input line"
|
||||
error when BOM header is present
|
||||
|
||||
* Fri Jun 24 2016 Ondrej Vasik <ovasik@redhat.com> - 8.25-10
|
||||
- change way of detection of interactive shell in colorls.sh script
|
||||
(#1321648)
|
||||
|
||||
* Mon Jun 20 2016 Kamil Dudka <kdudka@redhat.com> - 8.25-9
|
||||
- add BR for glibc-langpack-en to prevent the expand/mb test from failing
|
||||
- do not use /bin/mv in %%post to avoid a circular dependency (#1348043)
|
||||
|
||||
* Fri Jun 17 2016 Kamil Dudka <kdudka@redhat.com> - 8.25-8
|
||||
- sync /etc/DIR_COLORS with latest upstream (#1335320)
|
||||
|
||||
* Wed Jun 15 2016 Kamil Dudka <kdudka@redhat.com> - 8.25-7
|
||||
- handle info doc in RPM scriptlets of coreutils-common, which provides it
|
||||
- make sure that the license file is installed, even if coreutils-common is not
|
||||
|
||||
* Thu Jun 09 2016 Jakub Martisko <jamartis@redhat.com> - 8.25-6
|
||||
- (un)expand: fix regression in handling input files, where only
|
||||
the first file was processed.
|
||||
* Tue Jul 12 2016 Jakub Martisko <jamartis@redhat.com> - 8.25-6
|
||||
- (un)expand fix a regression in handling of input files, where only
|
||||
the first file was procesed.
|
||||
|
||||
* Sat Mar 05 2016 Ondrej Vasik <ovasik@redhat.com> - 8.25-5
|
||||
- cut: move back to the old i18n implementation (#1314722)
|
||||
|
|
|
@ -1,36 +0,0 @@
|
|||
commit 7347caeb9d902d3fca2c11f69a55a3e578d93bfe
|
||||
Author: Paul Eggert <eggert@cs.ucla.edu>
|
||||
Date: Wed Apr 20 19:34:57 2022 -0700
|
||||
|
||||
backupfile: fix bug when renaming simple backups
|
||||
|
||||
* lib/backupfile.c (backupfile_internal): Fix bug when RENAME
|
||||
and when doing simple backups. Problem reported by Steve Ward in:
|
||||
https://bugs.gnu.org/55029
|
||||
|
||||
diff --git a/lib/backupfile.c b/lib/backupfile.c
|
||||
index 1e9290a187..d9f465a3e0 100644
|
||||
--- a/lib/backupfile.c
|
||||
+++ b/lib/backupfile.c
|
||||
@@ -332,7 +332,7 @@ backupfile_internal (int dir_fd, char const *file,
|
||||
return s;
|
||||
|
||||
DIR *dirp = NULL;
|
||||
- int sdir = AT_FDCWD;
|
||||
+ int sdir = dir_fd;
|
||||
idx_t base_max = 0;
|
||||
while (true)
|
||||
{
|
||||
@@ -371,10 +371,9 @@ backupfile_internal (int dir_fd, char const *file,
|
||||
if (! rename)
|
||||
break;
|
||||
|
||||
- int olddirfd = sdir < 0 ? dir_fd : sdir;
|
||||
- idx_t offset = sdir < 0 ? 0 : base_offset;
|
||||
+ idx_t offset = backup_type == simple_backups ? 0 : base_offset;
|
||||
unsigned flags = backup_type == simple_backups ? 0 : RENAME_NOREPLACE;
|
||||
- if (renameatu (olddirfd, file + offset, sdir, s + offset, flags) == 0)
|
||||
+ if (renameatu (sdir, file + offset, sdir, s + offset, flags) == 0)
|
||||
break;
|
||||
int e = errno;
|
||||
if (! (e == EEXIST && extended))
|
Binary file not shown.
4
sources
4
sources
|
@ -1,2 +1,2 @@
|
|||
SHA512 (coreutils-9.1.tar.xz.sig) = 9f0766531afd4faa3e2c337730f61db55605cf06729e9c61f644594883732c2e0b1ddb0005b492be309c53e6f45b8ff875398163a48699d52517ea49e9bdbc91
|
||||
SHA512 (coreutils-9.1.tar.xz) = a6ee2c549140b189e8c1b35e119d4289ec27244ec0ed9da0ac55202f365a7e33778b1dc7c4e64d1669599ff81a8297fe4f5adbcc8a3a2f75c919a43cd4b9bdfa
|
||||
070e43ba7f618d747414ef56ab248a48 coreutils-8.25.tar.xz
|
||||
eb5694f81fd88ccf16b68ed80935b10f coreutils-8.25.tar.xz.sig
|
||||
|
|
|
@ -1,7 +1,5 @@
|
|||
%{_bindir}/arch
|
||||
%{_bindir}/b2sum
|
||||
%{_bindir}/basename
|
||||
%{_bindir}/basenc
|
||||
%{_bindir}/cat
|
||||
%{_bindir}/chgrp
|
||||
%{_bindir}/chmod
|
||||
|
|
|
@ -1,63 +0,0 @@
|
|||
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
#
|
||||
# Makefile of /CoreOS/coreutils/readlink-cannot-handle-recursive-symlink s
|
||||
# Description: Test for readlink cannot handle recursive symlinks
|
||||
# Author: Jan Scotka <jscotka@redhat.com>
|
||||
#
|
||||
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
#
|
||||
# Copyright (c) 2010 Red Hat, Inc. All rights reserved.
|
||||
#
|
||||
# This copyrighted material is made available to anyone wishing
|
||||
# to use, modify, copy, or redistribute it subject to the terms
|
||||
# and conditions of the GNU General Public License version 2.
|
||||
#
|
||||
# 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., 51 Franklin Street, Fifth Floor,
|
||||
# Boston, MA 02110-1301, USA.
|
||||
#
|
||||
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
export TEST=/CoreOS/coreutils/readlink-cannot-handle-recursive-symlinks
|
||||
export TESTVERSION=1.0
|
||||
|
||||
BUILT_FILES=
|
||||
|
||||
FILES=$(METADATA) runtest.sh Makefile PURPOSE
|
||||
|
||||
.PHONY: all install download clean
|
||||
|
||||
run: $(FILES) build
|
||||
./runtest.sh
|
||||
|
||||
build: $(BUILT_FILES)
|
||||
chmod a+x runtest.sh
|
||||
|
||||
clean:
|
||||
rm -f *~ $(BUILT_FILES)
|
||||
|
||||
|
||||
include /usr/share/rhts/lib/rhts-make.include
|
||||
|
||||
$(METADATA): Makefile
|
||||
@echo "Owner: Jan Scotka <jscotka@redhat.com>" > $(METADATA)
|
||||
@echo "Name: $(TEST)" >> $(METADATA)
|
||||
@echo "TestVersion: $(TESTVERSION)" >> $(METADATA)
|
||||
@echo "Path: $(TEST_DIR)" >> $(METADATA)
|
||||
@echo "Description: Test for readlink cannot handle recursive symlinks" >> $(METADATA)
|
||||
@echo "Type: Sanity" >> $(METADATA)
|
||||
@echo "TestTime: 5m" >> $(METADATA)
|
||||
@echo "RunFor: coreutils" >> $(METADATA)
|
||||
@echo "Requires: coreutils" >> $(METADATA)
|
||||
@echo "Priority: Normal" >> $(METADATA)
|
||||
@echo "License: GPLv2" >> $(METADATA)
|
||||
@echo "Confidential: no" >> $(METADATA)
|
||||
@echo "Destructive: no" >> $(METADATA)
|
||||
|
||||
rhts-lint $(METADATA)
|
|
@ -1,54 +0,0 @@
|
|||
PURPOSE of /CoreOS/coreutils/readlink-cannot-handle-recursive-symlinks
|
||||
Description: Test for readlink cannot handle recursive symlinks
|
||||
Author: Jan Scotka <jscotka@redhat.com>
|
||||
Bug summary: readlink cannot handle recursive symlinks
|
||||
|
||||
Description:
|
||||
|
||||
Description of problem:
|
||||
The readlink command fails with an error "Too many levels of symbolic links", even if there are only 2 levels.
|
||||
|
||||
The readlink command from RHEL 3 and RHEL 4 and from Fedora 11 all work fine.
|
||||
|
||||
Among other changes between RHEL 4 and RHEL 5, RHEL 5's coreutils added calls to cycle_check() in lib/canonicalize.c, but in upstream canonicalize.c (now in gnulib instead of coreutils), we see the comment:
|
||||
/* Detect loops. We cannot use the cycle-check module here,
|
||||
since it's actually possible to encounter the same symlink
|
||||
more than once in a given traversal. However, encountering
|
||||
the same symlink,NAME pair twice does indicate a loop. */
|
||||
|
||||
http://git.savannah.gnu.org/gitweb/?p=gnulib.git;a=blob;f=lib/canonicalize.c;h=4f348398fd69ae516396313d18ac294a4ca3dde3;hb=b653eda3ac4864de205419d9f41eec267cb89eeb#l262
|
||||
|
||||
The latest canonicalize.c uses seen_triple() instead of cycle_check().
|
||||
|
||||
|
||||
Version-Release number of selected component (if applicable):
|
||||
coreutils-5.97-19.el5
|
||||
|
||||
How reproducible:
|
||||
every time
|
||||
|
||||
Steps to Reproduce:
|
||||
1. Create a directory with a symlink to itself
|
||||
mkdir /tmp/dir
|
||||
cd /tmp/dir
|
||||
ln -s ../dir dirlink
|
||||
|
||||
2. Run readlink using the 'dirlink' symlink recursively
|
||||
readlink -v -f dirlink
|
||||
readlink -v -f dirlink/dirlink
|
||||
readlink -v -f dirlink/dirlink/dirlink
|
||||
|
||||
Actual results:
|
||||
The first readlink command on just dirlink succeeds, but the 2nd and 3rd commands fail with
|
||||
readlink: dirlink/dirlink: Too many levels of symbolic links
|
||||
|
||||
Expected results:
|
||||
$ readlink -v -f dirlink
|
||||
/tmp/dir
|
||||
$ readlink -v -f dirlink/dirlink
|
||||
/tmp/dir
|
||||
$ readlink -v -f dirlink/dirlink/dirlink
|
||||
/tmp/dir
|
||||
|
||||
|
||||
Additional info:
|
|
@ -1,60 +0,0 @@
|
|||
#!/bin/bash
|
||||
# vim: dict=/usr/share/beakerlib/dictionary.vim cpt=.,w,b,u,t,i,k
|
||||
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
#
|
||||
# runtest.sh of /CoreOS/coreutils/readlink-cannot-handle-recursive-symlinks
|
||||
# Description: Test for readlink cannot handle recursive symlinks
|
||||
# Author: Jan Scotka <jscotka@redhat.com>
|
||||
#
|
||||
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
#
|
||||
# Copyright (c) 2010 Red Hat, Inc. All rights reserved.
|
||||
#
|
||||
# This copyrighted material is made available to anyone wishing
|
||||
# to use, modify, copy, or redistribute it subject to the terms
|
||||
# and conditions of the GNU General Public License version 2.
|
||||
#
|
||||
# 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., 51 Franklin Street, Fifth Floor,
|
||||
# Boston, MA 02110-1301, USA.
|
||||
#
|
||||
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
# Include rhts environment
|
||||
. /usr/bin/rhts-environment.sh
|
||||
. /usr/lib/beakerlib/beakerlib.sh
|
||||
|
||||
PACKAGE="coreutils"
|
||||
|
||||
rlJournalStart
|
||||
rlPhaseStartSetup
|
||||
rlAssertRpm $PACKAGE
|
||||
rlRun "TmpDir=\`mktemp -d\`" 0 "Creating tmp directory"
|
||||
rlRun "pushd $TmpDir"
|
||||
rlRun "mkdir link" 0 "Creating test directory"
|
||||
rlRun "cd link" 0 "cd to this dir"
|
||||
rlRun "ln -s ../link link" 0 "creating symlink to ../link -> link"
|
||||
rlPhaseEnd
|
||||
|
||||
rlPhaseStartTest
|
||||
rlLog "Test of readlink up to 20 iteration"
|
||||
export TMPVAR="link"
|
||||
for foo in `seq 20`
|
||||
do echo $TMPVAR
|
||||
rlRun "readlink -v -f $TMPVAR" 0 "readlink of $TMPVAR"
|
||||
TMPVAR="$TMPVAR/link"
|
||||
done
|
||||
rlPhaseEnd
|
||||
|
||||
rlPhaseStartCleanup
|
||||
rlRun "popd"
|
||||
rlRun "rm -r $TmpDir" 0 "Removing tmp directory"
|
||||
rlPhaseEnd
|
||||
rlJournalPrintText
|
||||
rlJournalEnd
|
|
@ -1,39 +0,0 @@
|
|||
#!/bin/sh
|
||||
|
||||
# Checks that touch ls rm and foo work
|
||||
# https://www.mankier.com/1/beakerlib#Examples
|
||||
. /usr/share/beakerlib/beakerlib.sh
|
||||
|
||||
# Set the full test name
|
||||
TEST="/examples/beakerlib/Sanity/phases"
|
||||
|
||||
# Package being tested
|
||||
PACKAGE="coreutils"
|
||||
|
||||
rlJournalStart
|
||||
# Setup phase: Prepare test directory
|
||||
rlPhaseStartSetup
|
||||
rlAssertRpm $PACKAGE
|
||||
rlRun 'TmpDir=$(mktemp -d)' 0 'Creating tmp directory' # no-reboot
|
||||
rlRun "pushd $TmpDir"
|
||||
rlPhaseEnd
|
||||
|
||||
# Test phase: Testing touch, ls and rm commands
|
||||
rlPhaseStartTest
|
||||
rlRun "touch foo" 0 "Creating the foo test file"
|
||||
rlAssertExists "foo"
|
||||
rlRun "ls -l foo" 0 "Listing the foo test file"
|
||||
rlRun "rm foo" 0 "Removing the foo test file"
|
||||
rlAssertNotExists "foo"
|
||||
rlRun "ls -l foo" 2 "Listing foo should now report an error"
|
||||
rlPhaseEnd
|
||||
|
||||
# Cleanup phase: Remove test directory
|
||||
rlPhaseStartCleanup
|
||||
rlRun "popd"
|
||||
rlRun "rm -r $TmpDir" 0 "Removing tmp directory"
|
||||
rlPhaseEnd
|
||||
rlJournalEnd
|
||||
|
||||
# Print the test report
|
||||
rlJournalPrintText
|
|
@ -1,9 +0,0 @@
|
|||
---
|
||||
# This first play always runs on the local staging system
|
||||
- hosts: localhost
|
||||
tags:
|
||||
- atomic
|
||||
- classic
|
||||
- container
|
||||
roles:
|
||||
- { role: standard-test-beakerlib, tests: [ test-basics, readlink-cannot-handle-recursive-symlinks ] }
|
|
@ -1,2 +0,0 @@
|
|||
# Fedora Continuous Integration: https://fedoraproject.org/wiki/CI
|
||||
- include: test_basics.yml
|
|
@ -0,0 +1,123 @@
|
|||
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||
Version: GnuPG v1.4.6 (GNU/Linux)
|
||||
|
||||
mQGiBDftyYoRBACvICTt5AWe7kdbRtJ37IZ+ED5tBA/IbISfqUPO+HmL/J9JSfkV
|
||||
QHbdQR5dj5mrU6BY5YOY7L4KOS6lH3AgvsZ/NhkDBraBPgnMkpDqFb7z4keCIebb
|
||||
AmlcBL2VQNTo0Lczo319YoZ+UaNH53OddlBY944qBTa0AlcJuS1SgEp7pwCg+CUj
|
||||
4SjVzqZh5lgPTS0bnYvF/n0D/iItZ7WAm37KW+9UjArWZD6NO+mVMNq4GWmhcSBD
|
||||
uyJOZFxFQWXdFRdM9sNO7lkWYVCxpXyFzmQcBzdrAt+zx/3QadEbduGAqEKAROQU
|
||||
gSDlMITWGK97/Cadn1YRSDcGKNlJX9jlJvt5Q/xh+CnJ8HTwO0PF9A5N/phFuMMB
|
||||
UH0pA/0e5eIBsr2Wvxy39+nGnNv5b+5tHkGXSSHKyI7+zOdIBTtRQO7lwTG9ioKg
|
||||
/yMqb9NCSf4GdyZiFJsQ+TWoSyk1bvFHt7YUOhTeii7Zgbk7Due2q+b9KzzyH/r2
|
||||
kf+fLh0lgiy/LfBhvsfO8M9dji3XDyZpBLRO6gda9M9NqzEfgbQfSmltIE1leWVy
|
||||
aW5nIDxqaW1AbWV5ZXJpbmcubmV0PohGBBARAgAGBQI9TvsUAAoJENoowjp5/0R0
|
||||
NTIAn2qpRF9QVupw/gz4UN5d5MKurlOMAKDNXKfXzWClHRq5ufCdwZead3WMMYhG
|
||||
BBARAgAGBQJCk1gpAAoJEIvYLm8wuUtcqlIAn0KbOC5YSkgqhfhM1uRlHnvHB74A
|
||||
AJ4qbzrkw7iitd1CH1eoMoFiP5CI14hGBBARAgAGBQJDYmg2AAoJELk/YMa1xM4T
|
||||
ct0AoJIkdqI6dhTUDOVwiZRxaCKVYaoNAJsG8I+OPhhRhe7ZgN5iN3xlRfkhTohG
|
||||
BBARAgAGBQJECHuEAAoJEFQUZr6xLcGbUyQAnRmg070gGrZ5E4ZPJRqL/DUoB7hN
|
||||
AKCj7uAIpcRdrBAQW8PKiOWcPRvxjohGBBIRAgAGBQI/bJ2IAAoJEA6nVrUUSEP1
|
||||
QXoAoJ6dMlvbJUep2l5N8G0XFmRyxTrIAJ0bn5IYu7RMxqI0vv6DHn2VgEQLeohG
|
||||
BBIRAgAGBQI/vFVMAAoJENKUXDvBNlC2gtYAn1zlWvzZaC2lxRXuW7fMWpB/5uVJ
|
||||
AJ9RFEFFzl8BktsnskYJUIvrx5zVL4hGBBMRAgAGBQI/UFjyAAoJEDhZwDsuI25H
|
||||
z80An0G2Xm22lMc7ThGGgKeovGP0GzPIAKCHFH2aY2Dv6XOYomNB1yvW7MU0ZIhG
|
||||
BBMRAgAGBQI/cfsiAAoJEA3cqjJ41SZOmcoAoKulkHQ6TUVORoSN77UYtrdCKy0I
|
||||
AKC5qT7peM0Jd6I9wPLwc7Fc65xraIhGBBMRAgAGBQJAmOELAAoJEAu1FKXQbtaf
|
||||
ysgAoL7Zl3BSH+/F9ouPCXkduzIywdx9AJ9OevRoJwxpER+SwSiLnw9Q7fVmcYhX
|
||||
BBMRAgAXBQI66oJOBQsHCgMEAxUDAgMWAgECF4AACgkQ/dLerNMzy6HlawCg5UXJ
|
||||
LGWj9P0SuJKcGm+mqKb1J2MAn3YrgB3duqFNs/yS4mvxM74TzI5miFoEExECABoF
|
||||
CwcKAwQDFQMCAxYCAQIXgAIZAQUCOuqCTwAKCRD90t6s0zPLoaVVAJ0UZOyi+B+q
|
||||
cNTEDSDrc3Oc1MzZrQCg0UONeu4Dv4N5ZLI6lZBMZETaCmKIXwQTEQIAFwUCOuqC
|
||||
TgULBwoDBAMVAwIDFgIBAheAABIJEP3S3qzTM8uhB2VHUEcAAQHlawCg5UXJLGWj
|
||||
9P0SuJKcGm+mqKb1J2MAn3YrgB3duqFNs/yS4mvxM74TzI5miGIEExECABoFCwcK
|
||||
AwQDFQMCAxYCAQIXgAIZAQUCOuqCTwASCRD90t6s0zPLoQdlR1BHAAEBpVUAnRRk
|
||||
7KL4H6pw1MQNIOtzc5zUzNmtAKDRQ4167gO/g3lksjqVkExkRNoKYrQfSmltIE1l
|
||||
eWVyaW5nIDxtZXllcmluZ0BnbnUub3JnPohGBBARAgAGBQJCk1gsAAoJEIvYLm8w
|
||||
uUtcHS0AoIO9LsaLdn6aH3fskRVZ4qhpRBXbAJ0drV2s3abBKhkhUui7kpF87MTD
|
||||
+4hGBBARAgAGBQJDYmg8AAoJELk/YMa1xM4TdT4Ani/0ORxwCzqGT0+BG2thzbO7
|
||||
aFkuAKCoKP+u6WhYYOBdEcaM6T5QLN56H4hGBBARAgAGBQJECHuHAAoJEFQUZr6x
|
||||
LcGbrKEAoLef0BqLLpNGhAFJKSAvWEWOiGcxAJ9w7F7MtsDoegKeQ44yYiPX5jEu
|
||||
5ohGBBIRAgAGBQI/bJ2IAAoJEA6nVrUUSEP13sUAn3IWX1RWnH50v+DZKcqzCaSA
|
||||
oqHbAKCVvtirU/A3FJLnuyIBv+lguddi2IhGBBIRAgAGBQI/vFVRAAoJENKUXDvB
|
||||
NlC2D68AnAzm1iw0YSQ1GuPaU3lG8n72p5EBAJ4pNBP+RFWjvZSfcUYhZAFhq8CB
|
||||
QYhGBBMRAgAGBQI/cfslAAoJEA3cqjJ41SZO8asAnRsJcSER+vpIIzM/et8PakIC
|
||||
ZJxsAJ9LjdnHkb+Zr9YDXzKXu6OTiJvIh4hGBBMRAgAGBQJAmOEOAAoJEAu1FKXQ
|
||||
btafLL8AoJask7aB+OfOQgS/kMlKXAA25Hl3AKC/3XJeRRR0ze508VcIhx7EhYVV
|
||||
84heBBMRAgAeBQI/UFjBAhsDBgsJCAcDAgMVAgMDFgIBAh4BAheAAAoJEP3S3qzT
|
||||
M8uh8gwAoLfqQt7QgzavHlD44LxmAXovm5t0AJ4m8EQC+N9oJyODmpLbfQKNL6pq
|
||||
zohmBBMRAgAeBQI/UFjBAhsDBgsJCAcDAgMVAgMDFgIBAh4BAheAABIJEP3S3qzT
|
||||
M8uhB2VHUEcAAQHyDACgt+pC3tCDNq8eUPjgvGYBei+bm3QAnibwRAL432gnI4Oa
|
||||
ktt9Ao0vqmrOtCFKaW0gTWV5ZXJpbmcgPG1leWVyaW5nQHBvYm94LmNvbT6IRgQQ
|
||||
EQIABgUCQpNYLAAKCRCL2C5vMLlLXP7FAKCodISH72q8e30TxLwdoOh7hDjehACf
|
||||
U97FCEOWICQaEI2BvOzGzn6yrO6IRgQQEQIABgUCQ2JoPAAKCRC5P2DGtcTOE0Gk
|
||||
AJ43felw+/nxzJ7DVJYZ0tbASZ3BcACeNf2nXMkqkwrBZZ9DDMUGQ6tIB3GIRgQQ
|
||||
EQIABgUCRAh7hwAKCRBUFGa+sS3Bm1nUAJ0foaMmGWqugETz37RZ2XpCfdQIlQCe
|
||||
N50WxYPBxrGGmhhGOVbji1uhVSmIRgQSEQIABgUCP2ydiAAKCRAOp1a1FEhD9T73
|
||||
AJ4/51C6L0lHrX77DFXVJrB02yybsACgi/9TewF7HaF3x8fdMEZxsRK1HR+IRgQS
|
||||
EQIABgUCP7xVUQAKCRDSlFw7wTZQtvjnAJ9FM83LyrTs2Dk/T7kOcSFTfjXqegCe
|
||||
OlpOQ/sB4EtoHxrTSCy3OhToVsmIRgQTEQIABgUCP1BY+wAKCRA4WcA7LiNuR5yI
|
||||
AJ9F3RsjjwtYX2rSx+j5o4+y4Dyl9wCfVR9uTBDLDP3kOaDrTT/H9XHTf6uIRgQT
|
||||
EQIABgUCP3H7JQAKCRAN3KoyeNUmTv4eAJ9rCBUUXWYFUrjUayOenPULMW1BhACg
|
||||
ncwdeTN+SGy8lX3zoo1vdNv+vTKIRgQTEQIABgUCQJjhDgAKCRALtRSl0G7WnyNP
|
||||
AJ9Gn9yRup0zePUPMex36fX94o+i8wCggdDgtpKjzcaQ83o8VBiemFeiss+IXAQT
|
||||
EQIAHAUCPjpzhwIbAwQLBwMCAxUCAwMWAgECHgECF4AACgkQ/dLerNMzy6FG5gCg
|
||||
99D5pDqSRuZP2QJAT8LNiCZlRGgAn25OTXbNlHkM+gYFj0fyo+Ikj+T5iGQEExEC
|
||||
ABwFAj46c4cCGwMECwcDAgMVAgMDFgIBAh4BAheAABIJEP3S3qzTM8uhB2VHUEcA
|
||||
AQFG5gCg99D5pDqSRuZP2QJAT8LNiCZlRGgAn25OTXbNlHkM+gYFj0fyo+Ikj+T5
|
||||
tCJKaW0gTWV5ZXJpbmcgPG1leWVyaW5nQGFzY2VuZC5jb20+iEYEEBECAAYFAkKT
|
||||
WCwACgkQi9gubzC5S1zwAQCgnPUCCl1g6eJdI5ZViACDiaaULAAAn19sIyQmkiaU
|
||||
45QVcDtYuQTNSh/QiEYEEBECAAYFAkNiaDwACgkQuT9gxrXEzhP+igCfc526l8n/
|
||||
q8zVhIe9NonG+jVlrEoAnRXKebriKwmvVSdqbY8khlbJjB/ziEYEEBECAAYFAkQI
|
||||
e4cACgkQVBRmvrEtwZs2owCgwzEOLdyXa2JGA/xkpBluqa8/UyMAnjZyxESMAj/A
|
||||
2rUg3IvgtBmaetE4iEYEEhECAAYFAj+8VVEACgkQ0pRcO8E2ULaqIQCfQlbRoDOL
|
||||
Hv+9YVxPgD8yhwFB850AnRTmAG4Z57YD92s4o1ne9sgaufmdiEYEExECAAYFAj9Q
|
||||
WPsACgkQOFnAOy4jbkfOoQCgwfC1mkANwR+vv9TVlYkmoZ6wNL8An0dql+uy5ic1
|
||||
YpyKfV7g7MMuEMDwiEYEExECAAYFAj9x+yUACgkQDdyqMnjVJk6QCwCglS7PPvFR
|
||||
HoOZxl7XgpVbAK6vZQgAniVxncBgSu06lmsDNHiJpiDMIZkkiEYEExECAAYFAkCY
|
||||
4Q4ACgkQC7UUpdBu1p+QqwCeNzsozeUjiCFQBBiR+gCBnvZhQqgAnj4ImXyp45hs
|
||||
fc3dZHP3qB1Ws5UjiFUEExECABUFAjftyYoDCwoDAxUDAgMWAgECF4AACgkQ/dLe
|
||||
rNMzy6HnugCePkbs7JcEo0837WNqdoGf2WXL3vIAoK0cStFCa4zj4FV/SoG9cDZP
|
||||
JOzfiF0EExECABUFAjftyYoDCwoDAxUDAgMWAgECF4AAEgkQ/dLerNMzy6EHZUdQ
|
||||
RwABAee6AJ4+RuzslwSjTzftY2p2gZ/ZZcve8gCgrRxK0UJrjOPgVX9Kgb1wNk8k
|
||||
7N+0IkppbSBNZXllcmluZyA8bWV5ZXJpbmdAbHVjZW50LmNvbT6IRQQTEQIABgUC
|
||||
QJjhDgAKCRALtRSl0G7Wn/YLAJdAhf8twtaImmHzRT7eaUIf0b4+AJ9hRfAjWrRp
|
||||
UF5cW5AzZsVwEW7Vc4hGBBARAgAGBQJCk1gsAAoJEIvYLm8wuUtceyMAoJGYrqPm
|
||||
T+ThNBRLt5aIq/p3yBHmAJ0V0tEMjdIafWlY6IDZkst2VXBPFohGBBARAgAGBQJD
|
||||
Ymg8AAoJELk/YMa1xM4TTxEAnAtkRTdyDNdPn5kW3HMKcQp9S02vAJ9wiBJbBeaB
|
||||
jGcQ4zoafo0vw8ZMi4hGBBARAgAGBQJECHuHAAoJEFQUZr6xLcGbZi4AoK2Th3Pi
|
||||
pC+CWdYDCA9qNa+uUkHsAKCHUU/oOSEqvjEHoYs22RZzVGbbVohGBBIRAgAGBQI/
|
||||
vFVRAAoJENKUXDvBNlC2qQ0An3hiEeuqRgzbuY6YLqiA9FH0GHEEAJ4j2O8AjZFq
|
||||
Vc8RL32KA6nuwfJ28ohGBBMRAgAGBQI/UFj7AAoJEDhZwDsuI25HPicAoJOlcGaT
|
||||
t5dvksbBg00BNCyZl8odAJ0UCIFlFzzB/x050scZKMrvquc2T4hGBBMRAgAGBQI/
|
||||
cfslAAoJEA3cqjJ41SZO5mQAoLTvGtjJxspvgEg3z3T/q6iI/FdxAJ4wgnqQjRvm
|
||||
AHAWMibcDupPA10u+ohVBBMRAgAVBQI37e/HAwsKAwMVAwIDFgIBAheAAAoJEP3S
|
||||
3qzTM8uh8vAAn23cUtWPdFr4wIwUNo9bsY1CUHMNAKCoHS3nayqM/WUfihcZJoOs
|
||||
kQA22ohdBBMRAgAVBQI37e/HAwsKAwMVAwIDFgIBAheAABIJEP3S3qzTM8uhB2VH
|
||||
UEcAAQHy8ACfbdxS1Y90WvjAjBQ2j1uxjUJQcw0AoKgdLedrKoz9ZR+KFxkmg6yR
|
||||
ADbatCdKaW0gTWV5ZXJpbmcgPG1leWVyaW5nQG5hLW5ldC5vcm5sLmdvdj6IRgQQ
|
||||
EQIABgUCPU77FAAKCRDaKMI6ef9EdBjQAJ41hqQaE3W2dHgN9otb7fL0n6U1YACg
|
||||
kI9DvFQ1YmpLI8jdGwbDxDodAeOIRgQQEQIABgUCQpNYLAAKCRCL2C5vMLlLXMrg
|
||||
AJ90LwV+nd+U4GEvzYixFvksHvtFGgCggD3NDeGXlgUhPB+nqyBq2QKfZxKIRgQQ
|
||||
EQIABgUCQ2JoPAAKCRC5P2DGtcTOE4WfAJ4uxTyLyO4NCBk/IlTM0NAKLFHJgwCc
|
||||
DP0YQC0oDm5uJ8/ZIkl0MUrzKXGIRgQQEQIABgUCRAh7hwAKCRBUFGa+sS3BmyTW
|
||||
AJ4+X1CGNorq+Nme5tTIVskgYKH7wQCcD7UpPt2+r+NcGSYftkKk3O8R8TKIRgQS
|
||||
EQIABgUCP7xVUQAKCRDSlFw7wTZQtolWAJ98yLyyC6jzrF/YG5kqeGqHSNdKtQCd
|
||||
EdCDkGG09QJX8gFfZ/r8lWlflj+IRgQTEQIABgUCP1BY+wAKCRA4WcA7LiNuR4mz
|
||||
AKC/1XBB9cBCs8X/KvoLLQP75q0i2QCbBb0UoVSUYgsdETzujbTwg+0HLseIRgQT
|
||||
EQIABgUCP3H7JQAKCRAN3KoyeNUmTql1AJsEhcfoOC2U4JjHR6rWzqinaIxcNgCg
|
||||
lmdHMQ3L8zCfNzD7lehquPy2P0eIRgQTEQIABgUCQJjhDgAKCRALtRSl0G7Wn+1r
|
||||
AJ4nUVrAEtL+XBp2UU1QmVCxa7lcSwCfT8ds7xZ++aZomPK2Xvz230WnUsGIVQQT
|
||||
EQIAFQUCN+3v9gMLCgMDFQMCAxYCAQIXgAAKCRD90t6s0zPLocAwAKCJ4wBEND4W
|
||||
mzs6Sp47mWBsp96HRACfTH+SGkDfLqgkZ7JgEgzSDKGl4TyIXQQTEQIAFQUCN+3v
|
||||
9gMLCgMDFQMCAxYCAQIXgAASCRD90t6s0zPLoQdlR1BHAAEBwDAAoInjAEQ0Phab
|
||||
OzpKnjuZYGyn3odEAJ9Mf5IaQN8uqCRnsmASDNIMoaXhPLkBDQQ37cmSEAQAx3xz
|
||||
BZlJikWJaiZGru3cEKYYnRFp8No2b4jhBwY9nKn8UIxuY5aQN4ka/k81wqjlC6cT
|
||||
wn5R7kg2ha8eGXpwYhKGwn5MGvIxqfoj2tsQ76uluTowHA4seoavi7RGEDzm4Vpt
|
||||
8Nua8krrZ2QPtLA86gkzL1QG5Bbv/o2Ldx8HHNcAAwcEAKcK2tj2X8RPgUarczXv
|
||||
rdXMteeSFnI7fagbLpEfaTI2xa1ADLg5UO4M9Erz9m6k6xV6loxcBB9H5Ljm9GWf
|
||||
el4T4p1lwzi3Lu5hKzIiFs+5vsy+fyEai4e5f6v9Ww3Q3Ec6UZpPZGyN+PDPlZxe
|
||||
rf3ZIMogSGrrEBhprhLHReudiE4EGBECAAYFAjftyZIAEgkQ/dLerNMzy6EHZUdQ
|
||||
RwABAQXiAKCilmALgD6mhccl4ISaUB5LfW74BQCgqd7wIfbV2+NKqf1Yuj75sryW
|
||||
Ke4=
|
||||
=zRdO
|
||||
-----END PGP PUBLIC KEY BLOCK-----
|
Loading…
Reference in New Issue