From a42982e8f569417e93bc3b47c501cbe83a5bfade Mon Sep 17 00:00:00 2001 From: Eric Andersen Date: Wed, 7 Jun 2000 17:28:53 +0000 Subject: * Fixed 'swapon -a' and 'swapoff -a', which were broken. * Fixed 'mount -a' so it works as expected. * Implemented 'ls -R' (enabled by enabling BB_FEATURE_LS_RECURSIVE) -Erik --- coreutils/ls.c | 51 ++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 44 insertions(+), 7 deletions(-) (limited to 'coreutils') diff --git a/coreutils/ls.c b/coreutils/ls.c index 6ab11c4e5..0b1aa6221 100644 --- a/coreutils/ls.c +++ b/coreutils/ls.c @@ -86,8 +86,9 @@ #define DISP_DOT 8 /* show . and .. */ #define DISP_NUMERIC 16 /* numeric uid and gid */ #define DISP_FULLTIME 32 /* show extended time display */ -#define DIR_NOLIST 64 /* show directory as itself, not contents */ +#define DIR_NOLIST 64 /* show directory as itself, not contents */ #define DISP_DIRNAME 128 /* show directory name (for internal use) */ +#define DISP_RECURSIVE 256 /* Do a recursive listing */ #ifndef MAJOR #define MAJOR(dev) (((dev)>>8)&0xff) @@ -448,6 +449,9 @@ static const char ls_usage[] = "ls [-1a" "xAC" #ifdef BB_FEATURE_LS_FILETYPES "F" +#endif +#ifdef BB_FEATURE_LS_RECURSIVE + "R" #endif "] [filenames...]\n" #ifndef BB_FEATURE_TRIVIAL_HELP @@ -477,9 +481,24 @@ static const char ls_usage[] = "ls [-1a" #ifdef BB_FEATURE_LS_FILETYPES "\t-F\tappend indicator (one of */=@|) to entries\n" #endif +#ifdef BB_FEATURE_LS_RECURSIVE + "\t-R\tlist subdirectories recursively\n" +#endif #endif ; + +#ifdef BB_FEATURE_LS_RECURSIVE +static int dirAction(const char *fileName, struct stat *statbuf, void* junk) +{ + int i; + fprintf(stdout, "\n%s:\n", fileName); + i = list_item(fileName); + newline(); + return (i); +} +#endif + extern int ls_main(int argc, char **argv) { int argi = 1, i; @@ -543,6 +562,11 @@ extern int ls_main(int argc, char **argv) case 'e': opts |= DISP_FULLTIME; break; +#endif +#ifdef BB_FEATURE_LS_RECURSIVE + case 'R': + opts |= DISP_RECURSIVE; + break; #endif default: goto print_usage_message; @@ -570,12 +594,25 @@ extern int ls_main(int argc, char **argv) #endif /* process files specified, or current directory if none */ - i = 0; - if (argi == argc) - i = list_item("."); - while (argi < argc) - i |= list_item(argv[argi++]); - newline(); +#ifdef BB_FEATURE_LS_RECURSIVE + if (opts & DISP_RECURSIVE) { + i = 0; + if (argi == argc) { + i = recursiveAction(".", TRUE, FALSE, FALSE, NULL, dirAction, NULL); + } + while (argi < argc) { + i |= recursiveAction(argv[argi++], TRUE, FALSE, FALSE, NULL, dirAction, NULL); + } + } else +#endif + { + i = 0; + if (argi == argc) + i = list_item("."); + while (argi < argc) + i |= list_item(argv[argi++]); + newline(); + } exit(i); print_usage_message: -- cgit v1.2.3