Subject: ls --time=mtime is sorting by name instead of mtime

From: Dave <[email-masked]>
Date: Thu, 27 Jun 2024 11:05:51 -0400

The ls command without the -l option and with the --time=mtime option,
is incorrectly sorting by the name rather than by the modification
time.

ls               # sorts by name (ok)
ls --time=mtime  # sorts by name (should sort by mtime)
ls --time=ctime  # sorts by ctime (ok)
ls --time=atime  # sorts by atime (ok)
ls --time=birth  # sorts by birth (ok)

ls -c               # sorts by ctime (ok)
ls -c --time=mtime  # sorts by name (should sort by mtime)
ls -c --time=ctime  # sorts by ctime (ok)
ls -c --time=atime  # sorts by atime (ok)
ls -c --time=birth  # sorts by birth (ok)

ls -u               # sorts by atime (ok)
ls -u --time=mtime  # sorts by name (should sort by mtime)
ls -u --time=ctime  # sorts by ctime (ok)
ls -u --time=atime  # sorts by atime (ok)
ls -u --time=birth  # sorts by birth (ok)

// The current statement in ls.c (lines 2383-2387)
  sort_type = (0 <= sort_opt ? sort_opt
               : (format != long_format
                  && (time_type == time_ctime || time_type == time_atime
                      || time_type == time_btime))
               ? sort_time : sort_name);

// Proposed correction (untested)
  sort_type = (0 <= sort_opt ? sort_opt
               : (format != long_format
                  && (time_type == time_ctime || time_type == time_atime
                      || time_type == time_btime || time_type == time_mtime))
               ? sort_time : sort_name);

ls (GNU coreutils) 9.4

Linux 6.8.0-31-generic #31-Ubuntu SMP PREEMPT_DYNAMIC Sat Apr 20
00:40:06 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux