diff --git a/coreutils-8.21.de.po.xz b/coreutils-8.21.de.po.xz deleted file mode 100644 index c5a3891..0000000 --- a/coreutils-8.21.de.po.xz +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:4b28dba154ded8117dc043125a7e0fae2e7b613a7d287c46e9faa6866a81d377 -size 102904 diff --git a/coreutils-8.21.tar.xz b/coreutils-8.21.tar.xz deleted file mode 100644 index 393b16d..0000000 --- a/coreutils-8.21.tar.xz +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:adaa44bdab3fa5eb352e80d8a31fdbf957b78653d0c2cd30d63e161444288e18 -size 5357988 diff --git a/coreutils-8.22.tar.xz b/coreutils-8.22.tar.xz new file mode 100644 index 0000000..d10625b --- /dev/null +++ b/coreutils-8.22.tar.xz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5b3e94998152c017e6c75d56b9b994188eb71bf46d4038a642cb9141f6ff1212 +size 5335124 diff --git a/coreutils-build-timeout-as-pie.patch b/coreutils-build-timeout-as-pie.patch index c65d89a..87f2b08 100644 --- a/coreutils-build-timeout-as-pie.patch +++ b/coreutils-build-timeout-as-pie.patch @@ -16,8 +16,8 @@ independent executable (PIE). This is enforced via RPMLINT. Index: src/local.mk =================================================================== ---- src/local.mk.orig -+++ src/local.mk +--- src/local.mk.orig 2014-01-03 18:18:24.193893522 +0100 ++++ src/local.mk 2014-01-03 19:47:24.269617498 +0100 @@ -17,7 +17,7 @@ ## along with this program. If not, see . @@ -27,7 +27,7 @@ Index: src/local.mk # The list of all programs (separated in different variables to express # the how and when they should be installed) is defined in this makefile -@@ -266,6 +266,9 @@ src_factor_LDADD += $(LIB_GMP) +@@ -271,6 +271,9 @@ src_factor_LDADD += $(LIB_GMP) # for getloadavg src_uptime_LDADD += $(GETLOADAVG_LIBS) diff --git a/coreutils-gnulib-tests-fix-nap-race-obs.patch b/coreutils-gnulib-tests-fix-nap-race-obs.patch deleted file mode 100644 index bfd50ec..0000000 --- a/coreutils-gnulib-tests-fix-nap-race-obs.patch +++ /dev/null @@ -1,37 +0,0 @@ -From: Bernhard Voelker -Date: Mon, 20 May 2013 00:03:20 +0200 -Subject: [PATCH] tests/nap.h: increase delay multiplier to avoid problems in - VMs like OBS - -The gnulib change http://git.sv.gnu.org/cgit/gnulib.git/commit/?id=5191133e -(available upstreams with >= 8.22, applied to openSUSE's coreutils -package with "coreutils-gnulib-tests-fix-nap-race.patch", decreased the -probability of lost races to about a third, however such problems could -still be observed in virtual machines like OBS. -Increasing the factor from 1.125 to 3 seems to close the race window. - -* tests/nap.h (nap): Change the multiplier for the delay from 1.125 -to 3. - ---- - gnulib-tests/nap.h | 6 ++++-- - 1 file changed, 4 insertions(+), 2 deletions(-) - -Index: gnulib-tests/nap.h -=================================================================== ---- gnulib-tests/nap.h.orig -+++ gnulib-tests/nap.h -@@ -126,9 +126,11 @@ nap (void) - - /* Multiply by 1.125 (rounding up), to avoid problems if the - file system's clock is a bit slower than nanosleep's. -+ OBS: use 3 as multiplier to avoid this race a bit better -+ which is even more likely in VMs. - Ceiling it at INT_MAX, though. */ -- int delta = (d >> 3) + ((d & 7) != 0); -- d = delta < INT_MAX - d ? d + delta : INT_MAX; -+ int d2 = 3 * d; -+ d = d2 < INT_MAX ? d2 : INT_MAX; - delay.tv_sec = d / 1000000000; - delay.tv_nsec = d % 1000000000; - } diff --git a/coreutils-gnulib-tests-fix-nap-race.patch b/coreutils-gnulib-tests-fix-nap-race.patch deleted file mode 100644 index f4e1fe1..0000000 --- a/coreutils-gnulib-tests-fix-nap-race.patch +++ /dev/null @@ -1,1071 +0,0 @@ -From: Bernhard Voelker -Date: Mon, 20 May 2013 00:03:20 +0200 -Subject: [PATCH] gnulib-tests: utimensat-tests, etc.: try to fix some races - -Some nap()-related tests often fail in OBS. -Cherry-pick the following attempt to avoid some races from -upstream gnulib: -http://git.sv.gnu.org/cgit/gnulib.git/commit/?id=5191133e -To be removed with coreutils-8.22. - ---- - ChangeLog | 5 + - Makefile.in | 7 +- - aclocal.m4 | 1 - configure | 99 --------------------------------- - gnulib-tests/Makefile.in | 126 ++++++++++++++++++------------------------ - gnulib-tests/gnulib.mk | 33 +++-------- - gnulib-tests/nap.h | 113 ++++++++++++++++++++++++------------- - gnulib-tests/test-stat-time.c | 45 +-------------- - gnulib-tests/test-usleep.c | 40 ------------- - gnulib-tests/usleep.c | 58 ------------------- - lib/config.hin | 9 --- - m4/gnulib-comp.m4 | 10 --- - m4/usleep.m4 | 45 --------------- - 13 files changed, 151 insertions(+), 440 deletions(-) - delete mode 100644 gnulib-tests/test-usleep.c - delete mode 100644 gnulib-tests/usleep.c - delete mode 100644 m4/usleep.m4 - -Index: ChangeLog -=================================================================== ---- ChangeLog.orig -+++ ChangeLog -@@ -1,3 +1,8 @@ -+2013-05-17 Bernhard Voelker -+ -+ gnulib: cherry-pick gnulib commit 5191133e -+ utimensat-tests, etc.: try to fix some races -+ - 2013-02-14 Pádraig Brady - - version 8.21 -Index: Makefile.in -=================================================================== ---- Makefile.in.orig -+++ Makefile.in -@@ -346,10 +346,9 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/0 - $(top_srcdir)/m4/unlink.m4 $(top_srcdir)/m4/unlinkat.m4 \ - $(top_srcdir)/m4/unlinkdir.m4 $(top_srcdir)/m4/unlocked-io.m4 \ - $(top_srcdir)/m4/uptime.m4 $(top_srcdir)/m4/userspec.m4 \ -- $(top_srcdir)/m4/usleep.m4 $(top_srcdir)/m4/utimbuf.m4 \ -- $(top_srcdir)/m4/utimecmp.m4 $(top_srcdir)/m4/utimens.m4 \ -- $(top_srcdir)/m4/utimensat.m4 $(top_srcdir)/m4/utimes.m4 \ -- $(top_srcdir)/m4/vasnprintf.m4 \ -+ $(top_srcdir)/m4/utimbuf.m4 $(top_srcdir)/m4/utimecmp.m4 \ -+ $(top_srcdir)/m4/utimens.m4 $(top_srcdir)/m4/utimensat.m4 \ -+ $(top_srcdir)/m4/utimes.m4 $(top_srcdir)/m4/vasnprintf.m4 \ - $(top_srcdir)/m4/vasprintf-posix.m4 \ - $(top_srcdir)/m4/vasprintf.m4 $(top_srcdir)/m4/version-etc.m4 \ - $(top_srcdir)/m4/vfprintf-posix.m4 \ -Index: aclocal.m4 -=================================================================== ---- aclocal.m4.orig -+++ aclocal.m4 -@@ -1425,7 +1425,6 @@ m4_include([m4/unlinkdir.m4]) - m4_include([m4/unlocked-io.m4]) - m4_include([m4/uptime.m4]) - m4_include([m4/userspec.m4]) --m4_include([m4/usleep.m4]) - m4_include([m4/utimbuf.m4]) - m4_include([m4/utimecmp.m4]) - m4_include([m4/utimens.m4]) -Index: configure -=================================================================== ---- configure.orig -+++ configure -@@ -3876,7 +3876,6 @@ as_fn_append ac_func_list " sleep" - as_fn_append ac_func_list " catgets" - as_fn_append ac_func_list " symlinkat" - as_fn_append ac_func_list " shutdown" --as_fn_append ac_func_list " usleep" - as_fn_append ac_func_list " wctob" - as_fn_append ac_header_list " hurd.h" - as_fn_append ac_header_list " paths.h" -@@ -7942,8 +7941,6 @@ $as_echo "$as_me: autobuild timestamp... - # Code from module useless-if-before-free: - # Code from module userspec: - # Code from module userspec-tests: -- # Code from module usleep: -- # Code from module usleep-tests: - # Code from module utimecmp: - # Code from module utimens: - # Code from module utimens-tests: -@@ -58743,102 +58740,6 @@ $as_echo "#define UNLINK_CANNOT_UNLINK_D - abs_aux_dir=`cd "$ac_aux_dir"; pwd` - - -- -- -- -- ac_fn_c_check_type "$LINENO" "useconds_t" "ac_cv_type_useconds_t" "$ac_includes_default" --if test "x$ac_cv_type_useconds_t" = xyes; then : -- --else -- --$as_echo "#define useconds_t unsigned int" >>confdefs.h -- --fi -- -- if test $ac_cv_func_usleep = no; then -- HAVE_USLEEP=0 -- else -- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether usleep allows large arguments" >&5 --$as_echo_n "checking whether usleep allows large arguments... " >&6; } --if ${gl_cv_func_usleep_works+:} false; then : -- $as_echo_n "(cached) " >&6 --else -- if test "$cross_compiling" = yes; then : -- case "$host_os" in -- # Guess yes on glibc systems. -- *-gnu*) gl_cv_func_usleep_works="guessing yes" ;; -- # If we don't know, assume the worst. -- *) gl_cv_func_usleep_works="guessing no" ;; -- esac -- --else -- cat confdefs.h - <<_ACEOF >conftest.$ac_ext --/* end confdefs.h. */ -- --#include -- --int --main () --{ --return !!usleep (1000000); -- ; -- return 0; --} --_ACEOF --if ac_fn_c_try_run "$LINENO"; then : -- gl_cv_func_usleep_works=yes --else -- gl_cv_func_usleep_works=no --fi --rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ -- conftest.$ac_objext conftest.beam conftest.$ac_ext --fi -- --fi --{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_usleep_works" >&5 --$as_echo "$gl_cv_func_usleep_works" >&6; } -- case "$gl_cv_func_usleep_works" in -- *yes) ;; -- *) -- REPLACE_USLEEP=1 -- ;; -- esac -- fi -- -- if test $HAVE_USLEEP = 0 || test $REPLACE_USLEEP = 1; then -- -- -- -- -- -- -- -- -- gltests_LIBOBJS="$gltests_LIBOBJS usleep.$ac_objext" -- -- fi -- -- -- -- -- -- if test "$GNULIB_USLEEP" != 1; then -- if test "$GNULIB_USLEEP" = 0; then -- GNULIB_USLEEP=$gl_module_indicator_condition -- else -- GNULIB_USLEEP="($GNULIB_USLEEP || $gl_module_indicator_condition)" -- fi -- fi -- -- -- -- -- --$as_echo "#define GNULIB_TEST_USLEEP 1" >>confdefs.h -- -- -- -- - abs_aux_dir=`cd "$ac_aux_dir"; pwd` - - -Index: gnulib-tests/Makefile.in -=================================================================== ---- gnulib-tests/Makefile.in.orig -+++ gnulib-tests/Makefile.in -@@ -198,19 +198,19 @@ TESTS = test-accept$(EXEEXT) test-file-h - test-uc_width$(EXEEXT) uniwidth/test-uc_width2.sh \ - test-unlink$(EXEEXT) test-unlinkat$(EXEEXT) \ - test-unsetenv$(EXEEXT) test-update-copyright.sh \ -- test-userspec$(EXEEXT) test-usleep$(EXEEXT) \ -- test-utimens$(EXEEXT) test-utimensat$(EXEEXT) \ -- test-vasnprintf$(EXEEXT) test-vasprintf-posix$(EXEEXT) \ -- test-vasprintf$(EXEEXT) test-vc-list-files-git.sh \ -- test-vc-list-files-cvs.sh test-verify$(EXEEXT) test-verify.sh \ -- test-version-etc.sh test-vfprintf-posix.sh \ -- test-vprintf-posix.sh test-wchar$(EXEEXT) test-wcrtomb.sh \ -- test-wcrtomb-w32-1.sh test-wcrtomb-w32-2.sh \ -- test-wcrtomb-w32-3.sh test-wcrtomb-w32-4.sh \ -- test-wcrtomb-w32-5.sh test-wctype-h$(EXEEXT) \ -- test-wcwidth$(EXEEXT) test-write$(EXEEXT) test-xalloc-die.sh \ -- test-xprintf-posix.sh test-xstrtoimax.sh test-xstrtol.sh \ -- test-xstrtoumax.sh test-xvasprintf$(EXEEXT) test-yesno.sh -+ test-userspec$(EXEEXT) test-utimens$(EXEEXT) \ -+ test-utimensat$(EXEEXT) test-vasnprintf$(EXEEXT) \ -+ test-vasprintf-posix$(EXEEXT) test-vasprintf$(EXEEXT) \ -+ test-vc-list-files-git.sh test-vc-list-files-cvs.sh \ -+ test-verify$(EXEEXT) test-verify.sh test-version-etc.sh \ -+ test-vfprintf-posix.sh test-vprintf-posix.sh \ -+ test-wchar$(EXEEXT) test-wcrtomb.sh test-wcrtomb-w32-1.sh \ -+ test-wcrtomb-w32-2.sh test-wcrtomb-w32-3.sh \ -+ test-wcrtomb-w32-4.sh test-wcrtomb-w32-5.sh \ -+ test-wctype-h$(EXEEXT) test-wcwidth$(EXEEXT) \ -+ test-write$(EXEEXT) test-xalloc-die.sh test-xprintf-posix.sh \ -+ test-xstrtoimax.sh test-xstrtol.sh test-xstrtoumax.sh \ -+ test-xvasprintf$(EXEEXT) test-yesno.sh - XFAIL_TESTS = - noinst_PROGRAMS = - check_PROGRAMS = test-accept$(EXEEXT) test-file-has-acl$(EXEEXT) \ -@@ -335,19 +335,18 @@ check_PROGRAMS = test-accept$(EXEEXT) te - test-uc_width$(EXEEXT) test-uc_width2$(EXEEXT) \ - test-unlink$(EXEEXT) test-unlinkat$(EXEEXT) \ - test-unsetenv$(EXEEXT) test-userspec$(EXEEXT) \ -- test-usleep$(EXEEXT) test-utimens$(EXEEXT) \ -- test-utimensat$(EXEEXT) test-vasnprintf$(EXEEXT) \ -- test-vasprintf-posix$(EXEEXT) test-vasprintf$(EXEEXT) \ -- test-verify$(EXEEXT) test-version-etc$(EXEEXT) \ -- test-vfprintf-posix$(EXEEXT) test-vprintf-posix$(EXEEXT) \ -- test-wchar$(EXEEXT) test-wcrtomb$(EXEEXT) \ -- test-wcrtomb-w32$(EXEEXT) test-wctype-h$(EXEEXT) \ -- test-wcwidth$(EXEEXT) test-write$(EXEEXT) \ -- test-xalloc-die$(EXEEXT) test-xfprintf-posix$(EXEEXT) \ -- test-xprintf-posix$(EXEEXT) test-xstrtoimax$(EXEEXT) \ -- test-xstrtol$(EXEEXT) test-xstrtoul$(EXEEXT) \ -- test-xstrtoumax$(EXEEXT) test-xvasprintf$(EXEEXT) \ -- test-yesno$(EXEEXT) -+ test-utimens$(EXEEXT) test-utimensat$(EXEEXT) \ -+ test-vasnprintf$(EXEEXT) test-vasprintf-posix$(EXEEXT) \ -+ test-vasprintf$(EXEEXT) test-verify$(EXEEXT) \ -+ test-version-etc$(EXEEXT) test-vfprintf-posix$(EXEEXT) \ -+ test-vprintf-posix$(EXEEXT) test-wchar$(EXEEXT) \ -+ test-wcrtomb$(EXEEXT) test-wcrtomb-w32$(EXEEXT) \ -+ test-wctype-h$(EXEEXT) test-wcwidth$(EXEEXT) \ -+ test-write$(EXEEXT) test-xalloc-die$(EXEEXT) \ -+ test-xfprintf-posix$(EXEEXT) test-xprintf-posix$(EXEEXT) \ -+ test-xstrtoimax$(EXEEXT) test-xstrtol$(EXEEXT) \ -+ test-xstrtoul$(EXEEXT) test-xstrtoumax$(EXEEXT) \ -+ test-xvasprintf$(EXEEXT) test-yesno$(EXEEXT) - @POSIX_SPAWN_PORTED_TRUE@am__append_1 = test-posix_spawn1 test-posix_spawn2 - @POSIX_SPAWN_PORTED_TRUE@am__append_2 = test-posix_spawn1 test-posix_spawn2 - @POSIX_SPAWN_PORTED_TRUE@am__append_3 = test-posix_spawn1.sh \ -@@ -553,10 +552,9 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/0 - $(top_srcdir)/m4/unlink.m4 $(top_srcdir)/m4/unlinkat.m4 \ - $(top_srcdir)/m4/unlinkdir.m4 $(top_srcdir)/m4/unlocked-io.m4 \ - $(top_srcdir)/m4/uptime.m4 $(top_srcdir)/m4/userspec.m4 \ -- $(top_srcdir)/m4/usleep.m4 $(top_srcdir)/m4/utimbuf.m4 \ -- $(top_srcdir)/m4/utimecmp.m4 $(top_srcdir)/m4/utimens.m4 \ -- $(top_srcdir)/m4/utimensat.m4 $(top_srcdir)/m4/utimes.m4 \ -- $(top_srcdir)/m4/vasnprintf.m4 \ -+ $(top_srcdir)/m4/utimbuf.m4 $(top_srcdir)/m4/utimecmp.m4 \ -+ $(top_srcdir)/m4/utimens.m4 $(top_srcdir)/m4/utimensat.m4 \ -+ $(top_srcdir)/m4/utimes.m4 $(top_srcdir)/m4/vasnprintf.m4 \ - $(top_srcdir)/m4/vasprintf-posix.m4 \ - $(top_srcdir)/m4/vasprintf.m4 $(top_srcdir)/m4/version-etc.m4 \ - $(top_srcdir)/m4/vfprintf-posix.m4 \ -@@ -693,9 +691,7 @@ test_chdir_DEPENDENCIES = libtests.a ../ - $(am__DEPENDENCIES_1) - test_chown_SOURCES = test-chown.c - test_chown_OBJECTS = test-chown.$(OBJEXT) --test_chown_LDADD = $(LDADD) --test_chown_DEPENDENCIES = libtests.a ../lib/libcoreutils.a libtests.a \ -- $(am__DEPENDENCIES_1) -+test_chown_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) - test_cloexec_SOURCES = test-cloexec.c - test_cloexec_OBJECTS = test-cloexec.$(OBJEXT) - test_cloexec_LDADD = $(LDADD) -@@ -784,7 +780,8 @@ test_fchmodat_OBJECTS = test-fchmodat.$( - test_fchmodat_DEPENDENCIES = $(am__DEPENDENCIES_2) - test_fchownat_SOURCES = test-fchownat.c - test_fchownat_OBJECTS = test-fchownat.$(OBJEXT) --test_fchownat_DEPENDENCIES = $(am__DEPENDENCIES_2) -+test_fchownat_DEPENDENCIES = $(am__DEPENDENCIES_2) \ -+ $(am__DEPENDENCIES_1) - test_fclose_SOURCES = test-fclose.c - test_fclose_OBJECTS = test-fclose.$(OBJEXT) - test_fclose_LDADD = $(LDADD) -@@ -820,7 +817,7 @@ test_fdopendir_DEPENDENCIES = $(am__DEPE - test_fdutimensat_SOURCES = test-fdutimensat.c - test_fdutimensat_OBJECTS = test-fdutimensat.$(OBJEXT) - test_fdutimensat_DEPENDENCIES = $(am__DEPENDENCIES_2) \ -- $(am__DEPENDENCIES_1) -+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) - test_fflush_SOURCES = test-fflush.c - test_fflush_OBJECTS = test-fflush.$(OBJEXT) - test_fflush_LDADD = $(LDADD) -@@ -1005,7 +1002,7 @@ test_ftruncate_DEPENDENCIES = libtests.a - test_futimens_SOURCES = test-futimens.c - test_futimens_OBJECTS = test-futimens.$(OBJEXT) - test_futimens_DEPENDENCIES = $(am__DEPENDENCIES_2) \ -- $(am__DEPENDENCIES_1) -+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) - test_fwrite_SOURCES = test-fwrite.c - test_fwrite_OBJECTS = test-fwrite.$(OBJEXT) - test_fwrite_LDADD = $(LDADD) -@@ -1156,9 +1153,7 @@ test_langinfo_DEPENDENCIES = libtests.a - libtests.a $(am__DEPENDENCIES_1) - test_lchown_SOURCES = test-lchown.c - test_lchown_OBJECTS = test-lchown.$(OBJEXT) --test_lchown_LDADD = $(LDADD) --test_lchown_DEPENDENCIES = libtests.a ../lib/libcoreutils.a libtests.a \ -- $(am__DEPENDENCIES_1) -+test_lchown_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) - test_link_SOURCES = test-link.c - test_link_OBJECTS = test-link.$(OBJEXT) - test_link_DEPENDENCIES = $(am__DEPENDENCIES_2) -@@ -1564,9 +1559,8 @@ test_stat_OBJECTS = test-stat.$(OBJEXT) - test_stat_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) - test_stat_time_SOURCES = test-stat-time.c - test_stat_time_OBJECTS = test-stat-time.$(OBJEXT) --test_stat_time_LDADD = $(LDADD) --test_stat_time_DEPENDENCIES = libtests.a ../lib/libcoreutils.a \ -- libtests.a $(am__DEPENDENCIES_1) -+test_stat_time_DEPENDENCIES = $(am__DEPENDENCIES_2) \ -+ $(am__DEPENDENCIES_1) - test_statat_SOURCES = test-statat.c - test_statat_OBJECTS = test-statat.$(OBJEXT) - test_statat_DEPENDENCIES = $(am__DEPENDENCIES_2) -@@ -1787,19 +1781,14 @@ test_unsetenv_DEPENDENCIES = libtests.a - test_userspec_SOURCES = test-userspec.c - test_userspec_OBJECTS = test-userspec.$(OBJEXT) - test_userspec_DEPENDENCIES = $(am__DEPENDENCIES_2) --test_usleep_SOURCES = test-usleep.c --test_usleep_OBJECTS = test-usleep.$(OBJEXT) --test_usleep_LDADD = $(LDADD) --test_usleep_DEPENDENCIES = libtests.a ../lib/libcoreutils.a libtests.a \ -- $(am__DEPENDENCIES_1) - test_utimens_SOURCES = test-utimens.c - test_utimens_OBJECTS = test-utimens.$(OBJEXT) - test_utimens_DEPENDENCIES = $(am__DEPENDENCIES_2) \ -- $(am__DEPENDENCIES_1) -+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) - test_utimensat_SOURCES = test-utimensat.c - test_utimensat_OBJECTS = test-utimensat.$(OBJEXT) - test_utimensat_DEPENDENCIES = $(am__DEPENDENCIES_2) \ -- $(am__DEPENDENCIES_1) -+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) - test_vasnprintf_SOURCES = test-vasnprintf.c - test_vasnprintf_OBJECTS = test-vasnprintf.$(OBJEXT) - test_vasnprintf_LDADD = $(LDADD) -@@ -1990,7 +1979,7 @@ SOURCES = $(libtests_a_SOURCES) $(EXTRA_ - $(test_u8_mbtoucr_SOURCES) $(test_u8_uctomb_SOURCES) \ - $(test_uc_width_SOURCES) $(test_uc_width2_SOURCES) \ - test-uname.c test-unistd.c test-unlink.c test-unlinkat.c \ -- test-unsetenv.c test-userspec.c test-usleep.c test-utimens.c \ -+ test-unsetenv.c test-userspec.c test-utimens.c \ - test-utimensat.c test-vasnprintf.c test-vasprintf.c \ - test-vasprintf-posix.c test-verify.c test-version-etc.c \ - test-vfprintf-posix.c test-vprintf-posix.c test-wchar.c \ -@@ -2077,7 +2066,7 @@ DIST_SOURCES = $(libtests_a_SOURCES) $(E - $(test_u8_mbtoucr_SOURCES) $(test_u8_uctomb_SOURCES) \ - $(test_uc_width_SOURCES) $(test_uc_width2_SOURCES) \ - test-uname.c test-unistd.c test-unlink.c test-unlinkat.c \ -- test-unsetenv.c test-userspec.c test-usleep.c test-utimens.c \ -+ test-unsetenv.c test-userspec.c test-utimens.c \ - test-utimensat.c test-vasnprintf.c test-vasprintf.c \ - test-vasprintf-posix.c test-verify.c test-version-etc.c \ - test-vfprintf-posix.c test-vprintf-posix.c test-wchar.c \ -@@ -3725,7 +3714,7 @@ EXTRA_DIST = accept.c w32sock.h test-acc - test-spawn-pipe.sh test-spawn-pipe-main.c \ - test-spawn-pipe-child.c macros.h test-spawn.c test-stat.h \ - test-stat.c signature.h macros.h test-stat-time.c macros.h \ -- test-statat.c test-stdalign.c macros.h test-stdbool.c \ -+ nap.h test-statat.c test-stdalign.c macros.h test-stdbool.c \ - test-stddef.c test-stdint.c test-stdio.c test-stdlib.c \ - test-sys_wait.h test-strchrnul.c signature.h macros.h \ - test-strerror.c signature.h macros.h strerror_r.c \ -@@ -3753,10 +3742,9 @@ EXTRA_DIST = accept.c w32sock.h test-acc - test-unlink.c signature.h macros.h test-unlinkat.c \ - test-rmdir.h test-unlink.h signature.h macros.h unlinkdir.h \ - test-unsetenv.c signature.h macros.h test-update-copyright.sh \ -- test-userspec.c usleep.c test-usleep.c signature.h macros.h \ -- nap.h test-futimens.h test-lutimens.h test-utimens.h \ -- test-utimens-common.h test-utimens.c macros.h nap.h \ -- test-lutimens.h test-utimens.h test-utimens-common.h \ -+ test-userspec.c nap.h test-futimens.h test-lutimens.h \ -+ test-utimens.h test-utimens-common.h test-utimens.c macros.h \ -+ nap.h test-lutimens.h test-utimens.h test-utimens-common.h \ - test-utimensat.c signature.h macros.h test-vasnprintf.c \ - macros.h test-vasprintf-posix.c minus-zero.h infinity.h nan.h \ - macros.h test-vasprintf.c signature.h macros.h \ -@@ -3827,8 +3815,8 @@ libtests_a_LIBADD = $(gltests_LIBOBJS) - libtests_a_DEPENDENCIES = $(gltests_LIBOBJS) - EXTRA_libtests_a_SOURCES = accept.c bind.c connect.c inet_pton.c \ - ioctl.c listen.c perror.c pipe.c setlocale.c setsockopt.c \ -- sleep.c socket.c strerror_r.c at-func.c symlinkat.c usleep.c \ -- wctob.c wctomb.c -+ sleep.c socket.c strerror_r.c at-func.c symlinkat.c wctob.c \ -+ wctomb.c - AM_LIBTOOLFLAGS = --preserve-dup-deps - test_accept_LDADD = $(LDADD) @LIBSOCKET@ - test_file_has_acl_LDADD = $(LDADD) $(LIB_ACL) -@@ -3839,6 +3827,7 @@ test_areadlinkat_LDADD = $(LDADD) @LIBIN - test_argmatch_LDADD = $(LDADD) @LIBINTL@ - test_bind_LDADD = $(LDADD) @LIBSOCKET@ $(INET_PTON_LIB) - test_canonicalize_LDADD = $(LDADD) @LIBINTL@ -+test_chown_LDADD = $(LDADD) $(LIB_NANOSLEEP) - test_closein_LDADD = $(LDADD) @LIBINTL@ - test_connect_LDADD = $(LDADD) @LIBSOCKET@ $(INET_PTON_LIB) - # Link with libintl when needed. dirent-safer uses fdopendir if it is present, -@@ -3849,15 +3838,17 @@ test_exclude_LDADD = $(LDADD) @LIBINTL@ - test_faccessat_LDADD = $(LDADD) $(LIB_EACCESS) @LIBINTL@ - test_fchdir_LDADD = $(LDADD) $(LIBINTL) - test_fchmodat_LDADD = $(LDADD) @LIBINTL@ --test_fchownat_LDADD = $(LDADD) @LIBINTL@ -+test_fchownat_LDADD = $(LDADD) $(LIB_NANOSLEEP) @LIBINTL@ - test_fdatasync_LDADD = $(LDADD) $(LIB_FDATASYNC) - test_fdopendir_LDADD = $(LDADD) @LIBINTL@ --test_fdutimensat_LDADD = $(LDADD) $(LIB_CLOCK_GETTIME) @LIBINTL@ -+test_fdutimensat_LDADD = $(LDADD) $(LIB_CLOCK_GETTIME) \ -+ $(LIB_NANOSLEEP) @LIBINTL@ -+ - test_filenamecat_LDADD = $(LDADD) @LIBINTL@ - test_frexp_nolibm_SOURCES = test-frexp.c randomd.c - test_frexpl_nolibm_SOURCES = test-frexpl.c randoml.c - test_fstatat_LDADD = $(LDADD) @LIBINTL@ --test_futimens_LDADD = $(LDADD) $(LIB_CLOCK_GETTIME) @LIBINTL@ -+test_futimens_LDADD = $(LDADD) $(LIB_CLOCK_GETTIME) $(LIB_NANOSLEEP) @LIBINTL@ - test_getaddrinfo_LDADD = $(LDADD) @GETADDRINFO_LIB@ @LIBINTL@ - test_getcwd_lgpl_LDADD = $(LDADD) $(LIBINTL) - test_getcwd_LDADD = $(LDADD) @LIBINTL@ -@@ -3867,6 +3858,7 @@ test_getopt_LDADD = $(LDADD) $(LIBINTL) - test_iconv_LDADD = $(LDADD) @LIBICONV@ - test_inet_ntop_LDADD = $(LDADD) @INET_NTOP_LIB@ - test_inet_pton_LDADD = $(LDADD) @INET_PTON_LIB@ -+test_lchown_LDADD = $(LDADD) $(LIB_NANOSLEEP) - test_link_LDADD = $(LDADD) @LIBINTL@ - test_linkat_LDADD = $(LDADD) @LIBINTL@ - test_listen_LDADD = $(LDADD) @LIBSOCKET@ -@@ -3902,6 +3894,7 @@ test_spawn_pipe_main_LDADD = $(LDADD) @L - # Therefore don't link it against any libraries other than -lc. - test_spawn_pipe_child_LDADD = - test_stat_LDADD = $(LDADD) $(LIBINTL) -+test_stat_time_LDADD = $(LDADD) $(LIB_NANOSLEEP) - test_statat_LDADD = $(LDADD) @LIBINTL@ - test_striconv_LDADD = $(LDADD) @LIBICONV@ - test_strsignal_LDADD = $(LDADD) @LIBINTL@ $(LIBTHREAD) -@@ -3920,8 +3913,8 @@ test_uc_width2_SOURCES = uniwidth/test-u - test_uc_width2_LDADD = $(LDADD) $(LIBUNISTRING) - test_unlinkat_LDADD = $(LDADD) @LIBINTL@ - test_userspec_LDADD = $(LDADD) @LIBINTL@ --test_utimens_LDADD = $(LDADD) $(LIB_CLOCK_GETTIME) @LIBINTL@ --test_utimensat_LDADD = $(LDADD) $(LIB_CLOCK_GETTIME) @LIBINTL@ -+test_utimens_LDADD = $(LDADD) $(LIB_CLOCK_GETTIME) $(LIB_NANOSLEEP) @LIBINTL@ -+test_utimensat_LDADD = $(LDADD) $(LIB_CLOCK_GETTIME) $(LIB_NANOSLEEP) @LIBINTL@ - test_version_etc_LDADD = $(LDADD) @LIBINTL@ - test_xalloc_die_LDADD = $(LDADD) @LIBINTL@ - test_xfprintf_posix_LDADD = $(LDADD) @LIBINTL@ -@@ -4893,9 +4886,6 @@ test-unsetenv$(EXEEXT): $(test_unsetenv_ - test-userspec$(EXEEXT): $(test_userspec_OBJECTS) $(test_userspec_DEPENDENCIES) $(EXTRA_test_userspec_DEPENDENCIES) - @rm -f test-userspec$(EXEEXT) - $(AM_V_CCLD)$(LINK) $(test_userspec_OBJECTS) $(test_userspec_LDADD) $(LIBS) --test-usleep$(EXEEXT): $(test_usleep_OBJECTS) $(test_usleep_DEPENDENCIES) $(EXTRA_test_usleep_DEPENDENCIES) -- @rm -f test-usleep$(EXEEXT) -- $(AM_V_CCLD)$(LINK) $(test_usleep_OBJECTS) $(test_usleep_LDADD) $(LIBS) - test-utimens$(EXEEXT): $(test_utimens_OBJECTS) $(test_utimens_DEPENDENCIES) $(EXTRA_test_utimens_DEPENDENCIES) - @rm -f test-utimens$(EXEEXT) - $(AM_V_CCLD)$(LINK) $(test_utimens_OBJECTS) $(test_utimens_LDADD) $(LIBS) -@@ -5252,7 +5242,6 @@ distclean-compile: - @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-unlinkat.Po@am__quote@ - @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-unsetenv.Po@am__quote@ - @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-userspec.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-usleep.Po@am__quote@ - @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-utimens.Po@am__quote@ - @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-utimensat.Po@am__quote@ - @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-vasnprintf.Po@am__quote@ -@@ -5280,7 +5269,6 @@ distclean-compile: - @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_tls-test-tls.Po@am__quote@ - @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_xvasprintf-test-xvasprintf.Po@am__quote@ - @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unlinkdir.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/usleep.Po@am__quote@ - @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/wctob.Po@am__quote@ - @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/wctomb.Po@am__quote@ - @AMDEP_TRUE@@am__include@ @am__quote@glthread/$(DEPDIR)/thread.Po@am__quote@ -@@ -6223,8 +6211,6 @@ test-update-copyright.sh.log: test-updat - @p='test-update-copyright.sh'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) - test-userspec.log: test-userspec$(EXEEXT) - @p='test-userspec$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) --test-usleep.log: test-usleep$(EXEEXT) -- @p='test-usleep$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) - test-utimens.log: test-utimens$(EXEEXT) - @p='test-utimens$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) - test-utimensat.log: test-utimensat$(EXEEXT) -Index: gnulib-tests/gnulib.mk -=================================================================== ---- gnulib-tests/gnulib.mk.orig -+++ gnulib-tests/gnulib.mk -@@ -261,6 +261,7 @@ EXTRA_DIST += test-chdir.c signature.h m - - TESTS += test-chown - check_PROGRAMS += test-chown -+test_chown_LDADD = $(LDADD) $(LIB_NANOSLEEP) - EXTRA_DIST += nap.h test-chown.h test-chown.c signature.h macros.h - - ## end gnulib module chown-tests -@@ -459,7 +460,7 @@ EXTRA_DIST += test-fchmodat.c signature. - - TESTS += test-fchownat - check_PROGRAMS += test-fchownat --test_fchownat_LDADD = $(LDADD) @LIBINTL@ -+test_fchownat_LDADD = $(LDADD) $(LIB_NANOSLEEP) @LIBINTL@ - EXTRA_DIST += nap.h test-chown.h test-lchown.h test-fchownat.c signature.h macros.h - - ## end gnulib module fchownat-tests -@@ -526,7 +527,8 @@ EXTRA_DIST += test-fdopendir.c signature - - TESTS += test-fdutimensat - check_PROGRAMS += test-fdutimensat --test_fdutimensat_LDADD = $(LDADD) $(LIB_CLOCK_GETTIME) @LIBINTL@ -+test_fdutimensat_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-fdutimensat.c macros.h - - ## end gnulib module fdutimensat-tests -@@ -780,7 +782,7 @@ EXTRA_DIST += test-ftruncate.c test-ftru - - TESTS += test-futimens - check_PROGRAMS += test-futimens --test_futimens_LDADD = $(LDADD) $(LIB_CLOCK_GETTIME) @LIBINTL@ -+test_futimens_LDADD = $(LDADD) $(LIB_CLOCK_GETTIME) $(LIB_NANOSLEEP) @LIBINTL@ - EXTRA_DIST += nap.h test-futimens.h test-utimens-common.h test-futimens.c signature.h macros.h - - ## end gnulib module futimens-tests -@@ -1104,6 +1106,7 @@ EXTRA_DIST += test-langinfo.c - - TESTS += test-lchown - check_PROGRAMS += test-lchown -+test_lchown_LDADD = $(LDADD) $(LIB_NANOSLEEP) - EXTRA_DIST += nap.h test-lchown.h test-lchown.c signature.h macros.h - - ## end gnulib module lchown-tests -@@ -1963,7 +1966,8 @@ EXTRA_DIST += test-stat.h test-stat.c si - - TESTS += test-stat-time - check_PROGRAMS += test-stat-time --EXTRA_DIST += test-stat-time.c macros.h -+test_stat_time_LDADD = $(LDADD) $(LIB_NANOSLEEP) -+EXTRA_DIST += test-stat-time.c macros.h nap.h - - ## end gnulib module stat-time-tests - -@@ -2419,28 +2423,11 @@ EXTRA_DIST += test-userspec.c - - ## end gnulib module userspec-tests - --## begin gnulib module usleep -- -- --EXTRA_DIST += usleep.c -- --EXTRA_libtests_a_SOURCES += usleep.c -- --## end gnulib module usleep -- --## begin gnulib module usleep-tests -- --TESTS += test-usleep --check_PROGRAMS += test-usleep --EXTRA_DIST += test-usleep.c signature.h macros.h -- --## end gnulib module usleep-tests -- - ## begin gnulib module utimens-tests - - TESTS += test-utimens - check_PROGRAMS += test-utimens --test_utimens_LDADD = $(LDADD) $(LIB_CLOCK_GETTIME) @LIBINTL@ -+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 -@@ -2449,7 +2436,7 @@ EXTRA_DIST += nap.h test-futimens.h test - - TESTS += test-utimensat - check_PROGRAMS += test-utimensat --test_utimensat_LDADD = $(LDADD) $(LIB_CLOCK_GETTIME) @LIBINTL@ -+test_utimensat_LDADD = $(LDADD) $(LIB_CLOCK_GETTIME) $(LIB_NANOSLEEP) @LIBINTL@ - EXTRA_DIST += nap.h test-lutimens.h test-utimens.h test-utimens-common.h test-utimensat.c signature.h macros.h - - ## end gnulib module utimensat-tests -Index: gnulib-tests/nap.h -=================================================================== ---- gnulib-tests/nap.h.orig -+++ gnulib-tests/nap.h -@@ -19,19 +19,33 @@ - #ifndef GLTEST_NAP_H - # define GLTEST_NAP_H - -+# include -+ -+/* Return A - B, in ns. -+ Return 0 if the true result would be negative. -+ Return INT_MAX if the true result would be greater than INT_MAX. */ - static int --lt_mtime (struct stat const *a, struct stat const *b) -+diff_timespec (struct timespec a, struct timespec b) - { -- time_t as = a->st_mtime; -- time_t bs = b->st_mtime; -- int ans = get_stat_mtime_ns (a); -- int bns = get_stat_mtime_ns (b); -+ time_t as = a.tv_sec; -+ time_t bs = b.tv_sec; -+ int ans = a.tv_nsec; -+ int bns = b.tv_nsec; - -- return as < bs || (as == bs && ans < bns); -+ if (! (bs < as || (bs == as && bns < ans))) -+ return 0; -+ if (as - bs <= INT_MAX / 1000000000) -+ { -+ int sdiff = (as - bs) * 1000000000; -+ int usdiff = ans - bns; -+ if (usdiff < INT_MAX - sdiff) -+ return sdiff + usdiff; -+ } -+ return INT_MAX; - } - - static void --get_mtime (int fd, struct stat *st, int do_write) -+get_stat (int fd, struct stat *st, int do_write) - { - if (do_write) - ASSERT (write (fd, "\n", 1) == 1); -@@ -39,50 +53,61 @@ get_mtime (int fd, struct stat *st, int - } - - /* Given a file whose descriptor is FD, see whether delaying by DELAY -- microseconds causes a change in a file's time stamp. If the time -- stamps differ, repeat the test one more time, in case we crossed a -- quantization boundary on a file system with lower resolution. *ST -- is the file's status, recently gotten. Update *ST to reflect the -- latest status gotten. */ -+ nanoseconds causes a change in a file's time stamp. *ST is the -+ file's status, recently gotten. Update *ST to reflect the latest -+ status gotten. If successful, return the needed delay, in -+ nanoseconds as determined by the observed time stamps; this may be -+ greater than DELAY if we crossed a quantization boundary. If -+ unsuccessful, return 0. */ - static int - nap_works (int fd, int delay, struct stat *st) - { -- struct stat old_st; -- old_st = *st; -- usleep (delay); -- get_mtime (fd, st, 1); -- if (! lt_mtime (&old_st, st)) -- return 0; -- old_st = *st; -- usleep (delay); -- get_mtime (fd, st, 1); -- return lt_mtime (&old_st, st); -+ struct stat old_st = *st; -+ struct timespec delay_spec; -+ int cdiff, mdiff; -+ delay_spec.tv_sec = delay / 1000000000; -+ delay_spec.tv_nsec = delay % 1000000000; -+ ASSERT (nanosleep (&delay_spec, 0) == 0); -+ get_stat (fd, st, 1); -+ -+ /* Return the greater of the ctime and the mtime differences, or -+ zero if it cannot be determined, or INT_MAX if either overflows. */ -+ cdiff = diff_timespec (get_stat_ctime (st), get_stat_ctime (&old_st)); -+ if (cdiff != 0) -+ { -+ mdiff = diff_timespec (get_stat_mtime (st), get_stat_mtime (&old_st)); -+ if (mdiff != 0) -+ return cdiff < mdiff ? mdiff : cdiff; -+ } -+ return 0; - } - - static int - guess_delay (void) - { -- /* Try a 1-microsecond sleep first, for speed. If that doesn't -- work, try a 1 ms sleep; that should work with ext. If it doesn't -- work, try a 20 ms sleep. xfs has a quantization of about 10 -+ /* Try a 1-ns sleep first, for speed. If that doesn't work, try 100 -+ ns, 1 microsecond, 1 ms, etc. xfs has a quantization of about 10 - milliseconds, even though it has a granularity of 1 nanosecond, - and NTFS has a default quantization of 15.25 milliseconds, even -- though it has a granularity of 100 nanoseconds, so 20 ms is a -+ though it has a granularity of 100 nanoseconds, so 15.25 ms is a - good quantization to try. If that doesn't work, try 1 second. - The worst case is 2 seconds, needed for FAT. */ -- static int const delaytab[] = {1, 1000, 20000, 1000000 }; -+ static int const delaytab[] = {1, 1000, 1000000, 15250000, 1000000000 }; - int fd = creat (BASE "tmp", 0600); - int i; -- int delay = 2000000; -+ int delay = 2000000000; - struct stat st; - ASSERT (0 <= fd); -- get_mtime (fd, &st, 0); -+ get_stat (fd, &st, 0); - for (i = 0; i < sizeof delaytab / sizeof delaytab[0]; i++) -- if (nap_works (fd, delaytab[i], &st)) -- { -- delay = delaytab[i]; -- break; -- } -+ { -+ int d = nap_works (fd, delaytab[i], &st); -+ if (d != 0) -+ { -+ delay = d; -+ break; -+ } -+ } - ASSERT (close (fd) == 0); - ASSERT (unlink (BASE "tmp") == 0); - return delay; -@@ -90,14 +115,24 @@ guess_delay (void) - - /* Sleep long enough to notice a timestamp difference on the file - system in the current directory. Assumes that BASE is defined, -- and requires that the test module depends on usleep. */ -+ and requires that the test module depends on nanosleep. */ - static void - nap (void) - { -- static int delay; -- if (!delay) -- delay = guess_delay (); -- usleep (delay); -+ static struct timespec delay; -+ if (!delay.tv_sec && !delay.tv_nsec) -+ { -+ int d = guess_delay (); -+ -+ /* Multiply by 1.125 (rounding up), to avoid problems if the -+ file system's clock is a bit slower than nanosleep's. -+ Ceiling it at INT_MAX, though. */ -+ int delta = (d >> 3) + ((d & 7) != 0); -+ d = delta < INT_MAX - d ? d + delta : INT_MAX; -+ delay.tv_sec = d / 1000000000; -+ delay.tv_nsec = d % 1000000000; -+ } -+ ASSERT (nanosleep (&delay, 0) == 0); - } - - #endif /* GLTEST_NAP_H */ -Index: gnulib-tests/test-stat-time.c -=================================================================== ---- gnulib-tests/test-stat-time.c.orig -+++ gnulib-tests/test-stat-time.c -@@ -27,6 +27,9 @@ - - #include "macros.h" - -+#define BASE "test-stat-time.t" -+#include "nap.h" -+ - enum { NFILES = 4 }; - - static int -@@ -79,48 +82,6 @@ do_stat (const char *filename, struct st - ASSERT (stat (filename, p) == 0); - } - --/* Sleep long enough to notice a timestamp difference on the file -- system in the current directory. */ --static void --nap (void) --{ -- static long delay; -- if (!delay) -- { -- /* Initialize only once, by sleeping for 20 milliseconds (needed -- since xfs has a quantization of about 10 milliseconds, even -- though it has a granularity of 1 nanosecond, and since NTFS -- has a default quantization of 15.25 milliseconds, even though -- it has a granularity of 100 nanoseconds). If the seconds -- differ, repeat the test one more time (in case we crossed a -- quantization boundary on a file system with 1 second -- resolution). If we can't observe a difference in only the -- nanoseconds, then fall back to 1 second if the time is odd, -- and 2 seconds (needed for FAT) if time is even. */ -- struct stat st1; -- struct stat st2; -- ASSERT (stat ("t-stt-stamp1", &st1) == 0); -- ASSERT (force_unlink ("t-stt-stamp1") == 0); -- delay = 20000; -- usleep (delay); -- create_file ("t-stt-stamp1"); -- ASSERT (stat ("t-stt-stamp1", &st2) == 0); -- if (st1.st_mtime != st2.st_mtime) -- { -- /* Seconds differ, give it one more shot. */ -- st1 = st2; -- ASSERT (force_unlink ("t-stt-stamp1") == 0); -- usleep (delay); -- create_file ("t-stt-stamp1"); -- ASSERT (stat ("t-stt-stamp1", &st2) == 0); -- } -- if (! (st1.st_mtime == st2.st_mtime -- && get_stat_mtime_ns (&st1) < get_stat_mtime_ns (&st2))) -- delay = (st1.st_mtime & 1) ? 1000000 : 2000000; -- } -- usleep (delay); --} -- - static void - prepare_test (struct stat *statinfo, struct timespec *modtimes) - { -Index: gnulib-tests/test-usleep.c -=================================================================== ---- gnulib-tests/test-usleep.c -+++ /dev/null -@@ -1,40 +0,0 @@ --/* Test of usleep() function. -- Copyright (C) 2009-2013 Free Software Foundation, Inc. -- -- This program is free software: you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by -- 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 . */ -- --/* Written by Eric Blake , 2009. */ -- --#include -- --#include -- --#include "signature.h" --SIGNATURE_CHECK (usleep, int, (useconds_t)); -- --#include -- --#include "macros.h" -- --int --main (void) --{ -- time_t start = time (NULL); -- ASSERT (usleep (1000000) == 0); -- ASSERT (start < time (NULL)); -- -- ASSERT (usleep (0) == 0); -- -- return 0; --} -Index: gnulib-tests/usleep.c -=================================================================== ---- gnulib-tests/usleep.c -+++ /dev/null -@@ -1,58 +0,0 @@ --/* Pausing execution of the current thread. -- Copyright (C) 2009-2013 Free Software Foundation, Inc. -- Written by Eric Blake , 2009. -- -- 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 . */ -- --/* This file is _intentionally_ light-weight. Rather than using -- select or nanosleep, both of which drag in external libraries on -- some platforms, this merely rounds up to the nearest second if -- usleep() does not exist. If sub-second resolution is important, -- then use a more powerful interface to begin with. */ -- --#include -- --/* Specification. */ --#include -- --#include -- --#ifndef HAVE_USLEEP --# define HAVE_USLEEP 0 --#endif -- --/* Sleep for MICRO microseconds, which can be greater than 1 second. -- Return -1 and set errno to EINVAL on range error (about 4295 -- seconds), or 0 on success. Interaction with SIGALARM is -- unspecified. */ -- --int --usleep (useconds_t micro) --{ -- unsigned int seconds = micro / 1000000; -- if (sizeof seconds < sizeof micro && micro / 1000000 != seconds) -- { -- errno = EINVAL; -- return -1; -- } -- if (!HAVE_USLEEP && micro % 1000000) -- seconds++; -- while ((seconds = sleep (seconds)) != 0); -- --#undef usleep --#if !HAVE_USLEEP --# define usleep(x) 0 --#endif -- return usleep (micro % 1000000); --} -Index: lib/config.hin -=================================================================== ---- lib/config.hin.orig -+++ lib/config.hin -@@ -735,9 +735,6 @@ - /* Define to 1 when the gnulib module unsetenv should be tested. */ - #undef GNULIB_TEST_UNSETENV - --/* Define to 1 when the gnulib module usleep should be tested. */ --#undef GNULIB_TEST_USLEEP -- - /* Define to 1 when the gnulib module utimensat should be tested. */ - #undef GNULIB_TEST_UTIMENSAT - -@@ -2387,9 +2384,6 @@ - /* Define to 1 if you have the `uselocale' function. */ - #undef HAVE_USELOCALE - --/* Define to 1 if you have the `usleep' function. */ --#undef HAVE_USLEEP -- - /* Define to 1 if you have the `utimensat' function. */ - #undef HAVE_UTIMENSAT - -@@ -3348,9 +3342,6 @@ - #endif - - --/* Define to an unsigned 32-bit type if lacks this type. */ --#undef useconds_t -- - /* Define as a macro for copying va_list variables. */ - #undef va_copy - -Index: m4/gnulib-comp.m4 -=================================================================== ---- m4/gnulib-comp.m4.orig -+++ m4/gnulib-comp.m4 -@@ -741,8 +741,6 @@ AC_DEFUN([gl_EARLY], - # Code from module useless-if-before-free: - # Code from module userspec: - # Code from module userspec-tests: -- # Code from module usleep: -- # Code from module usleep-tests: - # Code from module utimecmp: - # Code from module utimens: - # Code from module utimens-tests: -@@ -2255,11 +2253,6 @@ changequote([, ])dnl - gl_UNLINKDIR - abs_aux_dir=`cd "$ac_aux_dir"; pwd` - AC_SUBST([abs_aux_dir]) -- gl_FUNC_USLEEP -- if test $HAVE_USLEEP = 0 || test $REPLACE_USLEEP = 1; then -- AC_LIBOBJ([usleep]) -- fi -- gl_UNISTD_MODULE_INDICATOR([usleep]) - AC_REQUIRE([gl_LONG_DOUBLE_VS_DOUBLE]) - abs_aux_dir=`cd "$ac_aux_dir"; pwd` - AC_SUBST([abs_aux_dir]) -@@ -3436,7 +3429,6 @@ AC_DEFUN([gl_FILE_LIST], [ - m4/unlocked-io.m4 - m4/uptime.m4 - m4/userspec.m4 -- m4/usleep.m4 - m4/utimbuf.m4 - m4/utimecmp.m4 - m4/utimens.m4 -@@ -3839,7 +3831,6 @@ AC_DEFUN([gl_FILE_LIST], [ - tests/test-unsetenv.c - tests/test-update-copyright.sh - tests/test-userspec.c -- tests/test-usleep.c - tests/test-utimens-common.h - tests/test-utimens.c - tests/test-utimens.h -@@ -3913,7 +3904,6 @@ AC_DEFUN([gl_FILE_LIST], [ - tests=lib/symlinkat.c - tests=lib/unlinkdir.c - tests=lib/unlinkdir.h -- tests=lib/usleep.c - tests=lib/w32sock.h - tests=lib/wctob.c - tests=lib/wctomb-impl.h -Index: m4/usleep.m4 -=================================================================== ---- m4/usleep.m4 -+++ /dev/null -@@ -1,45 +0,0 @@ --# usleep.m4 serial 3 --dnl Copyright (C) 2009-2013 Free Software Foundation, Inc. --dnl This file is free software; the Free Software Foundation --dnl gives unlimited permission to copy and/or distribute it, --dnl with or without modifications, as long as this notice is preserved. -- --dnl This macro intentionally does not check for select or nanosleep; --dnl both of those modules can require external libraries. --AC_DEFUN([gl_FUNC_USLEEP], --[ -- AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) -- dnl usleep was required in POSIX 2001, but dropped as obsolete in -- dnl POSIX 2008; therefore, it is not always exposed in headers. -- AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) -- AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles -- AC_CHECK_FUNCS_ONCE([usleep]) -- AC_CHECK_TYPE([useconds_t], [], -- [AC_DEFINE([useconds_t], [unsigned int], [Define to an unsigned 32-bit -- type if lacks this type.])]) -- if test $ac_cv_func_usleep = no; then -- HAVE_USLEEP=0 -- else -- dnl POSIX allows implementations to reject arguments larger than -- dnl 999999, but GNU guarantees it will work. -- AC_CACHE_CHECK([whether usleep allows large arguments], -- [gl_cv_func_usleep_works], -- [AC_RUN_IFELSE([AC_LANG_PROGRAM([[ --#include --]], [[return !!usleep (1000000);]])], -- [gl_cv_func_usleep_works=yes], [gl_cv_func_usleep_works=no], -- [case "$host_os" in -- # Guess yes on glibc systems. -- *-gnu*) gl_cv_func_usleep_works="guessing yes" ;; -- # If we don't know, assume the worst. -- *) gl_cv_func_usleep_works="guessing no" ;; -- esac -- ])]) -- case "$gl_cv_func_usleep_works" in -- *yes) ;; -- *) -- REPLACE_USLEEP=1 -- ;; -- esac -- fi --]) diff --git a/coreutils-gnulib-tests-ppc64le.patch b/coreutils-gnulib-tests-ppc64le.patch index ee05437..8b22c69 100644 --- a/coreutils-gnulib-tests-ppc64le.patch +++ b/coreutils-gnulib-tests-ppc64le.patch @@ -1,7 +1,12 @@ -diff --git a/gnulib-tests/test-isnanl.h b/gnulib-tests/test-isnanl.h -index 06e6a7c..2df10f8 100644 ---- a/gnulib-tests/test-isnanl.h -+++ b/gnulib-tests/test-isnanl.h +--- + gnulib-tests/test-isnanl.h | 9 +++++++++ + gnulib-tests/test-signbit.c | 10 ++++++++++ + 2 files changed, 19 insertions(+) + +Index: gnulib-tests/test-isnanl.h +=================================================================== +--- gnulib-tests/test-isnanl.h.orig 2014-01-03 18:18:24.131884585 +0100 ++++ gnulib-tests/test-isnanl.h 2014-01-03 19:47:25.428781733 +0100 @@ -51,6 +51,15 @@ main () /* A bit pattern that is different from a Quiet NaN. With a bit of luck, it's a Signalling NaN. */ @@ -18,10 +23,10 @@ index 06e6a7c..2df10f8 100644 memory_long_double m; m.value = NaNl (); # if LDBL_EXPBIT0_BIT > 0 -diff --git a/gnulib-tests/test-signbit.c b/gnulib-tests/test-signbit.c -index e8ea097..7e24292 100644 ---- a/gnulib-tests/test-signbit.c -+++ b/gnulib-tests/test-signbit.c +Index: gnulib-tests/test-signbit.c +=================================================================== +--- gnulib-tests/test-signbit.c.orig 2014-01-03 18:18:24.131884585 +0100 ++++ gnulib-tests/test-signbit.c 2014-01-03 19:47:25.446784284 +0100 @@ -151,6 +151,16 @@ test_signbitl () #define NWORDS \ ((sizeof (long double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) diff --git a/coreutils-i18n.patch b/coreutils-i18n.patch index dbf4248..a7b6a17 100644 --- a/coreutils-i18n.patch +++ b/coreutils-i18n.patch @@ -1,12 +1,12 @@ lib/linebuffer.h | 8 - src/cut.c | 426 ++++++++++++++++++++++++- - src/expand.c | 160 +++++++++ + src/cut.c | 427 ++++++++++++++++++++++++- + src/expand.c | 165 +++++++++ src/fold.c | 308 ++++++++++++++++-- - src/join.c | 361 ++++++++++++++++++--- - src/pr.c | 448 +++++++++++++++++++++++--- - src/sort.c | 745 +++++++++++++++++++++++++++++++++++++++++--- + src/join.c | 363 ++++++++++++++++++--- + src/pr.c | 444 +++++++++++++++++++++++--- + src/sort.c | 743 +++++++++++++++++++++++++++++++++++++++++--- src/unexpand.c | 228 +++++++++++++ - src/uniq.c | 266 +++++++++++++++ + src/uniq.c | 265 +++++++++++++++ tests/local.mk | 1 tests/misc/cut.pl | 7 tests/misc/expand.pl | 40 ++ @@ -14,17 +14,16 @@ tests/misc/join.pl | 50 ++ tests/misc/sort-mb-tests.sh | 45 ++ tests/misc/sort-merge.pl | 42 ++ - tests/misc/sort.pl | 38 ++ + tests/misc/sort.pl | 39 ++ tests/misc/unexpand.pl | 39 ++ - tests/misc/uniq.pl | 46 ++ + tests/misc/uniq.pl | 55 +++ tests/pr/pr-tests.pl | 49 ++ - 20 files changed, 3169 insertions(+), 188 deletions(-) - + 20 files changed, 3188 insertions(+), 180 deletions(-) Index: lib/linebuffer.h =================================================================== ---- lib/linebuffer.h.orig -+++ lib/linebuffer.h +--- lib/linebuffer.h.orig 2014-01-03 19:41:22.471341613 +0100 ++++ lib/linebuffer.h 2014-01-03 19:41:29.153288891 +0100 @@ -21,6 +21,11 @@ # include @@ -49,8 +48,8 @@ Index: lib/linebuffer.h /* Initialize linebuffer LINEBUFFER for use. */ Index: src/cut.c =================================================================== ---- src/cut.c.orig -+++ src/cut.c +--- src/cut.c.orig 2014-01-03 19:41:22.471341613 +0100 ++++ src/cut.c 2014-01-03 19:39:43.030242000 +0100 @@ -28,6 +28,11 @@ #include #include @@ -82,8 +81,8 @@ Index: src/cut.c /* The official name of this program (e.g., no 'g' prefix). */ #define PROGRAM_NAME "cut" -@@ -72,6 +89,52 @@ - } \ +@@ -53,6 +70,52 @@ + } \ while (0) +/* Refill the buffer BUF to get a multibyte character. */ @@ -100,7 +99,7 @@ Index: src/cut.c + while (0) + +/* Get wide character on BUFPOS. BUFPOS is not included after that. -+ If byte sequence is not valid as a character, CONVFAIL is 1. Otherwise 0. */ ++ 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 \ + { \ @@ -113,7 +112,7 @@ Index: src/cut.c + } \ + \ + /* Get a wide character. */ \ -+ CONVFAIL = 0; \ ++ CONVFAIL = false; \ + state_bak = STATE; \ + MBLENGTH = mbrtowc ((wchar_t *)&WC, BUFPOS, BUFLEN, &STATE); \ + \ @@ -121,7 +120,7 @@ Index: src/cut.c + { \ + case (size_t)-1: \ + case (size_t)-2: \ -+ CONVFAIL++; \ ++ CONVFAIL = true; \ + STATE = state_bak; \ + /* Fall througn. */ \ + \ @@ -132,33 +131,10 @@ Index: src/cut.c + } \ + while (0) + + struct range_pair { - size_t lo; -@@ -90,7 +153,7 @@ static char *field_1_buffer; - /* The number of bytes allocated for FIELD_1_BUFFER. */ - static size_t field_1_bufsize; - --/* The largest field or byte index used as an endpoint of a closed -+/* The largest byte, character or field index used as an endpoint of a closed - or degenerate range specification; this doesn't include the starting - index of right-open-ended ranges. For example, with either range spec - '2-5,9-', '2-3,5,9-' this variable would be set to 5. */ -@@ -102,10 +165,11 @@ static size_t eol_range_start; - - /* This is a bit vector. - In byte mode, which bytes to output. -+ In character mode, which characters to output. - In field mode, which DELIM-separated fields to output. -- Both bytes and fields are numbered starting with 1, -+ Bytes, characters and fields are numbered starting with 1, - so the zeroth bit of this array is unused. -- A field or byte K has been selected if -+ A byte, character or field K has been selected if - (K <= MAX_RANGE_ENDPOINT and is_printable_field(K)) - || (EOL_RANGE_START > 0 && K >= EOL_RANGE_START). */ - static unsigned char *printable_field; -@@ -114,15 +178,25 @@ enum operating_mode +@@ -106,15 +169,25 @@ enum operating_mode { undefined_mode, @@ -185,7 +161,7 @@ Index: src/cut.c /* If true do not output lines containing no delimeter characters. Otherwise, all such lines are printed. This option is valid only with field mode. */ -@@ -134,6 +208,9 @@ static bool complement; +@@ -126,6 +199,9 @@ static bool complement; /* The delimeter character for field mode. */ static unsigned char delim; @@ -195,7 +171,7 @@ Index: src/cut.c /* True if the --output-delimiter=STRING option was specified. */ static bool output_delimiter_specified; -@@ -205,7 +282,7 @@ Print selected parts of lines from each +@@ -188,7 +264,7 @@ Print selected parts of lines from each -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\ @@ -204,7 +180,7 @@ Index: src/cut.c "), stdout); fputs (_("\ --complement complement the set of selected bytes, characters\n\ -@@ -480,6 +557,9 @@ set_fields (const char *fieldstr) +@@ -381,6 +457,9 @@ set_fields (const char *fieldstr) if (operating_mode == byte_mode) error (0, 0, _("byte offset %s is too large"), quote (bad_num)); @@ -214,7 +190,7 @@ Index: src/cut.c else error (0, 0, _("field number %s is too large"), quote (bad_num)); -@@ -588,6 +668,77 @@ cut_bytes (FILE *stream) +@@ -505,6 +584,82 @@ cut_bytes (FILE *stream) } } @@ -230,7 +206,7 @@ Index: src/cut.c +static void +cut_characters_or_cut_bytes_no_split (FILE *stream) +{ -+ int idx; /* number of bytes or characters in the line so far. */ ++ 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. */ @@ -238,7 +214,7 @@ Index: src/cut.c + size_t mblength; /* The byte size of a multibyte character which shows + as same character as WC. */ + mbstate_t state; /* State of the stream. */ -+ int convfail = 0; /* 1, when conversion is failed. Otherwise 0. */ ++ 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; @@ -248,11 +224,14 @@ Index: src/cut.c + bufpos = buf; + memset (&state, '\0', sizeof(mbstate_t)); + ++ current_rp = rp; ++ + 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) + { @@ -265,20 +244,22 @@ Index: src/cut.c + putchar ('\n'); + idx = 0; + print_delimiter = false; ++ current_rp = rp; + } + else + { -+ bool range_start; -+ bool *rs = output_delimiter_specified ? &range_start : NULL; -+ idx += (operating_mode == byte_mode) ? mblength : 1; -+ if (print_kth (idx, rs)) ++ next_item (&idx); ++ if (print_kth (idx)) + { -+ if (rs && *rs && print_delimiter) ++ if (output_delimiter_specified) + { -+ fwrite (output_delimiter_string, sizeof (char), -+ output_delimiter_length, stdout); -+ } -+ print_delimiter = true; ++ 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); + } + } @@ -292,7 +273,7 @@ Index: src/cut.c /* Read from stream STREAM, printing to standard output any selected fields. */ static void -@@ -709,13 +860,195 @@ cut_fields (FILE *stream) +@@ -629,13 +784,198 @@ cut_fields (FILE *stream) } } @@ -301,7 +282,7 @@ Index: src/cut.c +cut_fields_mb (FILE *stream) +{ + int c; -+ unsigned int field_idx; ++ size_t field_idx; + int found_any_selected_field; + int buffer_first_field; + int empty_input; @@ -312,7 +293,9 @@ Index: src/cut.c + size_t mblength; /* The byte size of a multibyte character which shows + as same character as WC. */ + mbstate_t state; /* State of the stream. */ -+ int convfail = 0; /* 1, when conversion is failed. Otherwise 0. */ ++ bool convfail = false; /* true, when conversion failed. Otherwise false. */ ++ ++ current_rp = rp; + + found_any_selected_field = 0; + field_idx = 1; @@ -336,7 +319,7 @@ Index: src/cut.c + 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, NULL)); ++ buffer_first_field = (suppress_non_delimited ^ !print_kth (1)); + + while (1) + { @@ -386,18 +369,18 @@ Index: src/cut.c + continue; + } + -+ if (print_kth (1, NULL)) ++ 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; + } -+ ++field_idx; ++ next_item (&field_idx); + } + + if (wc != WEOF) + { -+ if (print_kth (field_idx, NULL)) ++ if (print_kth (field_idx)) + { + if (found_any_selected_field) + { @@ -423,7 +406,7 @@ Index: src/cut.c + break; + } + -+ if (print_kth (field_idx, NULL)) ++ if (print_kth (field_idx)) + fwrite (bufpos, mblength, sizeof(char), stdout); + + buflen -= mblength; @@ -435,7 +418,7 @@ Index: src/cut.c + wc = WEOF; + + if (!convfail && wc == wcdelim) -+ ++field_idx; ++ next_item (&field_idx); + else if (wc == WEOF || (!convfail && wc == L'\n')) + { + if (found_any_selected_field @@ -444,6 +427,7 @@ Index: src/cut.c + if (wc == WEOF) + break; + field_idx = 1; ++ current_rp = rp; + found_any_selected_field = 0; + } + } @@ -491,7 +475,7 @@ Index: src/cut.c } /* Process file FILE to standard output. -@@ -767,6 +1100,8 @@ main (int argc, char **argv) +@@ -687,6 +1027,8 @@ main (int argc, char **argv) bool ok; bool delim_specified = false; char *spec_list_string IF_LINT ( = NULL); @@ -500,7 +484,7 @@ Index: src/cut.c initialize_main (&argc, &argv); set_program_name (argv[0]); -@@ -789,7 +1124,6 @@ main (int argc, char **argv) +@@ -709,7 +1051,6 @@ main (int argc, char **argv) switch (optc) { case 'b': @@ -508,7 +492,7 @@ Index: src/cut.c /* Build the byte list. */ if (operating_mode != undefined_mode) FATAL_ERROR (_("only one type of list may be specified")); -@@ -797,6 +1131,14 @@ main (int argc, char **argv) +@@ -717,6 +1058,14 @@ main (int argc, char **argv) spec_list_string = optarg; break; @@ -523,7 +507,7 @@ Index: src/cut.c case 'f': /* Build the field list. */ if (operating_mode != undefined_mode) -@@ -808,10 +1150,36 @@ main (int argc, char **argv) +@@ -728,10 +1077,36 @@ main (int argc, char **argv) case 'd': /* New delimiter. */ /* Interpret -d '' to mean 'use the NUL byte as the delimiter.' */ @@ -564,7 +548,7 @@ Index: src/cut.c break; case OUTPUT_DELIMITER_OPTION: -@@ -824,6 +1192,7 @@ main (int argc, char **argv) +@@ -744,6 +1119,7 @@ main (int argc, char **argv) break; case 'n': @@ -572,7 +556,7 @@ Index: src/cut.c break; case 's': -@@ -873,15 +1242,34 @@ main (int argc, char **argv) +@@ -783,15 +1159,34 @@ main (int argc, char **argv) } if (!delim_specified) @@ -615,9 +599,9 @@ Index: src/cut.c if (optind == argc) Index: src/expand.c =================================================================== ---- src/expand.c.orig -+++ src/expand.c -@@ -37,12 +37,29 @@ +--- src/expand.c.orig 2014-01-03 19:41:22.471341613 +0100 ++++ src/expand.c 2014-01-03 19:39:43.031243000 +0100 +@@ -37,12 +37,34 @@ #include #include #include @@ -626,6 +610,11 @@ Index: src/expand.c +#if HAVE_WCHAR_H +# include +#endif ++ ++/* Get iswblank(). */ ++#if HAVE_WCTYPE_H ++# include ++#endif + #include "system.h" #include "error.h" @@ -647,7 +636,7 @@ Index: src/expand.c /* The official name of this program (e.g., no 'g' prefix). */ #define PROGRAM_NAME "expand" -@@ -357,6 +374,142 @@ expand (void) +@@ -357,6 +379,142 @@ expand (void) } } @@ -790,7 +779,7 @@ Index: src/expand.c int main (int argc, char **argv) { -@@ -421,7 +574,12 @@ main (int argc, char **argv) +@@ -421,7 +579,12 @@ main (int argc, char **argv) file_list = (optind < argc ? &argv[optind] : stdin_argv); @@ -806,8 +795,8 @@ Index: src/expand.c error (EXIT_FAILURE, errno, "-"); Index: src/fold.c =================================================================== ---- src/fold.c.orig -+++ src/fold.c +--- src/fold.c.orig 2014-01-03 19:41:22.471341613 +0100 ++++ src/fold.c 2014-01-03 19:39:43.032243000 +0100 @@ -22,12 +22,34 @@ #include #include @@ -1148,7 +1137,7 @@ Index: src/fold.c + Return 0 if successful, 1 if an error occurs. */ + +static bool -+fold_file (char *filename, size_t width) ++fold_file (char const *filename, size_t width) +{ + FILE *istream; + int saved_errno; @@ -1207,8 +1196,8 @@ Index: src/fold.c case 's': /* Break at word boundaries. */ Index: src/join.c =================================================================== ---- src/join.c.orig -+++ src/join.c +--- src/join.c.orig 2014-01-03 19:41:22.471341613 +0100 ++++ src/join.c 2014-01-03 19:39:43.048245000 +0100 @@ -22,18 +22,32 @@ #include #include @@ -1260,7 +1249,7 @@ Index: src/join.c /* If nonzero, check that the input is correctly ordered. */ static enum -@@ -262,13 +278,14 @@ xfields (struct line *line) +@@ -269,13 +285,14 @@ xfields (struct line *line) if (ptr == lim) return; @@ -1278,7 +1267,7 @@ Index: src/join.c { /* Skip leading blanks before the first field. */ while (isblank (to_uchar (*ptr))) -@@ -292,6 +309,148 @@ xfields (struct line *line) +@@ -299,6 +316,147 @@ xfields (struct line *line) extract_field (line, ptr, lim - ptr); } @@ -1299,7 +1288,6 @@ Index: src/join.c + + if (tab != NULL) + { -+ unsigned char t = tab[0]; + char *sep = ptr; + for (; ptr < lim; ptr = sep + mblength) + { @@ -1427,7 +1415,7 @@ Index: src/join.c static void freeline (struct line *line) { -@@ -313,56 +472,130 @@ keycmp (struct line const *line1, struct +@@ -320,56 +478,133 @@ keycmp (struct line const *line1, struct size_t jf_1, size_t jf_2) { /* Start of field to compare in each file. */ @@ -1498,7 +1486,8 @@ Index: src/join.c + for (i = 0; i < 2; i++) + { + mallocd = 1; -+ copy[i] = xcalloc (1, len[i] + 1); ++ copy[i] = xmalloc (len[i] + 1); ++ memset (copy[i], '\0',len[i] + 1); + + for (j = 0; j < MIN (len[0], len[1]);) + { @@ -1521,9 +1510,11 @@ Index: src/join.c + if (uwc != wc) + { + mbstate_t state_wc; ++ size_t mblen; + + memset (&state_wc, '\0', sizeof (mbstate_t)); -+ wcrtomb (copy[i] + j, uwc, &state_wc); ++ mblen = wcrtomb (copy[i] + j, uwc, &state_wc); ++ assert (mblen != (size_t)-1); + } + else + memcpy (copy[i] + j, beg[i] + j, mblength); @@ -1553,8 +1544,8 @@ Index: src/join.c - if (hard_LC_COLLATE) - return xmemcoll (beg1, len1, beg2, len2); - diff = memcmp (beg1, beg2, MIN (len1, len2)); -+ copy[0] = (unsigned char *) beg[0]; -+ copy[1] = (unsigned char *) beg[1]; ++ copy[0] = beg[0]; ++ copy[1] = beg[1]; + } + + if (hard_LC_COLLATE) @@ -1581,7 +1572,7 @@ Index: src/join.c } /* Check that successive input lines PREV and CURRENT from input file -@@ -454,6 +687,11 @@ get_line (FILE *fp, struct line **linep, +@@ -461,6 +696,11 @@ get_line (FILE *fp, struct line **linep, } ++line_no[which - 1]; @@ -1593,7 +1584,7 @@ Index: src/join.c xfields (line); if (prevline[which - 1]) -@@ -553,21 +791,28 @@ prfield (size_t n, struct line const *li +@@ -560,21 +800,28 @@ prfield (size_t n, struct line const *li /* Output all the fields in line, other than the join field. */ @@ -1625,7 +1616,7 @@ Index: src/join.c prfield (i, line); } } -@@ -578,7 +823,6 @@ static void +@@ -585,7 +832,6 @@ static void prjoin (struct line const *line1, struct line const *line2) { const struct outlist *outlist; @@ -1633,16 +1624,16 @@ Index: src/join.c size_t field; struct line const *line; -@@ -612,7 +856,7 @@ prjoin (struct line const *line1, struct +@@ -619,7 +865,7 @@ prjoin (struct line const *line1, struct o = o->next; if (o == NULL) break; - putchar (output_separator); + PUT_TAB_CHAR; } - putchar ('\n'); + putchar (eolchar); } -@@ -1090,21 +1334,46 @@ main (int argc, char **argv) +@@ -1097,21 +1343,46 @@ main (int argc, char **argv) case 't': { @@ -1670,7 +1661,7 @@ Index: src/join.c if (! newtab) - newtab = '\n'; /* '' => process the whole line. */ + { -+ newtab = "\n"; /* '' => process the whole line. */ ++ newtab = (char*)"\n"; /* '' => process the whole line. */ + } else if (optarg[1]) { @@ -1698,12 +1689,12 @@ Index: src/join.c + } break; - case NOCHECK_ORDER_OPTION: + case 'z': Index: src/pr.c =================================================================== ---- src/pr.c.orig -+++ src/pr.c -@@ -312,6 +312,32 @@ +--- src/pr.c.orig 2014-01-03 19:41:22.471341613 +0100 ++++ src/pr.c 2014-01-03 19:41:29.213297398 +0100 +@@ -312,6 +312,24 @@ #include #include @@ -1724,19 +1715,11 @@ Index: src/pr.c +#if HAVE_WCHAR_H +# include +#endif -+ -+/* Get iswprint(). -- for wcwidth(). */ -+#if HAVE_WCTYPE_H -+# include -+#endif -+#if !defined iswprint && !HAVE_ISWPRINT -+# define iswprint(wc) 1 -+#endif + #include "system.h" #include "error.h" #include "fadvise.h" -@@ -323,6 +349,18 @@ +@@ -323,6 +341,18 @@ #include "strftime.h" #include "xstrtol.h" @@ -1755,7 +1738,7 @@ Index: src/pr.c /* The official name of this program (e.g., no 'g' prefix). */ #define PROGRAM_NAME "pr" -@@ -415,7 +453,20 @@ struct COLUMN +@@ -415,7 +445,20 @@ struct COLUMN typedef struct COLUMN COLUMN; @@ -1777,7 +1760,7 @@ Index: src/pr.c static bool read_line (COLUMN *p); static bool print_page (void); static bool print_stored (COLUMN *p); -@@ -425,6 +476,7 @@ static void print_header (void); +@@ -425,6 +468,7 @@ static void print_header (void); static void pad_across_to (int position); static void add_line_number (COLUMN *p); static void getoptarg (char *arg, char switch_char, char *character, @@ -1785,7 +1768,7 @@ Index: src/pr.c int *number); static void print_files (int number_of_files, char **av); static void init_parameters (int number_of_files); -@@ -438,7 +490,6 @@ static void store_char (char c); +@@ -438,7 +482,6 @@ static void store_char (char c); static void pad_down (int lines); static void read_rest_of_line (COLUMN *p); static void skip_read (COLUMN *p, int column_number); @@ -1793,7 +1776,7 @@ Index: src/pr.c static void cleanup (void); static void print_sep_string (void); static void separator_string (const char *optarg_S); -@@ -450,7 +501,7 @@ static COLUMN *column_vector; +@@ -450,7 +493,7 @@ static COLUMN *column_vector; we store the leftmost columns contiguously in buff. To print a line from buff, get the index of the first character from line_vector[i], and print up to line_vector[i + 1]. */ @@ -1802,7 +1785,7 @@ Index: src/pr.c /* Index of the position in buff where the next character will be stored. */ -@@ -554,7 +605,7 @@ static int chars_per_column; +@@ -554,7 +597,7 @@ static int chars_per_column; static bool untabify_input = false; /* (-e) The input tab character. */ @@ -1811,7 +1794,7 @@ Index: src/pr.c /* (-e) Tabstops are at chars_per_tab, 2*chars_per_tab, 3*chars_per_tab, ... where the leftmost column is 1. */ -@@ -564,7 +615,10 @@ static int chars_per_input_tab = 8; +@@ -564,7 +607,10 @@ static int chars_per_input_tab = 8; static bool tabify_output = false; /* (-i) The output tab character. */ @@ -1823,7 +1806,7 @@ Index: src/pr.c /* (-i) The width of the output tab. */ static int chars_per_output_tab = 8; -@@ -634,7 +688,13 @@ static int line_number; +@@ -634,7 +680,13 @@ static int line_number; static bool numbered_lines = false; /* (-n) Character which follows each line number. */ @@ -1838,7 +1821,7 @@ Index: src/pr.c /* (-n) line counting starts with 1st line of input file (not with 1st line of 1st page printed). */ -@@ -687,6 +747,7 @@ static bool use_col_separator = false; +@@ -687,6 +739,7 @@ static bool use_col_separator = false; -a|COLUMN|-m is a 'space' and with the -J option a 'tab'. */ static char *col_sep_string = (char *) ""; static int col_sep_length = 0; @@ -1846,7 +1829,7 @@ Index: src/pr.c static char *column_separator = (char *) " "; static char *line_separator = (char *) "\t"; -@@ -843,6 +904,13 @@ separator_string (const char *optarg_S) +@@ -843,6 +896,13 @@ separator_string (const char *optarg_S) col_sep_length = (int) strlen (optarg_S); col_sep_string = xmalloc (col_sep_length + 1); strcpy (col_sep_string, optarg_S); @@ -1860,7 +1843,7 @@ Index: src/pr.c } int -@@ -867,6 +935,21 @@ main (int argc, char **argv) +@@ -867,6 +927,21 @@ main (int argc, char **argv) atexit (close_stdout); @@ -1882,7 +1865,7 @@ Index: src/pr.c n_files = 0; file_names = (argc > 1 ? xmalloc ((argc - 1) * sizeof (char *)) -@@ -943,8 +1026,12 @@ main (int argc, char **argv) +@@ -943,8 +1018,12 @@ main (int argc, char **argv) break; case 'e': if (optarg) @@ -1897,7 +1880,7 @@ Index: src/pr.c /* Could check tab width > 0. */ untabify_input = true; break; -@@ -957,8 +1044,12 @@ main (int argc, char **argv) +@@ -957,8 +1036,12 @@ main (int argc, char **argv) break; case 'i': if (optarg) @@ -1912,7 +1895,7 @@ Index: src/pr.c /* Could check tab width > 0. */ tabify_output = true; break; -@@ -985,8 +1076,8 @@ main (int argc, char **argv) +@@ -985,8 +1068,8 @@ main (int argc, char **argv) case 'n': numbered_lines = true; if (optarg) @@ -1923,7 +1906,7 @@ Index: src/pr.c break; case 'N': skip_count = false; -@@ -1025,7 +1116,7 @@ main (int argc, char **argv) +@@ -1025,7 +1108,7 @@ main (int argc, char **argv) old_s = false; /* Reset an additional input of -s, -S dominates -s */ col_sep_string = bad_cast (""); @@ -1932,7 +1915,7 @@ Index: src/pr.c use_col_separator = true; if (optarg) separator_string (optarg); -@@ -1182,10 +1273,45 @@ main (int argc, char **argv) +@@ -1182,10 +1265,45 @@ main (int argc, char **argv) a number. */ static void @@ -1980,7 +1963,7 @@ Index: src/pr.c if (*arg) { long int tmp_long; -@@ -1207,6 +1333,11 @@ static void +@@ -1207,6 +1325,11 @@ static void init_parameters (int number_of_files) { int chars_used_by_number = 0; @@ -1992,7 +1975,7 @@ Index: src/pr.c lines_per_body = lines_per_page - lines_per_header - lines_per_footer; if (lines_per_body <= 0) -@@ -1244,7 +1375,7 @@ init_parameters (int number_of_files) +@@ -1244,7 +1367,7 @@ init_parameters (int number_of_files) else col_sep_string = column_separator; @@ -2001,7 +1984,7 @@ Index: src/pr.c use_col_separator = true; } /* It's rather pointless to define a TAB separator with column -@@ -1274,11 +1405,11 @@ init_parameters (int number_of_files) +@@ -1274,11 +1397,11 @@ init_parameters (int number_of_files) + TAB_WIDTH (chars_per_input_tab, chars_per_number); */ /* Estimate chars_per_text without any margin and keep it constant. */ @@ -2015,7 +1998,7 @@ Index: src/pr.c /* The number is part of the column width unless we are printing files in parallel. */ -@@ -1287,7 +1418,7 @@ init_parameters (int number_of_files) +@@ -1287,7 +1410,7 @@ init_parameters (int number_of_files) } chars_per_column = (chars_per_line - chars_used_by_number @@ -2024,7 +2007,7 @@ Index: src/pr.c if (chars_per_column < 1) error (EXIT_FAILURE, 0, _("page width too narrow")); -@@ -1305,7 +1436,7 @@ init_parameters (int number_of_files) +@@ -1305,7 +1428,7 @@ init_parameters (int number_of_files) We've to use 8 as the lower limit, if we use chars_per_default_tab = 8 to expand a tab which is not an input_tab-char. */ free (clump_buff); @@ -2033,7 +2016,7 @@ Index: src/pr.c } /* Open the necessary files, -@@ -1413,7 +1544,7 @@ init_funcs (void) +@@ -1413,7 +1536,7 @@ init_funcs (void) /* Enlarge p->start_position of first column to use the same form of padding_not_printed with all columns. */ @@ -2042,7 +2025,7 @@ Index: src/pr.c /* This loop takes care of all but the rightmost column. */ -@@ -1447,7 +1578,7 @@ init_funcs (void) +@@ -1447,7 +1570,7 @@ init_funcs (void) } else { @@ -2051,7 +2034,7 @@ Index: src/pr.c h_next = h + chars_per_column; } } -@@ -1738,9 +1869,9 @@ static void +@@ -1738,9 +1861,9 @@ static void align_column (COLUMN *p) { padding_not_printed = p->start_position; @@ -2063,7 +2046,7 @@ Index: src/pr.c padding_not_printed = ANYWHERE; } -@@ -2011,13 +2142,13 @@ store_char (char c) +@@ -2011,13 +2134,13 @@ store_char (char c) /* May be too generous. */ buff = X2REALLOC (buff, &buff_allocated); } @@ -2079,7 +2062,7 @@ Index: src/pr.c char *s; int num_width; -@@ -2034,22 +2165,24 @@ add_line_number (COLUMN *p) +@@ -2034,22 +2157,24 @@ add_line_number (COLUMN *p) /* Tabification is assumed for multiple columns, also for n-separators, but 'default n-separator = TAB' hasn't been given priority over equal column_width also specified by POSIX. */ @@ -2108,7 +2091,7 @@ Index: src/pr.c output_position = POS_AFTER_TAB (chars_per_output_tab, output_position); } -@@ -2210,7 +2343,7 @@ print_white_space (void) +@@ -2210,7 +2335,7 @@ print_white_space (void) while (goal - h_old > 1 && (h_new = POS_AFTER_TAB (chars_per_output_tab, h_old)) <= goal) { @@ -2117,7 +2100,7 @@ Index: src/pr.c h_old = h_new; } while (++h_old <= goal) -@@ -2230,6 +2363,7 @@ print_sep_string (void) +@@ -2230,6 +2355,7 @@ print_sep_string (void) { char *s; int l = col_sep_length; @@ -2125,7 +2108,7 @@ Index: src/pr.c s = col_sep_string; -@@ -2243,6 +2377,7 @@ print_sep_string (void) +@@ -2243,6 +2369,7 @@ print_sep_string (void) { for (; separators_not_printed > 0; --separators_not_printed) { @@ -2133,7 +2116,7 @@ Index: src/pr.c while (l-- > 0) { /* 3 types of sep_strings: spaces only, spaces and chars, -@@ -2256,12 +2391,15 @@ print_sep_string (void) +@@ -2256,12 +2383,15 @@ print_sep_string (void) } else { @@ -2150,7 +2133,7 @@ Index: src/pr.c /* sep_string ends with some spaces */ if (spaces_not_printed > 0) print_white_space (); -@@ -2289,7 +2427,7 @@ print_clump (COLUMN *p, int n, char *clu +@@ -2289,7 +2419,7 @@ print_clump (COLUMN *p, int n, char *clu required number of tabs and spaces. */ static void @@ -2159,7 +2142,7 @@ Index: src/pr.c { if (tabify_output) { -@@ -2313,6 +2451,74 @@ print_char (char c) +@@ -2313,6 +2443,74 @@ print_char (char c) putchar (c); } @@ -2234,7 +2217,7 @@ Index: src/pr.c /* Skip to page PAGE before printing. PAGE may be larger than total number of pages. */ -@@ -2492,9 +2698,9 @@ read_line (COLUMN *p) +@@ -2492,9 +2690,9 @@ read_line (COLUMN *p) align_empty_cols = false; } @@ -2246,7 +2229,25 @@ Index: src/pr.c padding_not_printed = ANYWHERE; } -@@ -2595,9 +2801,9 @@ print_stored (COLUMN *p) +@@ -2564,7 +2762,7 @@ print_stored (COLUMN *p) + int i; + + int line = p->current_line++; +- char *first = &buff[line_vector[line]]; ++ unsigned char *first = &buff[line_vector[line]]; + /* FIXME + UMR: Uninitialized memory read: + * This is occurring while in: +@@ -2576,7 +2774,7 @@ print_stored (COLUMN *p) + xmalloc [xmalloc.c:94] + init_store_cols [pr.c:1648] + */ +- char *last = &buff[line_vector[line + 1]]; ++ unsigned char *last = &buff[line_vector[line + 1]]; + + pad_vertically = true; + +@@ -2595,9 +2793,9 @@ print_stored (COLUMN *p) } } @@ -2258,7 +2259,7 @@ Index: src/pr.c padding_not_printed = ANYWHERE; } -@@ -2610,8 +2816,8 @@ print_stored (COLUMN *p) +@@ -2610,8 +2808,8 @@ print_stored (COLUMN *p) if (spaces_not_printed == 0) { output_position = p->start_position + end_vector[line]; @@ -2269,7 +2270,7 @@ Index: src/pr.c } return true; -@@ -2630,7 +2836,7 @@ print_stored (COLUMN *p) +@@ -2630,7 +2828,7 @@ print_stored (COLUMN *p) number of characters is 1.) */ static int @@ -2278,7 +2279,7 @@ Index: src/pr.c { unsigned char uc = c; char *s = clump_buff; -@@ -2640,10 +2846,10 @@ char_to_clump (char c) +@@ -2640,10 +2838,10 @@ char_to_clump (char c) int chars; int chars_per_c = 8; @@ -2291,7 +2292,7 @@ Index: src/pr.c { width = TAB_WIDTH (chars_per_c, input_position); -@@ -2724,6 +2930,164 @@ char_to_clump (char c) +@@ -2724,6 +2922,164 @@ char_to_clump (char c) return chars; } @@ -2458,8 +2459,8 @@ Index: src/pr.c Index: src/sort.c =================================================================== ---- src/sort.c.orig -+++ src/sort.c +--- src/sort.c.orig 2014-01-03 19:41:22.471341613 +0100 ++++ src/sort.c 2014-01-03 19:39:43.061247000 +0100 @@ -29,6 +29,14 @@ #include #include @@ -2475,8 +2476,13 @@ Index: src/sort.c #include "system.h" #include "argmatch.h" #include "error.h" -@@ -166,12 +174,34 @@ static int thousands_sep; +@@ -164,14 +172,39 @@ static int decimal_point; + /* Thousands separator; if -1, then there isn't one. */ + static int thousands_sep; ++/* True if -f is specified. */ ++static bool folding; ++ /* Nonzero if the corresponding locales are hard. */ static bool hard_LC_COLLATE; -#if HAVE_NL_LANGINFO @@ -2511,7 +2517,7 @@ Index: src/sort.c /* The kind of blanks for '-b' to skip in various options. */ enum blanktype { bl_start, bl_end, bl_both }; -@@ -345,13 +375,11 @@ static bool reverse; +@@ -345,13 +378,11 @@ static bool reverse; they were read if all keys compare equal. */ static bool stable; @@ -2528,7 +2534,7 @@ Index: src/sort.c /* Flag to remove consecutive duplicate lines from the output. Only the last of a sequence of equal lines will be output. */ -@@ -783,6 +811,46 @@ reap_all (void) +@@ -811,6 +842,46 @@ reap_all (void) reap (-1); } @@ -2575,7 +2581,7 @@ Index: src/sort.c /* Clean up any remaining temporary files. */ static void -@@ -1223,7 +1291,7 @@ zaptemp (char const *name) +@@ -1255,7 +1326,7 @@ zaptemp (char const *name) free (node); } @@ -2584,7 +2590,7 @@ Index: src/sort.c static int struct_month_cmp (void const *m1, void const *m2) -@@ -1238,7 +1306,7 @@ struct_month_cmp (void const *m1, void c +@@ -1270,7 +1341,7 @@ struct_month_cmp (void const *m1, void c /* Initialize the character class tables. */ static void @@ -2593,7 +2599,7 @@ Index: src/sort.c { size_t i; -@@ -1250,7 +1318,7 @@ inittables (void) +@@ -1282,7 +1353,7 @@ inittables (void) fold_toupper[i] = toupper (i); } @@ -2602,7 +2608,7 @@ Index: src/sort.c /* If we're not in the "C" locale, read different names for months. */ if (hard_LC_TIME) { -@@ -1332,6 +1400,84 @@ specify_nmerge (int oi, char c, char con +@@ -1364,6 +1435,84 @@ specify_nmerge (int oi, char c, char con xstrtol_fatal (e, oi, c, long_options, s); } @@ -2687,7 +2693,7 @@ Index: src/sort.c /* Specify the amount of main memory to use when sorting. */ static void specify_sort_size (int oi, char c, char const *s) -@@ -1564,7 +1710,7 @@ buffer_linelim (struct buffer const *buf +@@ -1597,7 +1746,7 @@ buffer_linelim (struct buffer const *buf by KEY in LINE. */ static char * @@ -2696,7 +2702,7 @@ Index: src/sort.c { char *ptr = line->text, *lim = ptr + line->length - 1; size_t sword = key->sword; -@@ -1573,10 +1719,10 @@ begfield (struct line const *line, struc +@@ -1606,10 +1755,10 @@ begfield (struct line const *line, struc /* The leading field separator itself is included in a field when -t is absent. */ @@ -2709,7 +2715,7 @@ Index: src/sort.c ++ptr; if (ptr < lim) ++ptr; -@@ -1602,11 +1748,70 @@ begfield (struct line const *line, struc +@@ -1635,11 +1784,70 @@ begfield (struct line const *line, struc return ptr; } @@ -2781,7 +2787,7 @@ Index: src/sort.c { char *ptr = line->text, *lim = ptr + line->length - 1; size_t eword = key->eword, echar = key->echar; -@@ -1621,10 +1826,10 @@ limfield (struct line const *line, struc +@@ -1654,10 +1862,10 @@ limfield (struct line const *line, struc 'beginning' is the first character following the delimiting TAB. Otherwise, leave PTR pointing at the first 'blank' character after the preceding field. */ @@ -2794,7 +2800,7 @@ Index: src/sort.c ++ptr; if (ptr < lim && (eword || echar)) ++ptr; -@@ -1670,10 +1875,10 @@ limfield (struct line const *line, struc +@@ -1703,10 +1911,10 @@ limfield (struct line const *line, struc */ /* Make LIM point to the end of (one byte past) the current field. */ @@ -2807,7 +2813,7 @@ Index: src/sort.c if (newlim) lim = newlim; } -@@ -1704,6 +1909,130 @@ limfield (struct line const *line, struc +@@ -1737,6 +1945,130 @@ limfield (struct line const *line, struc return ptr; } @@ -2938,7 +2944,7 @@ Index: src/sort.c /* Fill BUF reading from FP, moving buf->left bytes from the end of buf->buf to the beginning first. If EOF is reached and the file wasn't terminated by a newline, supply one. Set up BUF's line -@@ -1790,8 +2119,22 @@ fillbuf (struct buffer *buf, FILE *fp, c +@@ -1823,8 +2155,22 @@ fillbuf (struct buffer *buf, FILE *fp, c else { if (key->skipsblanks) @@ -2963,7 +2969,7 @@ Index: src/sort.c line->keybeg = line_start; } } -@@ -1912,7 +2255,7 @@ human_numcompare (char const *a, char co +@@ -1945,7 +2291,7 @@ human_numcompare (char const *a, char co hideously fast. */ static int @@ -2972,7 +2978,7 @@ Index: src/sort.c { while (blanks[to_uchar (*a)]) a++; -@@ -1922,6 +2265,25 @@ numcompare (char const *a, char const *b +@@ -1955,6 +2301,25 @@ numcompare (char const *a, char const *b return strnumcmp (a, b, decimal_point, thousands_sep); } @@ -2998,7 +3004,7 @@ Index: src/sort.c /* Work around a problem whereby the long double value returned by glibc's strtold ("NaN", ...) contains uninitialized bits: clear all bytes of A and B before calling strtold. FIXME: remove this function once -@@ -1972,7 +2334,7 @@ general_numcompare (char const *sa, char +@@ -2005,7 +2370,7 @@ general_numcompare (char const *sa, char Return 0 if the name in S is not recognized. */ static int @@ -3007,7 +3013,7 @@ Index: src/sort.c { size_t lo = 0; size_t hi = MONTHS_PER_YEAR; -@@ -2247,15 +2609,14 @@ debug_key (struct line const *line, stru +@@ -2280,15 +2645,14 @@ debug_key (struct line const *line, stru char saved = *lim; *lim = '\0'; @@ -3025,7 +3031,7 @@ Index: src/sort.c else if (key->general_numeric) ignore_value (strtold (beg, &tighter_lim)); else if (key->numeric || key->human_numeric) -@@ -2399,7 +2760,7 @@ key_warnings (struct keyfield const *gke +@@ -2432,7 +2796,7 @@ key_warnings (struct keyfield const *gke bool maybe_space_aligned = !hard_LC_COLLATE && default_key_compare (key) && !(key->schar || key->echar); bool line_offset = key->eword == 0 && key->echar != 0; /* -k1.x,1.y */ @@ -3034,7 +3040,7 @@ Index: src/sort.c && ((!key->skipsblanks && !(implicit_skip || maybe_space_aligned)) || (!key->skipsblanks && key->schar) || (!key->skipeblanks && key->echar))) -@@ -2457,11 +2818,87 @@ key_warnings (struct keyfield const *gke +@@ -2490,11 +2854,87 @@ key_warnings (struct keyfield const *gke error (0, 0, _("option '-r' only applies to last-resort comparison")); } @@ -3104,7 +3110,7 @@ Index: src/sort.c + ? monthtab[lo].val : 0); + + if (ea && result) -+ *ea = s + strlen (monthtab[lo].name); ++ *ea = (char*) s + strlen (monthtab[lo].name); + + free (month); + free (tmp); @@ -3123,7 +3129,7 @@ Index: src/sort.c { struct keyfield *key = keylist; -@@ -2546,7 +2983,7 @@ keycompare (struct line const *a, struct +@@ -2579,7 +3019,7 @@ keycompare (struct line const *a, struct else if (key->human_numeric) diff = human_numcompare (ta, tb); else if (key->month) @@ -3132,7 +3138,7 @@ Index: src/sort.c else if (key->random) diff = compare_random (ta, tlena, tb, tlenb); else if (key->version) -@@ -2662,6 +3099,191 @@ keycompare (struct line const *a, struct +@@ -2695,6 +3135,191 @@ keycompare (struct line const *a, struct return key->reverse ? -diff : diff; } @@ -3324,22 +3330,24 @@ Index: src/sort.c /* Compare two lines A and B, returning negative, zero, or positive depending on whether A compares less than, equal to, or greater than B. */ -@@ -2689,14 +3311,6 @@ compare (struct line const *a, struct li +@@ -2722,7 +3347,7 @@ compare (struct line const *a, struct li diff = - NONZERO (blen); else if (blen == 0) diff = 1; - else if (hard_LC_COLLATE) -- { -- /* Note xmemcoll0 is a performance enhancement as -- it will not unconditionally write '\0' after the -- passed in buffers, which was seen to give around -- a 3% increase in performance for short lines. */ -- diff = xmemcoll0 (a->text, alen + 1, b->text, blen + 1); -- } - else if (! (diff = memcmp (a->text, b->text, MIN (alen, blen)))) - diff = alen < blen ? -1 : alen != blen; - -@@ -4157,7 +4771,7 @@ main (int argc, char **argv) ++ else if (hard_LC_COLLATE && !folding) + { + /* Note xmemcoll0 is a performance enhancement as + it will not unconditionally write '\0' after the +@@ -4113,6 +4738,7 @@ set_ordering (char const *s, struct keyf + break; + case 'f': + key->translate = fold_toupper; ++ folding = true; + break; + case 'g': + key->general_numeric = true; +@@ -4190,7 +4816,7 @@ main (int argc, char **argv) initialize_exit_failure (SORT_FAILURE); hard_LC_COLLATE = hard_locale (LC_COLLATE); @@ -3348,7 +3356,7 @@ Index: src/sort.c hard_LC_TIME = hard_locale (LC_TIME); #endif -@@ -4178,6 +4792,29 @@ main (int argc, char **argv) +@@ -4211,6 +4837,29 @@ main (int argc, char **argv) thousands_sep = -1; } @@ -3378,7 +3386,7 @@ Index: src/sort.c have_read_stdin = false; inittables (); -@@ -4452,13 +5089,34 @@ main (int argc, char **argv) +@@ -4485,13 +5134,34 @@ main (int argc, char **argv) case 't': { @@ -3417,7 +3425,7 @@ Index: src/sort.c else { /* Provoke with 'sort -txx'. Complain about -@@ -4469,9 +5127,12 @@ main (int argc, char **argv) +@@ -4502,9 +5172,12 @@ main (int argc, char **argv) quote (optarg)); } } @@ -3434,8 +3442,8 @@ Index: src/sort.c Index: src/unexpand.c =================================================================== ---- src/unexpand.c.orig -+++ src/unexpand.c +--- src/unexpand.c.orig 2014-01-03 19:41:22.471341613 +0100 ++++ src/unexpand.c 2014-01-03 19:41:29.226299241 +0100 @@ -38,12 +38,29 @@ #include #include @@ -3693,9 +3701,9 @@ Index: src/unexpand.c error (EXIT_FAILURE, errno, "-"); Index: src/uniq.c =================================================================== ---- src/uniq.c.orig -+++ src/uniq.c -@@ -21,6 +21,16 @@ +--- src/uniq.c.orig 2014-01-03 19:41:22.471341613 +0100 ++++ src/uniq.c 2014-01-03 19:39:43.083250000 +0100 +@@ -21,6 +21,17 @@ #include #include @@ -3708,11 +3716,12 @@ Index: src/uniq.c +#if HAVE_WCTYPE_H +# include +#endif ++#include + #include "system.h" #include "argmatch.h" #include "linebuffer.h" -@@ -32,7 +42,19 @@ +@@ -32,7 +43,19 @@ #include "stdio--.h" #include "xmemcoll.h" #include "xstrtol.h" @@ -3733,9 +3742,9 @@ Index: src/uniq.c /* The official name of this program (e.g., no 'g' prefix). */ #define PROGRAM_NAME "uniq" -@@ -108,6 +130,10 @@ static enum delimit_method const delimit - /* Select whether/how to delimit groups of duplicate lines. */ - static enum delimit_method delimit_groups; +@@ -143,6 +166,10 @@ enum + GROUP_OPTION = CHAR_MAX + 1 + }; +/* Function pointers. */ +static char * @@ -3744,7 +3753,7 @@ Index: src/uniq.c static struct option const longopts[] = { {"count", no_argument, NULL, 'c'}, -@@ -205,7 +231,7 @@ size_opt (char const *opt, char const *m +@@ -249,7 +276,7 @@ size_opt (char const *opt, char const *m return a pointer to the beginning of the line's field to be compared. */ static char * _GL_ATTRIBUTE_PURE @@ -3753,7 +3762,7 @@ Index: src/uniq.c { size_t count; char const *lp = line->buffer; -@@ -225,6 +251,83 @@ find_field (struct linebuffer const *lin +@@ -269,6 +296,83 @@ find_field (struct linebuffer const *lin return line->buffer + i; } @@ -3837,7 +3846,7 @@ Index: src/uniq.c /* Return false if two strings OLD and NEW match, true if not. OLD and NEW point not to the beginnings of the lines but rather to the beginnings of the fields to compare. -@@ -233,6 +336,8 @@ find_field (struct linebuffer const *lin +@@ -277,6 +381,8 @@ find_field (struct linebuffer const *lin static bool different (char *old, char *new, size_t oldlen, size_t newlen) { @@ -3846,7 +3855,7 @@ Index: src/uniq.c if (check_chars < oldlen) oldlen = check_chars; if (check_chars < newlen) -@@ -240,14 +345,100 @@ different (char *old, char *new, size_t +@@ -284,15 +390,104 @@ different (char *old, char *new, size_t if (ignore_case) { @@ -3878,8 +3887,8 @@ Index: src/uniq.c + + return xmemcoll (copy_old, oldlen, copy_new, newlen); + -+} -+ + } + +#if HAVE_MBRTOWC +static int +different_multi (const char *old, const char *new, size_t oldlen, size_t newlen, mbstate_t oldstate, mbstate_t newstate) @@ -3902,7 +3911,8 @@ Index: src/uniq.c + + for (i = 0; i < 2; i++) + { -+ copy[i] = xcalloc (1, len[i] + 1); ++ copy[i] = xmalloc (len[i] + 1); ++ memset (copy[i], '\0', len[i] + 1); + + for (j = 0, chars = 0; j < len[i] && chars < check_chars; chars++) + { @@ -3927,9 +3937,11 @@ Index: src/uniq.c + if (uwc != wc) + { + mbstate_t state_wc; ++ size_t mblen; + + memset (&state_wc, '\0', sizeof(mbstate_t)); -+ wcrtomb (copy[i] + j, uwc, &state_wc); ++ mblen = wcrtomb (copy[i] + j, uwc, &state_wc); ++ assert (mblen != (size_t)-1); + } + else + memcpy (copy[i] + j, str[i] + j, mblength); @@ -3947,15 +3959,16 @@ Index: src/uniq.c + free (copy[1]); + return rc; + - } ++} +#endif - ++ /* Output the line in linebuffer LINE to standard output provided that the switches say it should be output. -@@ -303,15 +494,43 @@ check_file (const char *infile, const ch - { + MATCH is true if the line matches the previous line. +@@ -356,19 +551,38 @@ check_file (const char *infile, const ch char *prevfield IF_LINT ( = NULL); size_t prevlen IF_LINT ( = 0); + bool first_group_printed = false; +#if HAVE_MBRTOWC + mbstate_t prevstate; + @@ -3966,37 +3979,43 @@ Index: src/uniq.c { char *thisfield; size_t thislen; + bool new_group; +#if HAVE_MBRTOWC + mbstate_t thisstate; +#endif -+ + if (readlinebuffer_delim (thisline, stdin, delimiter) == 0) break; + thisfield = find_field (thisline); thislen = thisline->length - 1 - (thisfield - thisline->buffer); +#if HAVE_MBRTOWC + if (MB_CUR_MAX > 1) + { -+ thisstate = thisline->state; -+ -+ if (prevline->length == 0 || different_multi -+ (thisfield, prevfield, thislen, prevlen, thisstate, prevstate)) -+ { -+ fwrite (thisline->buffer, sizeof (char), -+ thisline->length, stdout); -+ -+ SWAP_LINES (prevline, thisline); -+ prevfield = thisfield; -+ prevlen = thislen; -+ prevstate = thisstate; -+ } -+ } -+ else ++ thisstate = thisline->state; + ++ new_group = (prevline->length == 0 ++ || different_multi (thisfield, prevfield, ++ thislen, prevlen, ++ thisstate, prevstate)); ++ } ++ else +#endif - if (prevline->length == 0 - || different (thisfield, prevfield, thislen, prevlen)) - { -@@ -330,17 +549,26 @@ check_file (const char *infile, const ch + new_group = (prevline->length == 0 + || different (thisfield, prevfield, thislen, prevlen)); + +@@ -386,6 +600,10 @@ check_file (const char *infile, const ch + SWAP_LINES (prevline, thisline); + prevfield = thisfield; + prevlen = thislen; ++#if HAVE_MBRTOWC ++ if (MB_CUR_MAX > 1) ++ prevstate = thisstate; ++#endif + first_group_printed = true; + } + } +@@ -398,17 +616,26 @@ check_file (const char *infile, const ch size_t prevlen; uintmax_t match_count = 0; bool first_delimiter = true; @@ -4023,7 +4042,7 @@ Index: src/uniq.c if (readlinebuffer_delim (thisline, stdin, delimiter) == 0) { if (ferror (stdin)) -@@ -349,6 +577,14 @@ check_file (const char *infile, const ch +@@ -417,6 +644,14 @@ check_file (const char *infile, const ch } thisfield = find_field (thisline); thislen = thisline->length - 1 - (thisfield - thisline->buffer); @@ -4038,7 +4057,7 @@ Index: src/uniq.c match = !different (thisfield, prevfield, thislen, prevlen); match_count += match; -@@ -381,6 +617,9 @@ check_file (const char *infile, const ch +@@ -449,6 +684,9 @@ check_file (const char *infile, const ch SWAP_LINES (prevline, thisline); prevfield = thisfield; prevlen = thislen; @@ -4048,7 +4067,7 @@ Index: src/uniq.c if (!match) match_count = 0; } -@@ -426,6 +665,19 @@ main (int argc, char **argv) +@@ -495,6 +733,19 @@ main (int argc, char **argv) atexit (close_stdout); @@ -4070,9 +4089,9 @@ Index: src/uniq.c check_chars = SIZE_MAX; Index: tests/local.mk =================================================================== ---- tests/local.mk.orig -+++ tests/local.mk -@@ -325,6 +325,7 @@ all_tests = \ +--- tests/local.mk.orig 2014-01-03 19:41:22.471341613 +0100 ++++ tests/local.mk 2014-01-03 19:41:29.235300517 +0100 +@@ -324,6 +324,7 @@ all_tests = \ tests/misc/sort-discrim.sh \ tests/misc/sort-files0-from.pl \ tests/misc/sort-float.sh \ @@ -4082,8 +4101,8 @@ Index: tests/local.mk tests/misc/sort-month.sh \ Index: tests/misc/cut.pl =================================================================== ---- tests/misc/cut.pl.orig -+++ tests/misc/cut.pl +--- tests/misc/cut.pl.orig 2014-01-03 19:41:22.471341613 +0100 ++++ tests/misc/cut.pl 2014-01-03 19:41:29.247302219 +0100 @@ -23,9 +23,11 @@ use strict; # Turn off localization of executable's output. @ENV{qw(LANGUAGE LANG LC_ALL)} = ('C') x 3; @@ -4098,7 +4117,7 @@ Index: tests/misc/cut.pl my $prog = 'cut'; my $try = "Try '$prog --help' for more information.\n"; -@@ -223,6 +225,7 @@ if ($mb_locale ne 'C') +@@ -225,6 +227,7 @@ if ($mb_locale ne 'C') my @new_t = @$t; my $test_name = shift @new_t; @@ -4108,8 +4127,8 @@ Index: tests/misc/cut.pl push @Tests, @new; Index: tests/misc/expand.pl =================================================================== ---- tests/misc/expand.pl.orig -+++ tests/misc/expand.pl +--- tests/misc/expand.pl.orig 2014-01-03 19:41:22.471341613 +0100 ++++ tests/misc/expand.pl 2014-01-03 19:41:29.256303495 +0100 @@ -23,6 +23,15 @@ use strict; # Turn off localization of executable's output. @ENV{qw(LANGUAGE LANG LC_ALL)} = ('C') x 3; @@ -4166,8 +4185,8 @@ Index: tests/misc/expand.pl Index: tests/misc/fold.pl =================================================================== ---- tests/misc/fold.pl.orig -+++ tests/misc/fold.pl +--- tests/misc/fold.pl.orig 2014-01-03 19:41:22.471341613 +0100 ++++ tests/misc/fold.pl 2014-01-03 19:41:29.257303637 +0100 @@ -20,9 +20,18 @@ use strict; (my $program_name = $0) =~ s|.*/||; @@ -4239,8 +4258,8 @@ Index: tests/misc/fold.pl exit $fail; Index: tests/misc/join.pl =================================================================== ---- tests/misc/join.pl.orig -+++ tests/misc/join.pl +--- tests/misc/join.pl.orig 2014-01-03 19:41:22.471341613 +0100 ++++ tests/misc/join.pl 2014-01-03 19:41:29.264304629 +0100 @@ -25,6 +25,15 @@ my $limits = getlimits (); my $prog = 'join'; @@ -4257,7 +4276,7 @@ Index: tests/misc/join.pl my $delim = chr 0247; sub t_subst ($) { -@@ -306,8 +315,49 @@ foreach my $t (@tv) +@@ -326,8 +335,49 @@ foreach my $t (@tv) push @Tests, $new_ent; } @@ -4309,8 +4328,8 @@ Index: tests/misc/join.pl Index: tests/misc/sort-mb-tests.sh =================================================================== ---- /dev/null -+++ tests/misc/sort-mb-tests.sh +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ tests/misc/sort-mb-tests.sh 2014-01-03 19:41:29.265304771 +0100 @@ -0,0 +1,45 @@ +#!/bin/sh +# Verify sort's multi-byte support. @@ -4359,8 +4378,8 @@ Index: tests/misc/sort-mb-tests.sh +Exit $fail Index: tests/misc/sort-merge.pl =================================================================== ---- tests/misc/sort-merge.pl.orig -+++ tests/misc/sort-merge.pl +--- tests/misc/sort-merge.pl.orig 2014-01-03 19:41:22.471341613 +0100 ++++ tests/misc/sort-merge.pl 2014-01-03 19:41:29.266304913 +0100 @@ -26,6 +26,15 @@ my $prog = 'sort'; # Turn off localization of executable's output. @ENV{qw(LANGUAGE LANG LC_ALL)} = ('C') x 3; @@ -4419,8 +4438,8 @@ Index: tests/misc/sort-merge.pl Index: tests/misc/sort.pl =================================================================== ---- tests/misc/sort.pl.orig -+++ tests/misc/sort.pl +--- tests/misc/sort.pl.orig 2014-01-03 19:41:22.471341613 +0100 ++++ tests/misc/sort.pl 2014-01-03 19:41:29.274306047 +0100 @@ -24,10 +24,15 @@ my $prog = 'sort'; # Turn off localization of executable's output. @ENV{qw(LANGUAGE LANG LC_ALL)} = ('C') x 3; @@ -4486,8 +4505,8 @@ Index: tests/misc/sort.pl my $verbose = $ENV{VERBOSE}; Index: tests/misc/unexpand.pl =================================================================== ---- tests/misc/unexpand.pl.orig -+++ tests/misc/unexpand.pl +--- tests/misc/unexpand.pl.orig 2014-01-03 19:41:22.471341613 +0100 ++++ tests/misc/unexpand.pl 2014-01-03 19:41:29.276306331 +0100 @@ -27,6 +27,14 @@ my $limits = getlimits (); my $prog = 'unexpand'; @@ -4543,8 +4562,8 @@ Index: tests/misc/unexpand.pl Index: tests/misc/uniq.pl =================================================================== ---- tests/misc/uniq.pl.orig -+++ tests/misc/uniq.pl +--- tests/misc/uniq.pl.orig 2014-01-03 19:41:22.471341613 +0100 ++++ tests/misc/uniq.pl 2014-01-03 19:39:43.111254000 +0100 @@ -23,9 +23,17 @@ my $limits = getlimits (); my $prog = 'uniq'; my $try = "Try '$prog --help' for more information.\n"; @@ -4563,7 +4582,7 @@ Index: tests/misc/uniq.pl # When possible, create a "-z"-testing variant of each test. sub add_z_variants($) { -@@ -208,6 +216,44 @@ foreach my $t (@Tests) +@@ -261,6 +269,53 @@ foreach my $t (@Tests) and push @$t, {ENV=>'_POSIX2_VERSION=199209'}; } @@ -4590,7 +4609,16 @@ Index: tests/misc/uniq.pl + push @new_t, $sub; + push @$t, $sub; + } -+ next if ($test_name =~ "schar" or $test_name =~ "^obs-plus" or $test_name =~ "119"); ++ # In test #145, replace the each ‘...’ by '...'. ++ if ($test_name =~ "145") ++ { ++ my $sub = { ERR_SUBST => "s/‘([^’]+)’/'\$1'/g"}; ++ push @new_t, $sub; ++ push @$t, $sub; ++ } ++ next if ( $test_name =~ "schar" ++ or $test_name =~ "^obs-plus" ++ or $test_name =~ "119"); + push @new, ["$test_name-mb", @new_t, {ENV => "LC_ALL=$mb_locale"}]; + } + push @Tests, @new; @@ -4610,8 +4638,8 @@ Index: tests/misc/uniq.pl Index: tests/pr/pr-tests.pl =================================================================== ---- tests/pr/pr-tests.pl.orig -+++ tests/pr/pr-tests.pl +--- tests/pr/pr-tests.pl.orig 2014-01-03 19:41:22.471341613 +0100 ++++ tests/pr/pr-tests.pl 2014-01-03 19:41:29.285307607 +0100 @@ -23,6 +23,15 @@ use strict; my $prog = 'pr'; diff --git a/coreutils-invalid-ids.patch b/coreutils-invalid-ids.patch index 8ecb1c0..87694be 100644 --- a/coreutils-invalid-ids.patch +++ b/coreutils-invalid-ids.patch @@ -11,10 +11,14 @@ Test cases: Andreas Gruenbacher +--- + src/chgrp.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + Index: src/chgrp.c =================================================================== ---- src/chgrp.c.orig -+++ src/chgrp.c +--- src/chgrp.c.orig 2014-01-03 18:18:24.257902746 +0100 ++++ src/chgrp.c 2014-01-03 19:47:23.019440368 +0100 @@ -88,7 +88,7 @@ parse_group (const char *name) { unsigned long int tmp; diff --git a/coreutils-remove_hostname_documentation.patch b/coreutils-remove_hostname_documentation.patch index f550902..bae07fb 100644 --- a/coreutils-remove_hostname_documentation.patch +++ b/coreutils-remove_hostname_documentation.patch @@ -1,7 +1,11 @@ +--- + doc/coreutils.texi | 38 +------------------------------------- + 1 file changed, 1 insertion(+), 37 deletions(-) + Index: doc/coreutils.texi =================================================================== ---- doc/coreutils.texi.orig -+++ doc/coreutils.texi +--- doc/coreutils.texi.orig 2014-01-03 18:18:24.527941663 +0100 ++++ doc/coreutils.texi 2014-01-03 19:47:18.522803264 +0100 @@ -66,7 +66,6 @@ * groups: (coreutils)groups invocation. Print group names a user is in. * head: (coreutils)head invocation. Output the first part of files. @@ -19,7 +23,7 @@ Index: doc/coreutils.texi * SELinux context:: chcon runcon * Modified command invocation:: chroot env nice nohup stdbuf timeout * Process control:: kill -@@ -419,7 +418,6 @@ System context +@@ -417,7 +416,6 @@ System context * date invocation:: Print or set system date and time * nproc invocation:: Print the number of processors * uname invocation:: Print system information @@ -27,7 +31,7 @@ Index: doc/coreutils.texi * hostid invocation:: Print numeric host identifier * uptime invocation:: Print system uptime and load -@@ -14626,7 +14624,6 @@ information. +@@ -14852,7 +14850,6 @@ information. * arch invocation:: Print machine hardware name. * nproc invocation:: Print the number of processors. * uname invocation:: Print system information. @@ -35,7 +39,7 @@ Index: doc/coreutils.texi * hostid invocation:: Print numeric host identifier. * uptime invocation:: Print system uptime and load. @end menu -@@ -15448,15 +15445,6 @@ easily available, as is the case with Li +@@ -15674,15 +15671,6 @@ easily available, as is the case with Li Print the machine hardware name (sometimes called the hardware class or hardware type). @@ -51,7 +55,7 @@ Index: doc/coreutils.texi @item -p @itemx --processor @opindex -p -@@ -15510,30 +15498,6 @@ Print the kernel version. +@@ -15736,30 +15724,6 @@ Print the kernel version. @exitstatus diff --git a/coreutils-remove_kill_documentation.patch b/coreutils-remove_kill_documentation.patch index 438d4de..8632a5f 100644 --- a/coreutils-remove_kill_documentation.patch +++ b/coreutils-remove_kill_documentation.patch @@ -1,7 +1,11 @@ +--- + doc/coreutils.texi | 90 ----------------------------------------------------- + 1 file changed, 90 deletions(-) + Index: doc/coreutils.texi =================================================================== ---- doc/coreutils.texi.orig -+++ doc/coreutils.texi +--- doc/coreutils.texi.orig 2014-01-03 19:47:18.522803264 +0100 ++++ doc/coreutils.texi 2014-01-03 19:47:20.702112039 +0100 @@ -69,7 +69,6 @@ * id: (coreutils)id invocation. Print user identity. * install: (coreutils)install invocation. Copy and change attributes. @@ -18,7 +22,7 @@ Index: doc/coreutils.texi * Delaying:: sleep * Numeric operations:: factor seq * File permissions:: Access modes -@@ -446,10 +444,6 @@ Modified command invocation +@@ -444,10 +442,6 @@ Modified command invocation * stdbuf invocation:: Run a command with modified I/O buffering * timeout invocation:: Run a command with a time limit @@ -29,7 +33,7 @@ Index: doc/coreutils.texi Delaying * sleep invocation:: Delay for a specified time -@@ -16380,90 +16374,6 @@ the exit status of @var{command} otherwi +@@ -16606,90 +16600,6 @@ the exit status of @var{command} otherwi @end display diff --git a/coreutils-sysinfo.patch b/coreutils-sysinfo.patch index 956a5b6..7f0b339 100644 --- a/coreutils-sysinfo.patch +++ b/coreutils-sysinfo.patch @@ -1,7 +1,11 @@ +--- + src/uname.c | 42 ++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 42 insertions(+) + Index: src/uname.c =================================================================== ---- src/uname.c.orig -+++ src/uname.c +--- src/uname.c.orig 2014-01-03 18:18:24.316911250 +0100 ++++ src/uname.c 2014-01-03 19:47:21.922284919 +0100 @@ -337,6 +337,36 @@ main (int argc, char **argv) # endif } diff --git a/coreutils-testsuite.changes b/coreutils-testsuite.changes index 7aa0916..71b8d15 100644 --- a/coreutils-testsuite.changes +++ b/coreutils-testsuite.changes @@ -1,3 +1,170 @@ +------------------------------------------------------------------- +Mon Dec 30 10:17:50 UTC 2013 - mail@bernhard-voelker.de + +- Refresh patches to match the new version. + + * coreutils-build-timeout-as-pie.patch: Update line number. + * coreutils-gnulib-tests-ppc64le.patch: Likewise. + * coreutils-invalid-ids.patch: Likewise. + * coreutils-remove_hostname_documentation.patch: Likewise. + * coreutils-remove_kill_documentation.patch: Likewise. + * coreutils-sysinfo.patch: Likewise. + * coreutils-i18n.patch: Likewise. Additionally: + Accommodate to upstream changes in cut.c and uniq.c. + Fix some compiler warnings. + Fix 145-mb test in tests/misc/uniq.pl. + +- Remove now-upstream and therefore obsolete patches. + + * coreutils-8.21.de.po.xz: Remove, upstream is latest. + * coreutils-gnulib-tests-fix-nap-race-obs.patch: + Remove, now upstream. + * coreutils-gnulib-tests-fix-nap-race.patch: Likewise. + * longlong-aarch64.patch: Likewise. + +- Update to 8.22 (2013-12-13) [stable] + + ** Bug fixes + + df now processes the mount list correctly in the presence of unstatable + mount points. Previously it may have failed to output some mount points. + [bug introduced in coreutils-8.21] + + df now processes symbolic links and relative paths to special files containing + a mounted file system correctly. Previously df displayed the statistics about + the file system the file is stored on rather than the one inside. + [This bug was present in "the beginning".] + + df now processes disk device nodes correctly in the presence of bind mounts. + Now df shows the base mounted file system rather than the last one mounted. + [This bug was present in "the beginning".] + + install now removes the target file if the strip program failed for any + reason. Before, that file was left behind, sometimes even with wrong + permissions. + [This bug was present in "the beginning".] + + ln --relative now updates existing symlinks correctly. Previously it based + the relative link on the dereferenced path of an existing link. + [This bug was introduced when --relative was added in coreutils-8.16.] + + ls --recursive will no longer exit with "serious" exit code (2), if there + is an error reading a directory not specified on the command line. + [Bug introduced in coreutils-5.3.0] + + mkdir, mkfifo, and mknod now work better when creating a file in a directory + with a default ACL whose umask disagrees with the process's umask, on a + system such as GNU/Linux where directory ACL umasks override process umasks. + [bug introduced in coreutils-6.0] + + mv will now replace empty directories in the destination with directories + from the source, when copying across file systems. + [This bug was present in "the beginning".] + + od -wN with N larger than 64K on a system with 32-bit size_t would + print approximately 2*N bytes of extraneous padding. + [Bug introduced in coreutils-7.0] + + rm -I now prompts for confirmation before removing a write protected file. + [Bug introduced in coreutils-6.8] + + shred once again uses direct I/O on systems requiring aligned buffers. + Also direct I/O failures for odd sized writes at end of file are now handled. + [The "last write" bug was introduced in coreutils-5.3.0 but masked + by the alignment bug introduced in coreutils-6.0] + + tail --retry -f now waits for the files specified to appear. Before, tail + would immediately exit when such a file is initially inaccessible. + [This bug was introduced when inotify support was added in coreutils-7.5] + + tail -F has improved handling of symlinks. Previously tail didn't respond + to the symlink target (re)appearing after being (re)created. + [This bug was introduced when inotify support was added in coreutils-7.5] + + ** New features + + cp, install, mkdir, mknod, mkfifo and mv now support "restorecon" + functionality through the -Z option, to set the SELinux context + appropriate for the new item location in the file system. + + csplit accepts a new option: --suppressed-matched, to elide the lines + used to identify the split points. + + df --output now accepts a 'file' field, to propagate a specified + command line argument through to the output. + + du accepts a new option: --inodes to show the number of inodes instead + of the blocks used. + + id accepts a new option: --zero (-z) to delimit the output entries by + a NUL instead of a white space character. + + id and ls with -Z report the SMACK security context where available. + mkdir, mkfifo and mknod with -Z set the SMACK context where available. + + id can now lookup by user ID, in addition to the existing name lookup. + + join accepts a new option: --zero-terminated (-z). As with the sort,uniq + option of the same name, this makes join consume and produce NUL-terminated + lines rather than newline-terminated lines. + + uniq accepts a new option: --group to print all items, while separating + unique groups with empty lines. + + shred accepts new parameters to the --remove option to give greater + control over that operation, which can greatly reduce sync overhead. + + shuf accepts a new option: --repeat (-r), which can repeat items in + the output. + + ** Changes in behavior + + cp --link now dereferences a symbolic link as source before creating the + hard link in the destination unless the -P,--no-deref option is specified. + Previously, it would create a hard link of the symbolic link, even when + the dereferencing options -L or -H were specified. + + cp, install, mkdir, mknod and mkfifo no longer accept an argument to the + short -Z option. The --context equivalent still takes an optional argument. + + dd status=none now suppresses all non fatal diagnostic messages, + not just the transfer counts. + + df no longer accepts the long-obsolescent --megabytes option. + + stdbuf now requires at least one buffering mode option to be specified, + as per the documented interface. + + ** Improvements + + base64 encoding throughput for bulk data is increased by about 60%. + + md5sum can use libcrypto hash routines where allowed to potentially + get better performance through using more system specific logic. + sha1sum for example has improved throughput by 40% on an i3-2310M. + This also affects sha1sum, sha224sum, sha256sum, sha384sum and sha512sum. + + stat and tail work better with EFIVARFS, EXOFS, F2FS, HOSTFS, SMACKFS, SNFS + and UBIFS. stat -f --format=%T now reports the file system type, and tail -f + now uses inotify for files on all those except SNFS, rather than the default + (for unknown file system types) of issuing a warning and reverting to polling. + + shuf outputs subsets of large inputs much more efficiently. + Reservoir sampling is used to limit memory usage based on the number of + outputs, rather than the number of inputs. + + shred increases the default write block size from 12KiB to 64KiB + to align with other utilities and reduce the system call overhead. + + split --line-bytes=SIZE, now only allocates memory as needed rather + than allocating SIZE bytes at program start. + + stty now supports configuring "stick" (mark/space) parity where available. + + ** Build-related + + factor now builds on aarch64 based systems [bug introduced in coreutils-8.20] + ------------------------------------------------------------------- Thu Dec 19 23:37:39 UTC 2013 - uweigand@de.ibm.com diff --git a/coreutils-testsuite.spec b/coreutils-testsuite.spec index 0ea9094..06d4224 100644 --- a/coreutils-testsuite.spec +++ b/coreutils-testsuite.spec @@ -1,7 +1,7 @@ # # spec file for package coreutils-testsuite # -# Copyright (c) 2013 SUSE LINUX Products GmbH, Nuernberg, Germany. +# Copyright (c) 2014 SUSE LINUX Products GmbH, Nuernberg, Germany. # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -21,7 +21,7 @@ Summary: GNU Core Utilities License: GPL-3.0+ Group: System/Base Url: http://www.gnu.org/software/coreutils/ -Version: 8.21 +Version: 8.22 Release: 0 ################################################################# @@ -87,25 +87,16 @@ Source: coreutils-%{version}.tar.xz %endif Source1: baselibs.conf -Source2: coreutils-%{version}.de.po.xz Patch1: coreutils-remove_hostname_documentation.patch Patch3: coreutils-remove_kill_documentation.patch Patch4: coreutils-i18n.patch Patch8: coreutils-sysinfo.patch Patch16: coreutils-invalid-ids.patch -Patch17: longlong-aarch64.patch # OBS / RPMLINT require /usr/bin/timeout to be built with the -fpie option. Patch100: coreutils-build-timeout-as-pie.patch -# Fix gnulib-test failures related to gnulib-tests/nap.h. -Patch200: coreutils-gnulib-tests-fix-nap-race.patch - -# Fix gnulib-test failures: increase nap() delay multiplier even -# a bit more to avoid failures on OBS. -Patch201: coreutils-gnulib-tests-fix-nap-race-obs.patch - # Fix imported gnulib long double math tests for little-endian PowerPC Patch202: coreutils-gnulib-tests-ppc64le.patch @@ -133,15 +124,10 @@ the GNU fileutils, sh-utils, and textutils packages. %patch3 %patch8 %patch16 -%patch17 -p1 # %patch100 -%patch200 -%patch201 -%patch202 -p1 - -xz -dc %{S:2} >po/de.po +%patch202 #???## We need to statically link to gmp, otherwise we have a build loop #???#sed -i s,'$(LIB_GMP)',%%{_libdir}/libgmp.a,g Makefile.in diff --git a/coreutils.changes b/coreutils.changes index 7aa0916..71b8d15 100644 --- a/coreutils.changes +++ b/coreutils.changes @@ -1,3 +1,170 @@ +------------------------------------------------------------------- +Mon Dec 30 10:17:50 UTC 2013 - mail@bernhard-voelker.de + +- Refresh patches to match the new version. + + * coreutils-build-timeout-as-pie.patch: Update line number. + * coreutils-gnulib-tests-ppc64le.patch: Likewise. + * coreutils-invalid-ids.patch: Likewise. + * coreutils-remove_hostname_documentation.patch: Likewise. + * coreutils-remove_kill_documentation.patch: Likewise. + * coreutils-sysinfo.patch: Likewise. + * coreutils-i18n.patch: Likewise. Additionally: + Accommodate to upstream changes in cut.c and uniq.c. + Fix some compiler warnings. + Fix 145-mb test in tests/misc/uniq.pl. + +- Remove now-upstream and therefore obsolete patches. + + * coreutils-8.21.de.po.xz: Remove, upstream is latest. + * coreutils-gnulib-tests-fix-nap-race-obs.patch: + Remove, now upstream. + * coreutils-gnulib-tests-fix-nap-race.patch: Likewise. + * longlong-aarch64.patch: Likewise. + +- Update to 8.22 (2013-12-13) [stable] + + ** Bug fixes + + df now processes the mount list correctly in the presence of unstatable + mount points. Previously it may have failed to output some mount points. + [bug introduced in coreutils-8.21] + + df now processes symbolic links and relative paths to special files containing + a mounted file system correctly. Previously df displayed the statistics about + the file system the file is stored on rather than the one inside. + [This bug was present in "the beginning".] + + df now processes disk device nodes correctly in the presence of bind mounts. + Now df shows the base mounted file system rather than the last one mounted. + [This bug was present in "the beginning".] + + install now removes the target file if the strip program failed for any + reason. Before, that file was left behind, sometimes even with wrong + permissions. + [This bug was present in "the beginning".] + + ln --relative now updates existing symlinks correctly. Previously it based + the relative link on the dereferenced path of an existing link. + [This bug was introduced when --relative was added in coreutils-8.16.] + + ls --recursive will no longer exit with "serious" exit code (2), if there + is an error reading a directory not specified on the command line. + [Bug introduced in coreutils-5.3.0] + + mkdir, mkfifo, and mknod now work better when creating a file in a directory + with a default ACL whose umask disagrees with the process's umask, on a + system such as GNU/Linux where directory ACL umasks override process umasks. + [bug introduced in coreutils-6.0] + + mv will now replace empty directories in the destination with directories + from the source, when copying across file systems. + [This bug was present in "the beginning".] + + od -wN with N larger than 64K on a system with 32-bit size_t would + print approximately 2*N bytes of extraneous padding. + [Bug introduced in coreutils-7.0] + + rm -I now prompts for confirmation before removing a write protected file. + [Bug introduced in coreutils-6.8] + + shred once again uses direct I/O on systems requiring aligned buffers. + Also direct I/O failures for odd sized writes at end of file are now handled. + [The "last write" bug was introduced in coreutils-5.3.0 but masked + by the alignment bug introduced in coreutils-6.0] + + tail --retry -f now waits for the files specified to appear. Before, tail + would immediately exit when such a file is initially inaccessible. + [This bug was introduced when inotify support was added in coreutils-7.5] + + tail -F has improved handling of symlinks. Previously tail didn't respond + to the symlink target (re)appearing after being (re)created. + [This bug was introduced when inotify support was added in coreutils-7.5] + + ** New features + + cp, install, mkdir, mknod, mkfifo and mv now support "restorecon" + functionality through the -Z option, to set the SELinux context + appropriate for the new item location in the file system. + + csplit accepts a new option: --suppressed-matched, to elide the lines + used to identify the split points. + + df --output now accepts a 'file' field, to propagate a specified + command line argument through to the output. + + du accepts a new option: --inodes to show the number of inodes instead + of the blocks used. + + id accepts a new option: --zero (-z) to delimit the output entries by + a NUL instead of a white space character. + + id and ls with -Z report the SMACK security context where available. + mkdir, mkfifo and mknod with -Z set the SMACK context where available. + + id can now lookup by user ID, in addition to the existing name lookup. + + join accepts a new option: --zero-terminated (-z). As with the sort,uniq + option of the same name, this makes join consume and produce NUL-terminated + lines rather than newline-terminated lines. + + uniq accepts a new option: --group to print all items, while separating + unique groups with empty lines. + + shred accepts new parameters to the --remove option to give greater + control over that operation, which can greatly reduce sync overhead. + + shuf accepts a new option: --repeat (-r), which can repeat items in + the output. + + ** Changes in behavior + + cp --link now dereferences a symbolic link as source before creating the + hard link in the destination unless the -P,--no-deref option is specified. + Previously, it would create a hard link of the symbolic link, even when + the dereferencing options -L or -H were specified. + + cp, install, mkdir, mknod and mkfifo no longer accept an argument to the + short -Z option. The --context equivalent still takes an optional argument. + + dd status=none now suppresses all non fatal diagnostic messages, + not just the transfer counts. + + df no longer accepts the long-obsolescent --megabytes option. + + stdbuf now requires at least one buffering mode option to be specified, + as per the documented interface. + + ** Improvements + + base64 encoding throughput for bulk data is increased by about 60%. + + md5sum can use libcrypto hash routines where allowed to potentially + get better performance through using more system specific logic. + sha1sum for example has improved throughput by 40% on an i3-2310M. + This also affects sha1sum, sha224sum, sha256sum, sha384sum and sha512sum. + + stat and tail work better with EFIVARFS, EXOFS, F2FS, HOSTFS, SMACKFS, SNFS + and UBIFS. stat -f --format=%T now reports the file system type, and tail -f + now uses inotify for files on all those except SNFS, rather than the default + (for unknown file system types) of issuing a warning and reverting to polling. + + shuf outputs subsets of large inputs much more efficiently. + Reservoir sampling is used to limit memory usage based on the number of + outputs, rather than the number of inputs. + + shred increases the default write block size from 12KiB to 64KiB + to align with other utilities and reduce the system call overhead. + + split --line-bytes=SIZE, now only allocates memory as needed rather + than allocating SIZE bytes at program start. + + stty now supports configuring "stick" (mark/space) parity where available. + + ** Build-related + + factor now builds on aarch64 based systems [bug introduced in coreutils-8.20] + ------------------------------------------------------------------- Thu Dec 19 23:37:39 UTC 2013 - uweigand@de.ibm.com diff --git a/coreutils.spec b/coreutils.spec index 2d1d888..0c0eadf 100644 --- a/coreutils.spec +++ b/coreutils.spec @@ -1,7 +1,7 @@ # # spec file for package coreutils # -# Copyright (c) 2013 SUSE LINUX Products GmbH, Nuernberg, Germany. +# Copyright (c) 2014 SUSE LINUX Products GmbH, Nuernberg, Germany. # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -21,7 +21,7 @@ Summary: GNU Core Utilities License: GPL-3.0+ Group: System/Base Url: http://www.gnu.org/software/coreutils/ -Version: 8.21 +Version: 8.22 Release: 0 ################################################################# @@ -87,25 +87,16 @@ Source: coreutils-%{version}.tar.xz %endif Source1: baselibs.conf -Source2: coreutils-%{version}.de.po.xz Patch1: coreutils-remove_hostname_documentation.patch Patch3: coreutils-remove_kill_documentation.patch Patch4: coreutils-i18n.patch Patch8: coreutils-sysinfo.patch Patch16: coreutils-invalid-ids.patch -Patch17: longlong-aarch64.patch # OBS / RPMLINT require /usr/bin/timeout to be built with the -fpie option. Patch100: coreutils-build-timeout-as-pie.patch -# Fix gnulib-test failures related to gnulib-tests/nap.h. -Patch200: coreutils-gnulib-tests-fix-nap-race.patch - -# Fix gnulib-test failures: increase nap() delay multiplier even -# a bit more to avoid failures on OBS. -Patch201: coreutils-gnulib-tests-fix-nap-race-obs.patch - # Fix imported gnulib long double math tests for little-endian PowerPC Patch202: coreutils-gnulib-tests-ppc64le.patch @@ -133,15 +124,10 @@ the GNU fileutils, sh-utils, and textutils packages. %patch3 %patch8 %patch16 -%patch17 -p1 # %patch100 -%patch200 -%patch201 -%patch202 -p1 - -xz -dc %{S:2} >po/de.po +%patch202 #???## We need to statically link to gmp, otherwise we have a build loop #???#sed -i s,'$(LIB_GMP)',%%{_libdir}/libgmp.a,g Makefile.in diff --git a/longlong-aarch64.patch b/longlong-aarch64.patch deleted file mode 100644 index 3d28653..0000000 --- a/longlong-aarch64.patch +++ /dev/null @@ -1,48 +0,0 @@ -From 9fe7c5b6eb373d859390dd5a7844a666d8b7818b Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Torbj=C3=B6rn=20Granlund?= -Date: Mon, 4 Mar 2013 17:57:33 +0000 -Subject: [PATCH] build: fix factor build failure on aarch64 - -* src/longlong.h (__aarch64__): Make add_ssaaaa and sub_ddmmss work. -* NEWS: Mention the build fix. -Reported at https://bugzilla.redhat.com/917735 ---- - NEWS | 4 ++++ - src/longlong.h | 21 +++++++-------------- - 2 files changed, 11 insertions(+), 14 deletions(-) - -Index: coreutils-8.21/src/longlong.h -=================================================================== ---- coreutils-8.21.orig/src/longlong.h -+++ coreutils-8.21/src/longlong.h -@@ -529,23 +529,16 @@ extern UWtype __MPN(udiv_qrnnd) (UWtype - #endif /* __arm__ */ - - #if defined (__aarch64__) && W_TYPE_SIZE == 64 -+/* FIXME: Extend the immediate range for the low word by using both -+ ADDS and SUBS, since they set carry in the same way. */ - #define add_ssaaaa(sh, sl, ah, al, bh, bl) \ -- __asm__ ("adds\t%1, %4, %5\n\tadc\t%0, %2, %3" \ -+ __asm__ ("adds\t%1, %x4, %5\n\tadc\t%0, %x2, %x3" \ - : "=r" (sh), "=&r" (sl) \ -- : "r" (ah), "rZ" (bh), "%r" (al), "rI" (bl) __CLOBBER_CC) -+ : "rZ" (ah), "rZ" (bh), "%r" (al), "rI" (bl) __CLOBBER_CC) - #define sub_ddmmss(sh, sl, ah, al, bh, bl) \ -- do { \ -- if (__builtin_constant_p (bl)) \ -- { \ -- __asm__ ("subs\t%1, %4, %5\n\tsbc\t%0, %2, %3" \ -- : "=r" (sh), "=&r" (sl) \ -- : "r" (ah), "r" (bh), "r" (al), "rI" (bl) __CLOBBER_CC); \ -- } \ -- else /* only bh might be a constant */ \ -- __asm__ ("subs\t%1, %4, %5\n\tsbc\t%0, %2, %3" \ -- : "=r" (sh), "=&r" (sl) \ -- : "r" (ah), "rZ" (bh), "r" (al), "rI" (bl) __CLOBBER_CC);\ -- } while (0) -+ __asm__ ("subs\t%1, %x4, %5\n\tsbc\t%0, %x2, %x3" \ -+ : "=r,r" (sh), "=&r,&r" (sl) \ -+ : "rZ,rZ" (ah), "rZ,rZ" (bh), "r,Z" (al), "rI,r" (bl) __CLOBBER_CC) - #define umul_ppmm(ph, pl, m0, m1) \ - do { \ - UDItype __m0 = (m0), __m1 = (m1); \