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