Upstream-Status: Inappropriate [legacy version]

This patch was imported from the Fedora Core 8 coreutils-6.9-9 package.

The package is stated as being Licensed as GPLv2+.

Signed-off-by: Mark Hatle <mark.hatle@windriver.com>

--- coreutils-6.9/src/ls.c.ls-x	2007-06-13 14:27:36.000000000 +0100
+++ coreutils-6.9/src/ls.c	2007-06-13 14:28:42.000000000 +0100
@@ -4151,16 +4151,16 @@
   size_t pos = 0;
   size_t cols = calculate_columns (false);
   struct column_info const *line_fmt = &column_info[cols - 1];
-  size_t name_length = length_of_file_name_and_frills (cwd_file);
+  struct fileinfo const *f = sorted_file[0];
+  size_t name_length = length_of_file_name_and_frills (f);
   size_t max_name_length = line_fmt->col_arr[0];
 
   /* Print first entry.  */
-  print_file_name_and_frills (cwd_file);
+  print_file_name_and_frills (f);
 
   /* Now the rest.  */
   for (filesno = 1; filesno < cwd_n_used; ++filesno)
     {
-      struct fileinfo const *f;
       size_t col = filesno % cols;
 
       if (col == 0)
--- coreutils-6.9/tests/ls/Makefile.am.ls-x	2007-03-18 21:36:43.000000000 +0000
+++ coreutils-6.9/tests/ls/Makefile.am	2007-06-13 14:28:42.000000000 +0100
@@ -24,7 +24,7 @@
   stat-dtype \
   inode dangle file-type recursive dired infloop \
   rt-1 time-1 symlink-slash follow-slink no-arg m-option \
-  stat-vs-dirent
+  stat-vs-dirent x-option
 
 EXTRA_DIST = $(TESTS)
 TESTS_ENVIRONMENT = \
--- /dev/null	2007-06-13 08:43:51.993263382 +0100
+++ coreutils-6.9/tests/ls/x-option	2007-06-13 14:28:42.000000000 +0100
@@ -0,0 +1,59 @@
+#!/bin/sh
+# Exercise the -x option.
+
+# Copyright (C) 2007 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 2 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, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301, USA.
+
+if test "$VERBOSE" = yes; then
+  set -x
+  ls --version
+fi
+
+. $srcdir/../envvar-check
+. $srcdir/../lang-default
+
+pwd=`pwd`
+t0=`echo "$0"|sed 's,.*/,,'`.tmp; tmp=$t0/$$
+trap 'status=$?; cd "$pwd" && chmod -R u+rwx $t0 && rm -rf $t0 && exit $status' 0
+trap '(exit $?); exit $?' 1 2 13 15
+
+framework_failure=0
+mkdir -p $tmp || framework_failure=1
+cd $tmp || framework_failure=1
+mkdir subdir || framework_failure=1
+touch subdir/b || framework_failure=1
+touch subdir/a || framework_failure=1
+
+if test $framework_failure = 1; then
+  echo "$0: failure in testing framework" 1>&2
+  (exit 1); exit 1
+fi
+
+fail=0
+
+# Coreutils 6.8 and 6.9 would output this in the wrong order.
+ls -x subdir > out || fail=1
+ls -rx subdir >> out || fail=1
+cat <<\EOF > exp || fail=1
+a  b
+b  a
+EOF
+
+cmp out exp || fail=1
+test $fail = 1 && diff out exp 2> /dev/null
+
+(exit $fail); exit $fail
--- coreutils-6.9/NEWS.ls-x	2007-03-22 21:19:45.000000000 +0000
+++ coreutils-6.9/NEWS	2007-06-13 14:28:42.000000000 +0100
@@ -13,6 +13,11 @@
   Using pr -m -s (i.e. merging files, with TAB as the output separator)
   no longer inserts extraneous spaces between output columns.
 
+** Bug fixes
+
+  ls -x DIR would sometimes output the wrong string in place of the
+  first entry.  [introduced in coreutils-6.8]
+
 
 * Noteworthy changes in release 6.8 (2007-02-24) [not-unstable]
 
