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