Files
gnu-coreutils/tests/rm/empty-name
T
Jim Meyering 0dc1f4c6f3 rm: fix empty-name bug introduced with conversion to use fts
While "rm ''" would properly fail, "rm F1 '' F2" would fail
to remove F1 and F2, due to the empty string argument.
This bug was introduced on 2009-07-12, via commit 4f73ecaf,
"rm: rewrite to use fts".
* gnulib: Update to latest, for fixed fts.c.
* NEWS (Bug fixes): Describe it.
* tests/rm/empty-name: Adjust for changed diagnostic.
(mk_file): Define, copied from misc/ls-misc.
(empty-name-2): New test, for today's fix.
* lib/xfts.c (xfts_open): Reflect the change in fts_open, now that
it no longer fails immediately when one argument is the empty string.
Assert that the bit flags were not the cause of failure.
* po/POTFILES.in: Remove xfts.c.
* THANKS: Update.
Reported by Ladislav Hagara.
2009-12-01 14:38:39 +01:00

61 lines
1.8 KiB
Perl
Executable File

#!/usr/bin/perl
# Make sure that rm -r '' fails.
# Copyright (C) 1998, 2003, 2005, 2007-2009 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/>.
# On SunOS 4.1.3, running rm -r '' in a nonempty directory may
# actually remove files with names of entries in the current directory
# but relative to `/' rather than relative to the current directory.
use strict;
(my $program_name = $0) =~ s|.*/||;
# Turn off localization of executable's output.
@ENV{qw(LANGUAGE LANG LC_ALL)} = ('C') x 3;
my $prog = 'rm';
# FIXME: copied from misc/ls-misc; factor into Coreutils.pm?
sub mk_file(@)
{
foreach my $f (@_)
{
open (F, '>', $f) && close F
or die "creating $f: $!\n";
}
}
my @Tests =
(
# test-name options input expected-output
#
['empty-name-1', "''", {EXIT => 1},
{ERR => "$prog: cannot remove `': No such file or directory\n"}],
['empty-name-2', "a '' b", {EXIT => 1},
{ERR => "$prog: cannot remove `': No such file or directory\n"},
{PRE => sub { mk_file qw(a b) }},
{POST => sub {-f 'a' || -f 'b' and die "a or b remain\n" }},
],
);
my $save_temps = $ENV{SAVE_TEMPS};
my $verbose = $ENV{VERBOSE};
my $fail = run_tests ($program_name, $prog, \@Tests, $save_temps, $verbose);
exit $fail;