nshlib/nsh_fscmds: Display modification time in ls -l output

Fixes #17063

Add modification time display to ls -l long format output.
The timestamp is shown as 'YYYY-MM-DD HH:MM' between the permission
string and the file size, following the ISO long-iso format.

Files with st_mtime == 0 (e.g., procfs, tmpfs pseudo-entries) skip
the timestamp display to avoid showing a meaningless epoch time.

Signed-off-by: hanzhijian <hanzhijian@zepp.com>
This commit is contained in:
hanzhijian 2026-06-29 19:21:51 +08:00 committed by Alin Jerpelea
parent b8cb8d1a4a
commit 27c5c71fb7

View file

@ -37,6 +37,7 @@
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <time.h>
#include <string.h>
#include <fcntl.h>
#include <dirent.h>
@ -599,6 +600,19 @@ static int ls_handler(FAR struct nsh_vtbl_s *vtbl, FAR const char *dirpath,
nsh_output(vtbl, "%12" PRIdOFF, buf.st_size);
}
}
/* Display modification time in long format */
if ((lsflags & LSFLAGS_LONG) != 0 && buf.st_mtime != 0)
{
struct tm tm;
char timebuf[20];
time_t mtime = (time_t)buf.st_mtime;
gmtime_r(&mtime, &tm);
strftime(timebuf, sizeof(timebuf), "%Y-%m-%d %H:%M", &tm);
nsh_output(vtbl, " %s", timebuf);
}
}
/* Then provide the filename that is common to normal and verbose output */