Add support for the -L option to ls.
This commit is contained in:
parent
810d38f850
commit
a2f2a8f8c0
@ -169,6 +169,9 @@
|
|||||||
// enable ls -R
|
// enable ls -R
|
||||||
#define BB_FEATURE_LS_RECURSIVE
|
#define BB_FEATURE_LS_RECURSIVE
|
||||||
//
|
//
|
||||||
|
// enable ls -L
|
||||||
|
#define BB_FEATURE_LS_FOLLOWLINKS
|
||||||
|
//
|
||||||
// Change ping implementation -- simplified, featureless, but really small.
|
// Change ping implementation -- simplified, featureless, but really small.
|
||||||
//#define BB_FEATURE_SIMPLE_PING
|
//#define BB_FEATURE_SIMPLE_PING
|
||||||
//
|
//
|
||||||
|
@ -159,6 +159,9 @@ static unsigned int sort_order= SORT_FORWARD;
|
|||||||
#ifdef BB_FEATURE_LS_TIMESTAMPS
|
#ifdef BB_FEATURE_LS_TIMESTAMPS
|
||||||
static unsigned int time_fmt= TIME_MOD;
|
static unsigned int time_fmt= TIME_MOD;
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef BB_FEATURE_LS_FOLLOWLINKS
|
||||||
|
static unsigned int follow_links=FALSE;
|
||||||
|
#endif
|
||||||
|
|
||||||
static unsigned short column = 0;
|
static unsigned short column = 0;
|
||||||
#ifdef BB_FEATURE_AUTOWIDTH
|
#ifdef BB_FEATURE_AUTOWIDTH
|
||||||
@ -474,6 +477,16 @@ struct dnode **list_dir(char *path)
|
|||||||
cur= (struct dnode *)xmalloc(sizeof(struct dnode));
|
cur= (struct dnode *)xmalloc(sizeof(struct dnode));
|
||||||
cur->fullname= xstrdup(fullname);
|
cur->fullname= xstrdup(fullname);
|
||||||
cur->name= cur->fullname + (int)(fnend - fullname) ;
|
cur->name= cur->fullname + (int)(fnend - fullname) ;
|
||||||
|
#ifdef BB_FEATURE_LS_FOLLOWLINKS
|
||||||
|
if (follow_links == TRUE) {
|
||||||
|
if (stat(fullname, &cur->dstat)) {
|
||||||
|
errorMsg("%s: %s\n", fullname, strerror(errno));
|
||||||
|
free(cur->fullname);
|
||||||
|
free(cur);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
} else
|
||||||
|
#endif
|
||||||
if (lstat(fullname, &cur->dstat)) { /* get file stat info into node */
|
if (lstat(fullname, &cur->dstat)) { /* get file stat info into node */
|
||||||
errorMsg("%s: %s\n", fullname, strerror(errno));
|
errorMsg("%s: %s\n", fullname, strerror(errno));
|
||||||
free(cur->fullname);
|
free(cur->fullname);
|
||||||
@ -681,6 +694,9 @@ extern int ls_main(int argc, char **argv)
|
|||||||
#endif
|
#endif
|
||||||
#ifdef BB_FEATURE_LS_TIMESTAMPS
|
#ifdef BB_FEATURE_LS_TIMESTAMPS
|
||||||
"cetu"
|
"cetu"
|
||||||
|
#endif
|
||||||
|
#ifdef BB_FEATURE_LS_FOLLOWLINKS
|
||||||
|
"L"
|
||||||
#endif
|
#endif
|
||||||
)) > 0) {
|
)) > 0) {
|
||||||
switch (opt) {
|
switch (opt) {
|
||||||
@ -714,6 +730,9 @@ extern int ls_main(int argc, char **argv)
|
|||||||
case 't': sort_opts= SORT_MTIME; break;
|
case 't': sort_opts= SORT_MTIME; break;
|
||||||
case 'u': time_fmt = TIME_ACCESS; sort_opts= SORT_ATIME; break;
|
case 'u': time_fmt = TIME_ACCESS; sort_opts= SORT_ATIME; break;
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef BB_FEATURE_LS_FOLLOWLINKS
|
||||||
|
case 'L': follow_links= TRUE; break;
|
||||||
|
#endif
|
||||||
#ifdef BB_FEATURE_AUTOWIDTH
|
#ifdef BB_FEATURE_AUTOWIDTH
|
||||||
case 'T': tabstops= atoi(optarg); break;
|
case 'T': tabstops= atoi(optarg); break;
|
||||||
case 'w': terminal_width= atoi(optarg); break;
|
case 'w': terminal_width= atoi(optarg); break;
|
||||||
|
19
ls.c
19
ls.c
@ -159,6 +159,9 @@ static unsigned int sort_order= SORT_FORWARD;
|
|||||||
#ifdef BB_FEATURE_LS_TIMESTAMPS
|
#ifdef BB_FEATURE_LS_TIMESTAMPS
|
||||||
static unsigned int time_fmt= TIME_MOD;
|
static unsigned int time_fmt= TIME_MOD;
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef BB_FEATURE_LS_FOLLOWLINKS
|
||||||
|
static unsigned int follow_links=FALSE;
|
||||||
|
#endif
|
||||||
|
|
||||||
static unsigned short column = 0;
|
static unsigned short column = 0;
|
||||||
#ifdef BB_FEATURE_AUTOWIDTH
|
#ifdef BB_FEATURE_AUTOWIDTH
|
||||||
@ -474,6 +477,16 @@ struct dnode **list_dir(char *path)
|
|||||||
cur= (struct dnode *)xmalloc(sizeof(struct dnode));
|
cur= (struct dnode *)xmalloc(sizeof(struct dnode));
|
||||||
cur->fullname= xstrdup(fullname);
|
cur->fullname= xstrdup(fullname);
|
||||||
cur->name= cur->fullname + (int)(fnend - fullname) ;
|
cur->name= cur->fullname + (int)(fnend - fullname) ;
|
||||||
|
#ifdef BB_FEATURE_LS_FOLLOWLINKS
|
||||||
|
if (follow_links == TRUE) {
|
||||||
|
if (stat(fullname, &cur->dstat)) {
|
||||||
|
errorMsg("%s: %s\n", fullname, strerror(errno));
|
||||||
|
free(cur->fullname);
|
||||||
|
free(cur);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
} else
|
||||||
|
#endif
|
||||||
if (lstat(fullname, &cur->dstat)) { /* get file stat info into node */
|
if (lstat(fullname, &cur->dstat)) { /* get file stat info into node */
|
||||||
errorMsg("%s: %s\n", fullname, strerror(errno));
|
errorMsg("%s: %s\n", fullname, strerror(errno));
|
||||||
free(cur->fullname);
|
free(cur->fullname);
|
||||||
@ -681,6 +694,9 @@ extern int ls_main(int argc, char **argv)
|
|||||||
#endif
|
#endif
|
||||||
#ifdef BB_FEATURE_LS_TIMESTAMPS
|
#ifdef BB_FEATURE_LS_TIMESTAMPS
|
||||||
"cetu"
|
"cetu"
|
||||||
|
#endif
|
||||||
|
#ifdef BB_FEATURE_LS_FOLLOWLINKS
|
||||||
|
"L"
|
||||||
#endif
|
#endif
|
||||||
)) > 0) {
|
)) > 0) {
|
||||||
switch (opt) {
|
switch (opt) {
|
||||||
@ -714,6 +730,9 @@ extern int ls_main(int argc, char **argv)
|
|||||||
case 't': sort_opts= SORT_MTIME; break;
|
case 't': sort_opts= SORT_MTIME; break;
|
||||||
case 'u': time_fmt = TIME_ACCESS; sort_opts= SORT_ATIME; break;
|
case 'u': time_fmt = TIME_ACCESS; sort_opts= SORT_ATIME; break;
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef BB_FEATURE_LS_FOLLOWLINKS
|
||||||
|
case 'L': follow_links= TRUE; break;
|
||||||
|
#endif
|
||||||
#ifdef BB_FEATURE_AUTOWIDTH
|
#ifdef BB_FEATURE_AUTOWIDTH
|
||||||
case 'T': tabstops= atoi(optarg); break;
|
case 'T': tabstops= atoi(optarg); break;
|
||||||
case 'w': terminal_width= atoi(optarg); break;
|
case 'w': terminal_width= atoi(optarg); break;
|
||||||
|
Loading…
Reference in New Issue
Block a user