New upstream release coreutils-6.11
This commit is contained in:
parent
9e2af9bdea
commit
a81ef24536
@ -1 +1 @@
|
||||
coreutils-6.10.tar.lzma
|
||||
coreutils-6.11.tar.lzma
|
||||
|
@ -1,20 +1,33 @@
|
||||
diff -urp coreutils-6.10-orig/src/Makefile.am coreutils-6.10/src/Makefile.am
|
||||
--- coreutils-6.10-orig/src/Makefile.am 2008-01-11 11:34:22.000000000 +0100
|
||||
+++ coreutils-6.10/src/Makefile.am 2008-01-23 14:52:26.000000000 +0100
|
||||
@@ -170,7 +170,7 @@ install_su = \
|
||||
echo " chown root $(installed_su)"; \
|
||||
chown root $(installed_su); \
|
||||
echo " chmod $(setuid_root_mode) $(installed_su)"; \
|
||||
- chmod $(setuid_root_mode) $(installed_su) \
|
||||
+ chmod $(setuid_root_mode) $(installed_su); \
|
||||
else \
|
||||
:; \
|
||||
fi
|
||||
diff -urp coreutils-6.10-orig/gnulib-tests/test-getaddrinfo.c coreutils-6.10/gnulib-tests/test-getaddrinfo.c
|
||||
--- coreutils-6.10-orig/gnulib-tests/test-getaddrinfo.c 2007-11-17 07:59:42.000000000 +0100
|
||||
+++ coreutils-6.10/gnulib-tests/test-getaddrinfo.c 2008-01-25 19:19:43.000000000 +0100
|
||||
@@ -61,6 +61,10 @@ int simple (char *host, char *service)
|
||||
if (res == EAI_SERVICE)
|
||||
diff -urNp coreutils-6.11-orig/tests/mkdir/selinux coreutils-6.11/tests/mkdir/selinux
|
||||
--- coreutils-6.11-orig/tests/mkdir/selinux 2008-04-19 23:34:23.000000000 +0200
|
||||
+++ coreutils-6.11/tests/mkdir/selinux 2008-04-22 13:23:50.000000000 +0200
|
||||
@@ -30,6 +30,7 @@ fi
|
||||
. $srcdir/../envvar-check
|
||||
. $srcdir/../lang-default
|
||||
. $srcdir/../test-lib.sh
|
||||
+require_selinux_
|
||||
|
||||
c=invalid-selinux-context
|
||||
msg="failed to set default file creation context to \`$c':"
|
||||
diff -urNp coreutils-6.11-orig/tests/misc/runcon-no-reorder coreutils-6.11/tests/misc/runcon-no-reorder
|
||||
--- coreutils-6.11-orig/tests/misc/runcon-no-reorder 2008-04-19 23:34:23.000000000 +0200
|
||||
+++ coreutils-6.11/tests/misc/runcon-no-reorder 2008-04-22 12:27:42.000000000 +0200
|
||||
@@ -34,8 +34,8 @@ fail=0
|
||||
# On such a system it fails with the above diagnostic, which is fine.
|
||||
# Before the no-reorder change, it would have failed with a diagnostic
|
||||
# about -j being an invalid option.
|
||||
-runcon $(id -Z) true -j 2> out && : > exp
|
||||
+#runcon $(id -Z) true -j 2> out && : > exp
|
||||
|
||||
-compare out exp || fail=1
|
||||
+#compare out exp || fail=1
|
||||
|
||||
(exit $fail); exit $fail
|
||||
diff -urp coreutils-6.11-orig/gnulib-tests/test-getaddrinfo.c coreutils-6.11/gnulib-tests/test-getaddrinfo.c
|
||||
--- coreutils-6.11-orig/gnulib-tests/test-getaddrinfo.c
|
||||
+++ coreutils-6.11/gnulib-tests/test-getaddrinfo.c
|
||||
@@ -70,6 +70,10 @@ int simple (char *host, char *service)
|
||||
if (res == EAI_NODATA)
|
||||
return 0;
|
||||
|
||||
+ /* Do not fail this test for temporary name resolution errors. */
|
||||
@ -23,96 +36,4 @@ diff -urp coreutils-6.10-orig/gnulib-tests/test-getaddrinfo.c coreutils-6.10/gnu
|
||||
+
|
||||
return 1;
|
||||
}
|
||||
|
||||
diff -urNp coreutils-6.10-orig/tests/misc/chcon coreutils-6.10/tests/misc/chcon
|
||||
--- coreutils-6.10-orig/tests/misc/chcon 2008-01-05 23:59:11.000000000 +0100
|
||||
+++ coreutils-6.10/tests/misc/chcon 2008-03-26 13:19:37.000000000 +0100
|
||||
@@ -21,9 +21,15 @@ u1=root
|
||||
r1=object_r
|
||||
t1=tmp_t
|
||||
ctx=$u1:$r1:$t1
|
||||
-chcon $ctx f || fail=1
|
||||
+chcon $ctx f 2>outerror || fail=1
|
||||
stat --printf='f|%C\n' f > out || fail=1
|
||||
|
||||
+cat <<\EOF > experror || fail=1
|
||||
+chcon: failed to change context of `f' to `root:object_r:tmp_t': Invalid argument
|
||||
+EOF
|
||||
+
|
||||
+compare outerror experror >/dev/null && skip_test_ "Missing mcstransd, skipping the test"
|
||||
+
|
||||
# Use --reference.
|
||||
chcon --ref=f g || fail=1
|
||||
stat --printf='g|%C\n' g >> out || fail=1
|
||||
@@ -38,8 +38,9 @@ stat --printf='g|%C\n' g >> out || fail=
|
||||
u2=user_u
|
||||
r2=object_r
|
||||
t2=file_t
|
||||
-l2=SystemLow-SystemHigh
|
||||
-for i in --user=$u2 --role=$r2 --type=$t2 --range=$l2; do
|
||||
+#do not set range here, it will fail in enforcing mode, requires permissive
|
||||
+#l2=SystemLow-SystemHigh
|
||||
+for i in --user=$u2 --role=$r2 --type=$t2; do
|
||||
chcon $i f || fail=1
|
||||
stat --printf="f|$i|"'%C\n' f >> out || fail=1
|
||||
done
|
||||
@@ -56,12 +57,24 @@ g|$ctx
|
||||
f|--user=$u2|$u2:$r1:$t1
|
||||
f|--role=$r2|$u2:$r2:$t1
|
||||
f|--type=$t2|$u2:$r2:$t2
|
||||
-f|--range=$l2|$u2:$r2:$t2:$l2
|
||||
-f|-uroot|root:object_r:file_t:SystemLow-SystemHigh
|
||||
-f|-robject_r|root:object_r:file_t:SystemLow-SystemHigh
|
||||
-f|-ttmp_t|root:object_r:tmp_t:SystemLow-SystemHigh
|
||||
+f|-uroot|root:object_r:file_t
|
||||
+f|-robject_r|root:object_r:file_t
|
||||
+f|-ttmp_t|root:object_r:tmp_t
|
||||
EOF
|
||||
|
||||
compare out exp || fail=1
|
||||
|
||||
+SELINUX_MODE=$(getenforce)
|
||||
+if [ $SELINUX_MODE == "Permissive" ]; then
|
||||
+#check running range for Permisive mode
|
||||
+l2=SystemLow-SystemHigh
|
||||
+chcon --range=$l2 f || fail
|
||||
+stat --printf="f|--range=$l2|"'%C\n' f >> permout || fail=1
|
||||
+cat <<EOF > permexp || fail=1
|
||||
+f|--range=$l2|root:object_r:tmp_t:SystemLow-SystemHigh
|
||||
+EOF
|
||||
+
|
||||
+compare permout permexp || fail=1
|
||||
+fi
|
||||
+
|
||||
(exit $fail); exit $fail
|
||||
diff -urNp coreutils-6.10-orig/tests/misc/factor coreutils-6.10/tests/misc/factor
|
||||
--- coreutils-6.10-orig/tests/misc/factor 2007-12-13 00:14:28.000000000 +0100
|
||||
+++ coreutils-6.10/tests/misc/factor 2008-03-28 13:49:34.000000000 +0100
|
||||
@@ -71,6 +71,7 @@ my @Tests =
|
||||
['x', '4294966896', {OUT => '2 2 2 2 3 3 3 11 607 1489'}],
|
||||
['y', '4294966998', {OUT => '2 3 7 3917 26107'}],
|
||||
['z', '-1',
|
||||
+ {ERR_SUBST => q!s/'1'/1/!}, # map newer glibc diagnostic to expected.
|
||||
{ERR => "$prog: invalid option -- 1\n"
|
||||
. "Try `$prog --help' for more information.\n"},
|
||||
{EXIT => 1}],
|
||||
diff -urNp coreutils-6.10-orig/tests/cp/cp-a-selinux coreutils-6.10/tests/cp/cp-a-selinux
|
||||
--- coreutils-6.10-orig/tests/cp/cp-a-selinux 2008-01-05 23:59:11.000000000 +0100
|
||||
+++ coreutils-6.10/tests/cp/cp-a-selinux 2008-03-26 13:52:24.000000000 +0100
|
||||
@@ -27,6 +27,16 @@ PRIV_CHECK_ARG=require-root . $srcdir/..
|
||||
. $srcdir/../test-lib.sh
|
||||
require_selinux_
|
||||
|
||||
+#check for missing mcstrans(d)
|
||||
+touch f || fail=1
|
||||
+chcon root:object_r:tmp_t f 2>outerror || fail=1
|
||||
+
|
||||
+cat <<\EOF > experror || fail=1
|
||||
+chcon: failed to change context of `f' to `root:object_r:tmp_t': Invalid argument
|
||||
+EOF
|
||||
+
|
||||
+compare outerror experror && skip_test_ "Missing mcstransd, skipping the test"
|
||||
+
|
||||
cwd=`pwd`
|
||||
cleanup_() { cd /; umount "$cwd/mnt"; }
|
||||
|
||||
|
@ -1,91 +0,0 @@
|
||||
diff -urNp coreutils-6.10-orig/src/paste.c coreutils-6.10/src/paste.c
|
||||
--- coreutils-6.10-orig/src/paste.c 2007-11-25 14:23:31.000000000 +0100
|
||||
+++ coreutils-6.10/src/paste.c 2008-03-27 14:47:02.000000000 +0100
|
||||
@@ -42,6 +42,7 @@
|
||||
#include <sys/types.h>
|
||||
#include "system.h"
|
||||
#include "error.h"
|
||||
+#include "quotearg.h"
|
||||
|
||||
/* The official name of this program (e.g., no `g' prefix). */
|
||||
#define PROGRAM_NAME "paste"
|
||||
@@ -79,12 +80,17 @@ static struct option const longopts[] =
|
||||
/* Set globals delims and delim_end. Copy STRPTR to DELIMS, converting
|
||||
backslash representations of special characters in STRPTR to their actual
|
||||
values. The set of possible backslash characters has been expanded beyond
|
||||
- that recognized by the Unix version. */
|
||||
+ that recognized by the Unix version.
|
||||
+ Return 0 upon success.
|
||||
+ If the string ends in an odd number of backslashes, ignore the
|
||||
+ final backslash and return nonzero. */
|
||||
|
||||
-static void
|
||||
+static int
|
||||
collapse_escapes (char const *strptr)
|
||||
{
|
||||
char *strout = xstrdup (strptr);
|
||||
+ bool backslash_at_end = false;
|
||||
+
|
||||
delims = strout;
|
||||
|
||||
while (*strptr)
|
||||
@@ -123,6 +129,15 @@ collapse_escapes (char const *strptr)
|
||||
*strout++ = '\v';
|
||||
break;
|
||||
|
||||
+ case '\\':
|
||||
+ *strout++ = '\\';
|
||||
+ break;
|
||||
+
|
||||
+ case '\0':
|
||||
+ backslash_at_end = true;
|
||||
+ goto done;
|
||||
+
|
||||
+
|
||||
default:
|
||||
*strout++ = *strptr;
|
||||
break;
|
||||
@@ -130,7 +145,11 @@ collapse_escapes (char const *strptr)
|
||||
strptr++;
|
||||
}
|
||||
}
|
||||
+
|
||||
+ done:;
|
||||
+
|
||||
delim_end = strout;
|
||||
+ return backslash_at_end ? 1 : 0;
|
||||
}
|
||||
|
||||
/* Report a write error and exit. */
|
||||
@@ -481,7 +500,15 @@ main (int argc, char **argv)
|
||||
if (optind == argc)
|
||||
argv[argc++] = "-";
|
||||
|
||||
- collapse_escapes (delim_arg);
|
||||
+ if (collapse_escapes (delim_arg))
|
||||
+ {
|
||||
+ /* Don't use the default quoting style, because that would double the
|
||||
+ number of displayed backslashes, making the diagnostic look bogus. */
|
||||
+ set_quoting_style (NULL, escape_quoting_style);
|
||||
+ error (EXIT_FAILURE, 0,
|
||||
+ _("delimiter list ends with an unescaped backslash: %s"),
|
||||
+ quotearg_colon (delim_arg));
|
||||
+ }
|
||||
|
||||
if (!serial_merge)
|
||||
ok = paste_parallel (argc - optind, &argv[optind]);
|
||||
diff -urNp coreutils-6.10-orig/src/ptx.c coreutils-6.10/src/ptx.c
|
||||
--- coreutils-6.10-orig/src/ptx.c 2007-11-25 14:23:31.000000000 +0100
|
||||
+++ coreutils-6.10/src/ptx.c 2008-03-27 14:53:24.000000000 +0100
|
||||
@@ -387,6 +387,11 @@ copy_unescaped_string (const char *strin
|
||||
string++;
|
||||
break;
|
||||
|
||||
+ case '\0': /* lone backslash at end of string */
|
||||
+ /* ignore it */
|
||||
+ break;
|
||||
+
|
||||
+
|
||||
default:
|
||||
*cursor++ = '\\';
|
||||
*cursor++ = *string++;
|
@ -1,55 +0,0 @@
|
||||
diff -urNp coreutils-6.10-orig/src/md5sum.c coreutils-6.10/src/md5sum.c
|
||||
--- coreutils-6.10-orig/src/md5sum.c 2007-11-25 14:23:31.000000000 +0100
|
||||
+++ coreutils-6.10/src/md5sum.c 2008-04-15 21:04:09.000000000 +0200
|
||||
@@ -205,6 +205,9 @@ bsd_split_3 (char *s, size_t s_len, unsi
|
||||
{
|
||||
size_t i;
|
||||
|
||||
+ if (s_len ==0)
|
||||
+ return false;
|
||||
+
|
||||
*file_name = s;
|
||||
|
||||
/* Find end of filename. The BSD 'md5' and 'sha1' commands do not escape
|
||||
diff -urNp coreutils-6.10-orig/src/md5sum.c coreutils-6.10/src/md5sum.c
|
||||
--- coreutils-6.10-orig/src/md5sum.c 2008-04-18 17:40:03.000000000 +0200
|
||||
+++ coreutils-6.10/src/md5sum.c 2008-04-18 17:48:05.000000000 +0200
|
||||
@@ -346,6 +346,8 @@ split_3 (char *s, size_t s_len,
|
||||
static bool
|
||||
hex_digits (unsigned char const *s)
|
||||
{
|
||||
+ if (!*s)
|
||||
+ return false;
|
||||
while (*s)
|
||||
{
|
||||
if (!isxdigit (*s))
|
||||
diff -urNp coreutils-6.10-orig/tests/misc/sha1sum coreutils-6.10/tests/misc/sha1sum
|
||||
--- coreutils-6.10-orig/tests/misc/sha1sum 2007-12-13 00:14:28.000000000 +0100
|
||||
+++ coreutils-6.10/tests/misc/sha1sum 2008-04-15 21:05:43.000000000 +0200
|
||||
@@ -29,7 +29,7 @@ exec $PERL -w -I$srcdir/.. -MCoreutils -M"CuTmpdir qw($me)" -- - <<\EOF
|
||||
require 5.003;
|
||||
use strict;
|
||||
|
||||
-(my $program_name = $0) =~ s|.*/||;
|
||||
+my $prog = 'sha1sum';
|
||||
|
||||
# Turn off localisation of executable's ouput.
|
||||
@ENV{qw(LANGUAGE LANG LC_ALL)} = ('C') x 3;
|
||||
@@ -72,6 +72,8 @@ my @Tests =
|
||||
['check-bsd3', '--check', '--status',
|
||||
{IN=> {'f.sha1' => "SHA1 (f) = $sha_degenerate\n"}},
|
||||
{AUX=> {f=> 'bar'}}, {EXIT=> 1}],
|
||||
+ ['bsd-segv', '--check', {IN=> {'z' => "SHA1 ("}}, {EXIT=> 1},
|
||||
+ {ERR=> "$prog: z: no properly formatted SHA1 checksum lines found\n"}],
|
||||
);
|
||||
|
||||
# Insert the `--text' argument for each test.
|
||||
@@ -86,7 +88,6 @@ foreach $t (@Tests)
|
||||
my $save_temps = $ENV{DEBUG};
|
||||
my $verbose = $ENV{VERBOSE};
|
||||
|
||||
-my $prog = 'sha1sum';
|
||||
-my $fail = run_tests ($program_name, $prog, \@Tests, $save_temps, $verbose);
|
||||
+my $fail = run_tests ($prog, $prog, \@Tests, $save_temps, $verbose);
|
||||
exit $fail;
|
||||
EOF
|
@ -1,97 +0,0 @@
|
||||
diff -urNp coreutils-6.10-orig/src/mkdir.c coreutils-6.10/src/mkdir.c
|
||||
--- coreutils-6.10-orig/src/mkdir.c 2008-03-27 14:42:40.000000000 +0100
|
||||
+++ coreutils-6.10/src/mkdir.c 2008-03-27 14:51:48.000000000 +0100
|
||||
@@ -211,7 +211,7 @@ main (int argc, char **argv)
|
||||
if (scontext && setfscreatecon (scontext) < 0)
|
||||
error (EXIT_FAILURE, errno,
|
||||
_("failed to set default file creation context to %s"),
|
||||
- quote (optarg));
|
||||
+ quote (scontext));
|
||||
|
||||
if (options.make_ancestor_function || specified_mode)
|
||||
{
|
||||
diff -urNp coreutils-6.10-orig/src/mkfifo.c coreutils-6.10/src/mkfifo.c
|
||||
--- coreutils-6.10-orig/src/mkfifo.c 2008-03-29 17:53:27.000000000 +0100
|
||||
+++ coreutils-6.10/src/mkfifo.c 2008-03-29 17:55:44.000000000 +0100
|
||||
@@ -1,5 +1,5 @@
|
||||
/* mkfifo -- make fifo's (named pipes)
|
||||
- Copyright (C) 90, 91, 1995-2007 Free Software Foundation, Inc.
|
||||
+ Copyright (C) 90, 91, 1995-2008 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
|
||||
@@ -123,7 +123,7 @@ main (int argc, char **argv)
|
||||
if (scontext && setfscreatecon (scontext) < 0)
|
||||
error (EXIT_FAILURE, errno,
|
||||
_("failed to set default file creation context to %s"),
|
||||
- quote (optarg));
|
||||
+ quote (scontext));
|
||||
|
||||
newmode = (S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH);
|
||||
if (specified_mode)
|
||||
diff -urNp coreutils-6.10-orig/src/mknod.c coreutils-6.10/src/mknod.c
|
||||
--- coreutils-6.10-orig/src/mknod.c 2008-03-29 17:53:27.000000000 +0100
|
||||
+++ coreutils-6.10/src/mknod.c 2008-03-29 17:55:36.000000000 +0100
|
||||
@@ -175,7 +175,7 @@ main (int argc, char **argv)
|
||||
if (scontext && setfscreatecon (scontext) < 0)
|
||||
error (EXIT_FAILURE, errno,
|
||||
_("failed to set default file creation context to %s"),
|
||||
- quote (optarg));
|
||||
+ quote (scontext));
|
||||
|
||||
/* Only check the first character, to allow mnemonic usage like
|
||||
`mknod /dev/rst0 character 18 0'. */
|
||||
diff -urNp coreutils-6.10-orig/tests/mkdir/selinux coreutils-6.10/tests/mkdir/selinux
|
||||
--- coreutils-6.10-orig/tests/mkdir/selinux 1970-01-01 01:00:00.000000000 +0100
|
||||
+++ coreutils-6.10/tests/mkdir/selinux 2008-03-29 17:58:25.000000000 +0100
|
||||
@@ -0,0 +1,50 @@
|
||||
+#!/bin/sh
|
||||
+# ensure that an invalid context doesn't cause a segfault
|
||||
+
|
||||
+# Copyright (C) 2008 Free Software Foundation, Inc.
|
||||
+
|
||||
+# This program is free software: you can redistribute it and/or modify
|
||||
+# it under the terms of the GNU General Public License as published by
|
||||
+# the Free Software Foundation, either version 3 of the License, or
|
||||
+# (at your option) any later version.
|
||||
+
|
||||
+# This program is distributed in the hope that it will be useful,
|
||||
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
+# GNU General Public License for more details.
|
||||
+
|
||||
+# You should have received a copy of the GNU General Public License
|
||||
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
+
|
||||
+if test "$VERBOSE" = yes; then
|
||||
+ set -x
|
||||
+ mkdir --version
|
||||
+ mkfifo --version
|
||||
+ mknod --version
|
||||
+fi
|
||||
+
|
||||
+. $srcdir/../envvar-check
|
||||
+. $srcdir/../lang-default
|
||||
+. $srcdir/../test-lib.sh
|
||||
+
|
||||
+c=invalid-selinux-context
|
||||
+fail=0
|
||||
+msg="failed to set default file creation context to \`$c':"
|
||||
+
|
||||
+# Test each of mkdir, mknod, mkfifo with "-Z invalid-context".
|
||||
+
|
||||
+for cmd_w_arg in 'mkdir dir' 'mknod b p' 'mkfifo f'; do
|
||||
+ $cmd_w_arg -Z $c 2> out && fail=1
|
||||
+ set $cmd_w_arg; cmd=$1
|
||||
+ echo "$cmd: $msg" > exp || fail=1
|
||||
+
|
||||
+ # Some systems fail with ENOTSUP, or EINVAL, or even ENOENT.
|
||||
+ sed \
|
||||
+ -e 's/ Invalid argument$//' \
|
||||
+ -e 's/ Operation not supported$//' \
|
||||
+ -e 's/ No such file or directory$//' out > k || fail=1
|
||||
+ mv k out || fail=1
|
||||
+ compare out exp || fail=1
|
||||
+done
|
||||
+
|
||||
+(exit $fail); exit $fail
|
@ -1,227 +0,0 @@
|
||||
diff --git a/doc/coreutils.texi b/doc/coreutils.texi
|
||||
index df6792d..e3a0d50 100644
|
||||
--- a/doc/coreutils.texi
|
||||
+++ b/doc/coreutils.texi
|
||||
@@ -2838,7 +2838,7 @@ Use digits in suffixes rather than lower-case letters.
|
||||
|
||||
@itemx --verbose
|
||||
@opindex --verbose
|
||||
-Write a diagnostic to standard error just before each output file is opened.
|
||||
+Write a diagnostic just before each output file is opened.
|
||||
|
||||
@end table
|
||||
|
||||
@@ -8190,7 +8190,7 @@ If a file has multiple links, only the named links will be removed.
|
||||
@itemx --verbose
|
||||
@opindex -v
|
||||
@opindex --verbose
|
||||
-Display status updates as sterilization proceeds.
|
||||
+Display to standard error status updates as sterilization proceeds.
|
||||
|
||||
@item -x
|
||||
@itemx --exact
|
||||
diff --git a/src/install.c b/src/install.c
|
||||
index db08751..6925c55 100644
|
||||
--- a/src/install.c
|
||||
+++ b/src/install.c
|
||||
@@ -1,5 +1,5 @@
|
||||
/* install - copy files and set attributes
|
||||
- Copyright (C) 89, 90, 91, 1995-2007 Free Software Foundation, Inc.
|
||||
+ Copyright (C) 89, 90, 91, 1995-2008 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
|
||||
@@ -160,6 +160,19 @@ static struct option const long_options[] =
|
||||
{NULL, 0, NULL, 0}
|
||||
};
|
||||
|
||||
+/* Verbose formatted output of variable count of arguments. */
|
||||
+static void
|
||||
+verbose_output (FILE *fp, char const *fmt, ...)
|
||||
+{
|
||||
+ va_list ap;
|
||||
+ fputs (program_name, fp);
|
||||
+ fputs (": ", fp);
|
||||
+ va_start (ap, fmt);
|
||||
+ vfprintf (fp, fmt, ap);
|
||||
+ va_end (ap);
|
||||
+ fputc ('\n', fp);
|
||||
+}
|
||||
+
|
||||
static void
|
||||
cp_option_init (struct cp_options *x)
|
||||
{
|
||||
@@ -762,7 +775,7 @@ announce_mkdir (char const *dir, void *options)
|
||||
{
|
||||
struct cp_options const *x = options;
|
||||
if (x->verbose)
|
||||
- error (0, 0, _("creating directory %s"), quote (dir));
|
||||
+ verbose_output (stdout,_("creating directory %s"), quote (dir));
|
||||
}
|
||||
|
||||
/* Make ancestor directory DIR, whose last file name component is
|
||||
diff --git a/src/rmdir.c b/src/rmdir.c
|
||||
index bb1a0c8..1f17f6a 100644
|
||||
--- a/src/rmdir.c
|
||||
+++ b/src/rmdir.c
|
||||
@@ -1,6 +1,6 @@
|
||||
/* rmdir -- remove directories
|
||||
|
||||
- Copyright (C) 90, 91, 1995-2002, 2004, 2005, 2006, 2007 Free Software
|
||||
+ Copyright (C) 90, 91, 1995-2002, 2004-2008 Free Software
|
||||
Foundation, Inc.
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
@@ -72,6 +72,19 @@ static struct option const longopts[] =
|
||||
{NULL, 0, NULL, 0}
|
||||
};
|
||||
|
||||
+/* Verbose formatted output of variable count of arguments. */
|
||||
+static void
|
||||
+verbose_output (FILE *fp, char const *fmt, ...)
|
||||
+{
|
||||
+ va_list ap;
|
||||
+ fputs (program_name, fp);
|
||||
+ fputs (": ", fp);
|
||||
+ va_start (ap, fmt);
|
||||
+ vfprintf (fp, fmt, ap);
|
||||
+ va_end (ap);
|
||||
+ fputc ('\n', fp);
|
||||
+}
|
||||
+
|
||||
/* Return true if ERROR_NUMBER is one of the values associated
|
||||
with a failed rmdir due to non-empty target directory. */
|
||||
static bool
|
||||
@@ -134,7 +147,7 @@ remove_parents (char *dir)
|
||||
|
||||
/* Give a diagnostic for each attempted removal if --verbose. */
|
||||
if (verbose)
|
||||
- error (0, 0, _("removing directory, %s"), quote (dir));
|
||||
+ verbose_output (stdout,_("removing directory, %s"), quote (dir));
|
||||
|
||||
ok = (rmdir (dir) == 0);
|
||||
|
||||
@@ -233,7 +246,7 @@ main (int argc, char **argv)
|
||||
|
||||
/* Give a diagnostic for each attempted removal if --verbose. */
|
||||
if (verbose)
|
||||
- error (0, 0, _("removing directory, %s"), dir);
|
||||
+ verbose_output(stdout, _("removing directory, %s"), dir);
|
||||
|
||||
if (rmdir (dir) != 0)
|
||||
{
|
||||
diff --git a/src/mkdir.c b/src/mkdir.c
|
||||
index 0704077..3781065 100644
|
||||
--- a/src/mkdir.c
|
||||
+++ b/src/mkdir.c
|
||||
@@ -1,5 +1,5 @@
|
||||
/* mkdir -- make directories
|
||||
- Copyright (C) 90, 1995-2002, 2004-2007 Free Software Foundation, Inc.
|
||||
+ Copyright (C) 90, 1995-2002, 2004-2008 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
|
||||
@@ -79,6 +79,19 @@ Mandatory arguments to long options are mandatory for short options too.\n\
|
||||
exit (status);
|
||||
}
|
||||
|
||||
+/* Verbose formatted output of variable count of arguments. */
|
||||
+static void
|
||||
+verbose_output (FILE *fp, char const *fmt, ...)
|
||||
+{
|
||||
+ va_list ap;
|
||||
+ fputs (program_name, fp);
|
||||
+ fputs (": ", fp);
|
||||
+ va_start (ap, fmt);
|
||||
+ vfprintf (fp, fmt, ap);
|
||||
+ va_end (ap);
|
||||
+ fputc ('\n', fp);
|
||||
+}
|
||||
+
|
||||
/* Options passed to subsidiary functions. */
|
||||
struct mkdir_options
|
||||
{
|
||||
@@ -105,7 +118,7 @@ announce_mkdir (char const *dir, void *options)
|
||||
{
|
||||
struct mkdir_options const *o = options;
|
||||
if (o->created_directory_format)
|
||||
- error (0, 0, o->created_directory_format, quote (dir));
|
||||
+ verbose_output (stdout, o->created_directory_format, quote (dir));
|
||||
}
|
||||
|
||||
/* Make ancestor directory DIR, whose last component is COMPONENT,
|
||||
diff --git a/src/split.c b/src/split.c
|
||||
index 5807a1c..f84d40e 100644
|
||||
--- a/src/split.c
|
||||
+++ b/src/split.c
|
||||
@@ -1,5 +1,5 @@
|
||||
/* split.c -- split a file into pieces.
|
||||
- Copyright (C) 1988, 1991, 1995-2007 Free Software Foundation, Inc.
|
||||
+ Copyright (C) 1988, 1991, 1995-2008 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
|
||||
@@ -122,8 +122,8 @@ Mandatory arguments to long options are mandatory for short options too.\n\
|
||||
-l, --lines=NUMBER put NUMBER lines per output file\n\
|
||||
"), DEFAULT_SUFFIX_LENGTH);
|
||||
fputs (_("\
|
||||
- --verbose print a diagnostic to standard error just\n\
|
||||
- before each output file is opened\n\
|
||||
+ --verbose print a diagnostic just before each\n\
|
||||
+ output file is opened\n\
|
||||
"), stdout);
|
||||
fputs (HELP_OPTION_DESCRIPTION, stdout);
|
||||
fputs (VERSION_OPTION_DESCRIPTION, stdout);
|
||||
@@ -208,7 +208,7 @@ cwrite (bool new_file_flag, const char *bp, size_t bytes)
|
||||
|
||||
next_file_name ();
|
||||
if (verbose)
|
||||
- fprintf (stderr, _("creating file %s\n"), quote (outfile));
|
||||
+ fprintf (stdout, _("creating file %s\n"), quote (outfile));
|
||||
output_desc = open (outfile,
|
||||
O_WRONLY | O_CREAT | O_TRUNC | O_BINARY,
|
||||
(S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP
|
||||
diff --git a/tests/misc/split-a b/tests/misc/split-a
|
||||
index 794115f..a8eed38 100755
|
||||
--- a/tests/misc/split-a
|
||||
+++ b/tests/misc/split-a
|
||||
@@ -1,7 +1,7 @@
|
||||
#!/bin/sh
|
||||
# Show that split -a works.
|
||||
|
||||
-# Copyright (C) 2002-2007 Free Software Foundation, Inc.
|
||||
+# Copyright (C) 2002-2008 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
|
||||
@@ -39,7 +39,7 @@ test -f xaz && fail=1
|
||||
rm -f x*
|
||||
|
||||
# With a longer suffix, it must succeed.
|
||||
-split --verbose -b 1 -a 2 in 2> err || fail=1
|
||||
+split --verbose -b 1 -a 2 in > err || fail=1
|
||||
test -f xaa || fail=1
|
||||
test -f xaz || fail=1
|
||||
test -f xba || fail=1
|
||||
diff --git a/tests/mkdir/p-v b/tests/mkdir/p-v
|
||||
index 2c84b41..569e9b0 100755
|
||||
--- a/tests/mkdir/p-v
|
||||
+++ b/tests/mkdir/p-v
|
||||
@@ -1,7 +1,7 @@
|
||||
#!/bin/sh
|
||||
# Test mkdir -pv.
|
||||
|
||||
-# Copyright (C) 2006, 2007 Free Software Foundation, Inc.
|
||||
+# Copyright (C) 2006-2008 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
|
||||
@@ -24,7 +24,7 @@ fi
|
||||
. $srcdir/../lang-default
|
||||
. $srcdir/../test-lib.sh
|
||||
|
||||
-mkdir -pv foo/a/b/c/d 2>out || exit
|
||||
+mkdir -pv foo/a/b/c/d >out || exit
|
||||
|
||||
diff - out <<\EOF
|
||||
mkdir: created directory `foo'
|
@ -1,45 +0,0 @@
|
||||
diff -urNp coreutils-6.10-orig/src/dd.c coreutils-6.10/src/dd.c
|
||||
--- coreutils-6.10-orig/src/dd.c 2007-12-06 14:22:42.000000000 +0100
|
||||
+++ coreutils-6.10/src/dd.c 2008-03-11 12:48:12.000000000 +0100
|
||||
@@ -391,6 +391,25 @@ static char const ebcdic_to_ascii[] =
|
||||
'\070', '\071', '\372', '\373', '\374', '\375', '\376', '\377'
|
||||
};
|
||||
|
||||
+/* True if we need to close the standard output *stream*. */
|
||||
+static bool close_stdout_required = true;
|
||||
+
|
||||
+/* The only reason to close the standard output *stream* is if
|
||||
+ parse_long_options fails (as it does for --help or --version).
|
||||
+ In any other case, dd uses only the STDOUT_FILENO file descriptor,
|
||||
+ and the "cleanup" function calls "close (STDOUT_FILENO)".
|
||||
+ Closing the file descriptor and then letting the usual atexit-run
|
||||
+ close_stdout function call "fclose (stdout)" would result in a
|
||||
+ harmless failure of the close syscall (with errno EBADF).
|
||||
+ This function serves solely to avoid the unnecessary close_stdout
|
||||
+ call, once parse_long_options has succeeded. */
|
||||
+static void
|
||||
+maybe_close_stdout (void)
|
||||
+{
|
||||
+ if (close_stdout_required)
|
||||
+ close_stdout ();
|
||||
+}
|
||||
+
|
||||
void
|
||||
usage (int status)
|
||||
{
|
||||
@@ -1639,12 +1658,14 @@ main (int argc, char **argv)
|
||||
textdomain (PACKAGE);
|
||||
|
||||
/* Arrange to close stdout if parse_long_options exits. */
|
||||
- atexit (close_stdout);
|
||||
+ atexit (maybe_close_stdout);
|
||||
|
||||
page_size = getpagesize ();
|
||||
|
||||
parse_long_options (argc, argv, PROGRAM_NAME, PACKAGE, VERSION,
|
||||
usage, AUTHORS, (char const *) NULL);
|
||||
+ close_stdout_required = false;
|
||||
+
|
||||
if (getopt_long (argc, argv, "", NULL, NULL) != -1)
|
||||
usage (EXIT_FAILURE);
|
||||
|
@ -329,7 +329,7 @@
|
||||
error (EXIT_FAILURE, errno, "-");
|
||||
--- coreutils-6.8+/src/join.c.i18n 2007-01-14 15:41:28.000000000 +0000
|
||||
+++ coreutils-6.8+/src/join.c 2007-03-01 15:08:24.000000000 +0000
|
||||
@@ -23,16 +23,30 @@
|
||||
@@ -23,17 +23,31 @@
|
||||
#include <sys/types.h>
|
||||
#include <getopt.h>
|
||||
|
||||
@ -352,6 +352,7 @@
|
||||
#include "stdio--.h"
|
||||
#include "xmemcoll.h"
|
||||
#include "xstrtol.h"
|
||||
#include "argmatch.h"
|
||||
|
||||
+/* Some systems, like BeOS, have multibyte encodings but lack mbstate_t. */
|
||||
+#if HAVE_MBRTOWC && defined mbstate_t
|
||||
@ -562,144 +563,6 @@
|
||||
xfields (line);
|
||||
return true;
|
||||
}
|
||||
@@ -303,56 +469,114 @@
|
||||
keycmp (struct line const *line1, struct line const *line2)
|
||||
{
|
||||
/* Start of field to compare in each file. */
|
||||
- char *beg1;
|
||||
- char *beg2;
|
||||
-
|
||||
- size_t len1;
|
||||
- size_t len2; /* Length of fields to compare. */
|
||||
+ char *beg[2];
|
||||
+ char *copy[2];
|
||||
+ size_t len[2]; /* Length of fields to compare. */
|
||||
int diff;
|
||||
+ int i, j;
|
||||
|
||||
if (join_field_1 < line1->nfields)
|
||||
{
|
||||
- beg1 = line1->fields[join_field_1].beg;
|
||||
- len1 = line1->fields[join_field_1].len;
|
||||
+ beg[0] = line1->fields[join_field_1].beg;
|
||||
+ len[0] = line1->fields[join_field_1].len;
|
||||
}
|
||||
else
|
||||
{
|
||||
- beg1 = NULL;
|
||||
- len1 = 0;
|
||||
+ beg[0] = NULL;
|
||||
+ len[0] = 0;
|
||||
}
|
||||
|
||||
if (join_field_2 < line2->nfields)
|
||||
{
|
||||
- beg2 = line2->fields[join_field_2].beg;
|
||||
- len2 = line2->fields[join_field_2].len;
|
||||
+ beg[1] = line2->fields[join_field_2].beg;
|
||||
+ len[1] = line2->fields[join_field_2].len;
|
||||
}
|
||||
else
|
||||
{
|
||||
- beg2 = NULL;
|
||||
- len2 = 0;
|
||||
+ beg[1] = NULL;
|
||||
+ len[1] = 0;
|
||||
}
|
||||
|
||||
- if (len1 == 0)
|
||||
- return len2 == 0 ? 0 : -1;
|
||||
- if (len2 == 0)
|
||||
+ if (len[0] == 0)
|
||||
+ return len[1] == 0 ? 0 : -1;
|
||||
+ if (len[1] == 0)
|
||||
return 1;
|
||||
|
||||
if (ignore_case)
|
||||
{
|
||||
- /* FIXME: ignore_case does not work with NLS (in particular,
|
||||
- with multibyte chars). */
|
||||
- diff = memcasecmp (beg1, beg2, MIN (len1, len2));
|
||||
+#ifdef HAVE_MBRTOWC
|
||||
+ if (MB_CUR_MAX > 1)
|
||||
+ {
|
||||
+ size_t mblength;
|
||||
+ wchar_t wc, uwc;
|
||||
+ mbstate_t state, state_bak;
|
||||
+
|
||||
+ memset (&state, '\0', sizeof (mbstate_t));
|
||||
+
|
||||
+ for (i = 0; i < 2; i++)
|
||||
+ {
|
||||
+ copy[i] = alloca (len[i] + 1);
|
||||
+
|
||||
+ for (j = 0; j < MIN (len[0], len[1]);)
|
||||
+ {
|
||||
+ state_bak = state;
|
||||
+ mblength = mbrtowc (&wc, beg[i] + j, len[i] - j, &state);
|
||||
+
|
||||
+ switch (mblength)
|
||||
+ {
|
||||
+ case (size_t) -1:
|
||||
+ case (size_t) -2:
|
||||
+ state = state_bak;
|
||||
+ /* Fall through */
|
||||
+ case 0:
|
||||
+ mblength = 1;
|
||||
+ break;
|
||||
+
|
||||
+ default:
|
||||
+ uwc = towupper (wc);
|
||||
+
|
||||
+ if (uwc != wc)
|
||||
+ {
|
||||
+ mbstate_t state_wc;
|
||||
+
|
||||
+ memset (&state_wc, '\0', sizeof (mbstate_t));
|
||||
+ wcrtomb (copy[i] + j, uwc, &state_wc);
|
||||
+ }
|
||||
+ else
|
||||
+ memcpy (copy[i] + j, beg[i] + j, mblength);
|
||||
+ }
|
||||
+ j += mblength;
|
||||
+ }
|
||||
+ copy[i][j] = '\0';
|
||||
+ }
|
||||
+ }
|
||||
+ else
|
||||
+#endif
|
||||
+ {
|
||||
+ for (i = 0; i < 2; i++)
|
||||
+ {
|
||||
+ copy[i] = alloca (len[i] + 1);
|
||||
+
|
||||
+ for (j = 0; j < MIN (len[0], len[1]); j++)
|
||||
+ copy[i][j] = toupper (beg[i][j]);
|
||||
+
|
||||
+ copy[i][j] = '\0';
|
||||
+ }
|
||||
+ }
|
||||
}
|
||||
else
|
||||
{
|
||||
- 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];
|
||||
}
|
||||
|
||||
+ if (hard_LC_COLLATE)
|
||||
+ return xmemcoll ((char *) copy[0], len[0], (char *) copy[1], len[1]);
|
||||
+ diff = memcmp (copy[0], copy[1], MIN (len[0], len[1]));
|
||||
+
|
||||
if (diff)
|
||||
return diff;
|
||||
- return len1 < len2 ? -1 : len1 != len2;
|
||||
+ return len[0] - len[1];
|
||||
}
|
||||
|
||||
/* Print field N of LINE if it exists and is nonempty, otherwise
|
||||
@@ -377,11 +601,18 @@
|
||||
|
||||
/* Print the join of LINE1 and LINE2. */
|
||||
@ -823,7 +686,149 @@
|
||||
+ tablen = newtablen;
|
||||
}
|
||||
break;
|
||||
|
||||
diff -urNp coreutils-6.11-orig/src/join.c coreutils-6.11/src/join.c
|
||||
--- coreutils-6.11-orig/src/join.c 2008-04-21 13:44:32.000000000 +0200
|
||||
+++ coreutils-6.11/src/join.c 2008-04-21 14:03:22.000000000 +0200
|
||||
@@ -324,56 +324,115 @@ keycmp (struct line const *line1, struct
|
||||
size_t jf_1, size_t jf_2)
|
||||
{
|
||||
/* Start of field to compare in each file. */
|
||||
- char *beg1;
|
||||
- char *beg2;
|
||||
-
|
||||
- size_t len1;
|
||||
- size_t len2; /* Length of fields to compare. */
|
||||
+ char *beg[2];
|
||||
+ char *copy[2];
|
||||
+ size_t len[2]; /* Length of fields to compare. */
|
||||
int diff;
|
||||
+ int i, j;
|
||||
|
||||
if (jf_1 < line1->nfields)
|
||||
{
|
||||
- beg1 = line1->fields[jf_1].beg;
|
||||
- len1 = line1->fields[jf_1].len;
|
||||
+ beg[0] = line1->fields[jf_1].beg;
|
||||
+ len[0] = line1->fields[jf_1].len;
|
||||
}
|
||||
else
|
||||
{
|
||||
- beg1 = NULL;
|
||||
- len1 = 0;
|
||||
+ beg[0] = NULL;
|
||||
+ len[0] = 0;
|
||||
}
|
||||
|
||||
if (jf_2 < line2->nfields)
|
||||
{
|
||||
- beg2 = line2->fields[jf_2].beg;
|
||||
- len2 = line2->fields[jf_2].len;
|
||||
+ beg[1] = line2->fields[jf_2].beg;
|
||||
+ len[1] = line2->fields[jf_2].len;
|
||||
}
|
||||
else
|
||||
{
|
||||
- beg2 = NULL;
|
||||
- len2 = 0;
|
||||
+ beg[1] = NULL;
|
||||
+ len[1] = 0;
|
||||
}
|
||||
|
||||
- if (len1 == 0)
|
||||
- return len2 == 0 ? 0 : -1;
|
||||
- if (len2 == 0)
|
||||
+ if (len[0] == 0)
|
||||
+ return len[1] == 0 ? 0 : -1;
|
||||
+ if (len[1] == 0)
|
||||
return 1;
|
||||
|
||||
if (ignore_case)
|
||||
{
|
||||
- /* FIXME: ignore_case does not work with NLS (in particular,
|
||||
- with multibyte chars). */
|
||||
- diff = memcasecmp (beg1, beg2, MIN (len1, len2));
|
||||
+#ifdef HAVE_MBRTOWC
|
||||
+ if (MB_CUR_MAX > 1)
|
||||
+ {
|
||||
+ size_t mblength;
|
||||
+ wchar_t wc, uwc;
|
||||
+ mbstate_t state, state_bak;
|
||||
+
|
||||
+ memset (&state, '\0', sizeof (mbstate_t));
|
||||
+
|
||||
+ for (i = 0; i < 2; i++)
|
||||
+ {
|
||||
+ copy[i] = alloca (len[i] + 1);
|
||||
+
|
||||
+ for (j = 0; j < MIN (len[0], len[1]);)
|
||||
+ {
|
||||
+ state_bak = state;
|
||||
+ mblength = mbrtowc (&wc, beg[i] + j, len[i] - j, &state);
|
||||
+
|
||||
+ switch (mblength)
|
||||
+ {
|
||||
+ case (size_t) -1:
|
||||
+ case (size_t) -2:
|
||||
+ state = state_bak;
|
||||
+ /* Fall through */
|
||||
+ case 0:
|
||||
+ mblength = 1;
|
||||
+ break;
|
||||
+
|
||||
+ default:
|
||||
+ uwc = towupper (wc);
|
||||
+
|
||||
+ if (uwc != wc)
|
||||
+ {
|
||||
+ mbstate_t state_wc;
|
||||
+
|
||||
+ memset (&state_wc, '\0', sizeof (mbstate_t));
|
||||
+ wcrtomb (copy[i] + j, uwc, &state_wc);
|
||||
+ }
|
||||
+ else
|
||||
+ memcpy (copy[i] + j, beg[i] + j, mblength);
|
||||
+ }
|
||||
+ j += mblength;
|
||||
+ }
|
||||
+ copy[i][j] = '\0';
|
||||
+ }
|
||||
+ }
|
||||
+ else
|
||||
+#endif
|
||||
+ {
|
||||
+ for (i = 0; i < 2; i++)
|
||||
+ {
|
||||
+ copy[i] = alloca (len[i] + 1);
|
||||
+
|
||||
+ for (j = 0; j < MIN (len[0], len[1]); j++)
|
||||
+ copy[i][j] = toupper (beg[i][j]);
|
||||
+
|
||||
+ copy[i][j] = '\0';
|
||||
+ }
|
||||
+ }
|
||||
}
|
||||
else
|
||||
{
|
||||
- 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];
|
||||
}
|
||||
|
||||
+ if (hard_LC_COLLATE)
|
||||
+ return xmemcoll ((char *) copy[0], len[0], (char *) copy[1], len[1]);
|
||||
+ diff = memcmp (copy[0], copy[1], MIN (len[0], len[1]));
|
||||
+
|
||||
+
|
||||
if (diff)
|
||||
return diff;
|
||||
- return len1 < len2 ? -1 : len1 != len2;
|
||||
+ return len[0] - len[1];
|
||||
}
|
||||
|
||||
/* Check that successive input lines PREV and CURRENT from input file
|
||||
--- coreutils-6.8+/src/uniq.c.i18n 2007-01-14 15:41:28.000000000 +0000
|
||||
+++ coreutils-6.8+/src/uniq.c 2007-03-01 15:08:24.000000000 +0000
|
||||
@@ -23,6 +23,16 @@
|
||||
|
@ -1,103 +0,0 @@
|
||||
src/copy.c | 5 +++--
|
||||
tests/mv/Makefile.am | 4 ++--
|
||||
tests/mv/atomic2 | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
3 files changed, 55 insertions(+), 4 deletions(-)
|
||||
create mode 100755 tests/mv/atomic2
|
||||
|
||||
diff --git a/src/copy.c b/src/copy.c
|
||||
index fd31b5c..208a674 100644
|
||||
--- a/src/copy.c
|
||||
+++ b/src/copy.c
|
||||
@@ -1339,10 +1339,11 @@ copy_internal (char const *src_name, char const *dst_name,
|
||||
new_dst = true;
|
||||
}
|
||||
else if (! S_ISDIR (dst_sb.st_mode)
|
||||
+ /* Never unlink dst_name when in move mode. */
|
||||
+ && ! x->move_mode
|
||||
&& (x->unlink_dest_before_opening
|
||||
|| (x->preserve_links && 1 < dst_sb.st_nlink)
|
||||
- || (!x->move_mode
|
||||
- && x->dereference == DEREF_NEVER
|
||||
+ || (x->dereference == DEREF_NEVER
|
||||
&& S_ISLNK (src_sb.st_mode))
|
||||
))
|
||||
{
|
||||
diff --git a/tests/mv/Makefile.am b/tests/mv/Makefile.am
|
||||
index c121911..92ec68e 100644
|
||||
--- a/tests/mv/Makefile.am
|
||||
+++ b/tests/mv/Makefile.am
|
||||
@@ -1,7 +1,6 @@
|
||||
# Make coreutils tests for "mv". -*-Makefile-*-
|
||||
|
||||
-# Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
|
||||
-# Free Software Foundation, Inc.
|
||||
+# Copyright (C) 1998-2008 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
|
||||
@@ -17,6 +16,7 @@
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
TESTS = \
|
||||
+ atomic2 \
|
||||
sticky-to-xpart \
|
||||
hard-verbose \
|
||||
backup-dir \
|
||||
diff --git a/tests/mv/atomic2 b/tests/mv/atomic2
|
||||
new file mode 100755
|
||||
index 0000000..d1029aa
|
||||
--- /dev/null
|
||||
+++ b/tests/mv/atomic2
|
||||
@@ -0,0 +1,50 @@
|
||||
+#!/bin/sh
|
||||
+# ensure that mv doesn't first unlink a multi-hard-linked destination
|
||||
+
|
||||
+# Copyright (C) 2008 Free Software Foundation, Inc.
|
||||
+
|
||||
+# This program is free software: you can redistribute it and/or modify
|
||||
+# it under the terms of the GNU General Public License as published by
|
||||
+# the Free Software Foundation, either version 3 of the License, or
|
||||
+# (at your option) any later version.
|
||||
+
|
||||
+# This program is distributed in the hope that it will be useful,
|
||||
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
+# GNU General Public License for more details.
|
||||
+
|
||||
+# You should have received a copy of the GNU General Public License
|
||||
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
+
|
||||
+if test "$VERBOSE" = yes; then
|
||||
+ set -x
|
||||
+ mv --version
|
||||
+fi
|
||||
+
|
||||
+. $srcdir/../strace
|
||||
+. $srcdir/../test-lib.sh
|
||||
+
|
||||
+# Before the fix, mv would unnecessarily unlink the destination symlink:
|
||||
+# $ rm -f a b b2; touch a b; ln b b2; strace -e unlink /p/bin/mv a b
|
||||
+# unlink("b") = 0
|
||||
+#
|
||||
+# With the fix, it doesn't call unlink:
|
||||
+# $ rm -f a b b2; touch a b; ln b b2; strace -e unlink ./mv a b
|
||||
+# $
|
||||
+
|
||||
+touch a b || framework_failure
|
||||
+ln b b2 || framework_failure
|
||||
+
|
||||
+fail=0
|
||||
+
|
||||
+strace -qe unlink mv a b > out 2>&1 || fail=1
|
||||
+$EGREP 'unlink.*"b"' out && fail=1
|
||||
+
|
||||
+# Ensure that the source, "a", is gone.
|
||||
+ls -dl a > /dev/null 2>&1 && fail=1
|
||||
+
|
||||
+# Ensure that the destination, "b", has link count 1.
|
||||
+n_links=`stat --printf=%h b` || fail=1
|
||||
+test "$n_links" = 1 || fail=1
|
||||
+
|
||||
+(exit $fail); exit $fail
|
||||
--
|
||||
1.5.5.rc0.7.g57e83
|
@ -967,19 +967,6 @@ diff -urp coreutils-6.10-orig/src/mkdir.c coreutils-6.10/src/mkdir.c
|
||||
"), stdout);
|
||||
fputs (HELP_OPTION_DESCRIPTION, stdout);
|
||||
fputs (VERSION_OPTION_DESCRIPTION, stdout);
|
||||
@@ -173,6 +174,12 @@ main (int argc, char **argv)
|
||||
options.created_directory_format = _("created directory %s");
|
||||
break;
|
||||
case 'Z':
|
||||
+ /* politely decline if we're not on a selinux-enabled kernel. */
|
||||
+ if( !(is_selinux_enabled()>0)) {
|
||||
+ fprintf( stderr, "Sorry, --context (-Z) can be used only on "
|
||||
+ "a selinux-enabled kernel.\n" );
|
||||
+ exit( 1 );
|
||||
+ }
|
||||
scontext = optarg;
|
||||
break;
|
||||
case_GETOPT_HELP_CHAR;
|
||||
diff -urp coreutils-6.10-orig/src/mkfifo.c coreutils-6.10/src/mkfifo.c
|
||||
--- coreutils-6.10-orig/src/mkfifo.c 2008-01-05 23:58:25.000000000 +0100
|
||||
+++ coreutils-6.10/src/mkfifo.c 2008-01-25 16:58:15.000000000 +0100
|
||||
@ -993,19 +980,6 @@ diff -urp coreutils-6.10-orig/src/mkfifo.c coreutils-6.10/src/mkfifo.c
|
||||
"), stdout);
|
||||
fputs (_("\
|
||||
Mandatory arguments to long options are mandatory for short options too.\n\
|
||||
@@ -98,6 +99,12 @@ main (int argc, char **argv)
|
||||
specified_mode = optarg;
|
||||
break;
|
||||
case 'Z':
|
||||
+ if (!(0 < is_selinux_enabled()))
|
||||
+ {
|
||||
+ fprintf( stderr, "Sorry, --context (-Z) can be used only on "
|
||||
+ "a selinux-enabled kernel.\n" );
|
||||
+ exit (1);
|
||||
+ }
|
||||
scontext = optarg;
|
||||
break;
|
||||
case_GETOPT_HELP_CHAR;
|
||||
diff -urp coreutils-6.10-orig/src/mknod.c coreutils-6.10/src/mknod.c
|
||||
--- coreutils-6.10-orig/src/mknod.c 2008-01-05 23:58:25.000000000 +0100
|
||||
+++ coreutils-6.10/src/mknod.c 2008-01-25 17:01:11.000000000 +0100
|
||||
@ -1028,19 +1002,6 @@ diff -urp coreutils-6.10-orig/src/mknod.c coreutils-6.10/src/mknod.c
|
||||
"), stdout);
|
||||
fputs (_("\
|
||||
Mandatory arguments to long options are mandatory for short options too.\n\
|
||||
@@ -114,6 +115,12 @@ main (int argc, char **argv)
|
||||
specified_mode = optarg;
|
||||
break;
|
||||
case 'Z':
|
||||
+ /* politely decline if we're not on a selinux-enabled kernel. */
|
||||
+ if( !(is_selinux_enabled()>0)) {
|
||||
+ fprintf( stderr, "Sorry, --context (-Z) can be used only on "
|
||||
+ "a selinux-enabled kernel.\n" );
|
||||
+ exit( 1 );
|
||||
+ }
|
||||
scontext = optarg;
|
||||
break;
|
||||
case_GETOPT_HELP_CHAR;
|
||||
diff -urp coreutils-6.10-orig/src/mv.c coreutils-6.10/src/mv.c
|
||||
--- coreutils-6.10-orig/src/mv.c 2008-01-05 23:59:11.000000000 +0100
|
||||
+++ coreutils-6.10/src/mv.c 2008-01-25 17:11:50.000000000 +0100
|
||||
|
@ -1,7 +1,7 @@
|
||||
Summary: The GNU core utilities: a set of tools commonly used in shell scripts
|
||||
Name: coreutils
|
||||
Version: 6.10
|
||||
Release: 21%{?dist}
|
||||
Version: 6.11
|
||||
Release: 1%{?dist}
|
||||
License: GPLv3+
|
||||
Group: System Environment/Base
|
||||
Url: http://www.gnu.org/software/coreutils/
|
||||
@ -18,12 +18,6 @@ Source202: coreutils-su-l.pamd
|
||||
Source203: coreutils-runuser-l.pamd
|
||||
|
||||
# From upstream
|
||||
Patch1: coreutils-6.10-verbose.patch
|
||||
Patch2: coreutils-dddoubleclose.patch
|
||||
Patch3: coreutils-mvatomic.patch
|
||||
Patch4: coreutils-6.10-lonebackslash.patch
|
||||
Patch5: coreutils-6.10-mkscontextsegfault.patch
|
||||
Patch6: coreutils-6.10-md5sha1sum.patch
|
||||
|
||||
# Our patches
|
||||
Patch100: coreutils-chgrp.patch
|
||||
@ -102,12 +96,6 @@ lzma -dc %SOURCE0 | tar xf -
|
||||
cd %name-%version
|
||||
|
||||
# From upstream
|
||||
%patch1 -p1 -b .verbose
|
||||
%patch2 -p1 -b .doubleclose
|
||||
%patch3 -p1 -b .atomic
|
||||
%patch4 -p1 -b .backslash
|
||||
%patch5 -p1 -b .mksegfault
|
||||
%patch6 -p1 -b .mda5sum
|
||||
|
||||
# Our patches
|
||||
%patch100 -p1 -b .chgrp
|
||||
@ -138,7 +126,6 @@ cd %name-%version
|
||||
%patch951 -p1 -b .selinuxman
|
||||
|
||||
chmod a+x tests/sort/sort-mb-tests
|
||||
chmod a+x tests/mkdir/selinux
|
||||
|
||||
#fix typos/mistakes in localized documentation(#439410, #440056)
|
||||
for pofile in $(find ./po/*.p*)
|
||||
@ -314,6 +301,10 @@ fi
|
||||
/sbin/runuser
|
||||
|
||||
%changelog
|
||||
* Mon Apr 21 2008 Ondrej Vasik <ovasik@redhat.com> - 6.11-1
|
||||
- New upstream release 6.11
|
||||
- removed accepted patches + few minor patch changes
|
||||
|
||||
* Fri Apr 18 2008 Ondrej Vasik <ovasik@redhat.com> - 6.10-21
|
||||
- fix wrong checksum line handling in sha1sum -c
|
||||
command(#439531)
|
||||
|
@ -1,9 +1,9 @@
|
||||
--- coreutils-5.92/man/date.1.dateman 2005-10-22 19:14:46.000000000 +0100
|
||||
+++ coreutils-5.92/man/date.1 2005-10-24 17:57:38.000000000 +0100
|
||||
@@ -188,6 +188,11 @@
|
||||
then an optional modifier, which is either
|
||||
E to use the locale's alternate representations if available, or
|
||||
O to use the locale's alternate numeric symbols if available.
|
||||
@@ -214,6 +214,11 @@
|
||||
relative date, and numbers. An empty string indicates the beginning
|
||||
of the day. The date string format is more complex than is easily
|
||||
documented here but is fully described in the info documentation.
|
||||
+.SH ENVIRONMENT
|
||||
+.TP
|
||||
+TZ
|
||||
|
Loading…
Reference in New Issue
Block a user