mirror of
https://github.com/sheumann/hush.git
synced 2024-11-05 06:07:00 +00:00
* 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
This commit is contained in:
parent
1f6262b8e2
commit
a42982e8f5
@ -60,6 +60,9 @@
|
|||||||
* "mount" now reports errors from nfsmount() and assumes NFS mount
|
* "mount" now reports errors from nfsmount() and assumes NFS mount
|
||||||
if ':' is present in the device name - Pavel Roskin
|
if ':' is present in the device name - Pavel Roskin
|
||||||
* Fixed exit status for killall - Pavel Roskin
|
* Fixed exit status for killall - Pavel Roskin
|
||||||
|
* 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)
|
||||||
* More doc updates
|
* More doc updates
|
||||||
|
|
||||||
|
|
||||||
|
7
TODO
7
TODO
@ -18,19 +18,12 @@ around to it some time. If you have any good ideas, please let me know.
|
|||||||
|
|
||||||
Bugs that need fixing before the 0.44 release goes out the door:
|
Bugs that need fixing before the 0.44 release goes out the door:
|
||||||
|
|
||||||
- mkfs.minix rev 1.7 completely broke the parser. Fix it.
|
|
||||||
- 'grep foo$ file' doesn't work
|
- 'grep foo$ file' doesn't work
|
||||||
- 'grep *foo file' segfaults
|
- 'grep *foo file' segfaults
|
||||||
- ps dirent race bug (need to stat the file before attempting chdir)
|
- ps dirent race bug (need to stat the file before attempting chdir)
|
||||||
- I believe that swaponoff may also be also broken (check it).
|
|
||||||
- It used to be that BusyBox tar would happily overwrite existing files on
|
|
||||||
an extraction. However, as of 0.42, BusyBox tar simply dies as soon as an
|
|
||||||
existing file is found.
|
|
||||||
- Make 'mount -a' work even when /proc isn't mounted (ugly bug).
|
|
||||||
- Make 'ln -s /tmp/file .' work the way GNU ln does (i.e. makes a link to
|
- Make 'ln -s /tmp/file .' work the way GNU ln does (i.e. makes a link to
|
||||||
/tmp/file in the current directory, rather then trying and failing to create
|
/tmp/file in the current directory, rather then trying and failing to create
|
||||||
a symlink named "." in the current working directory).
|
a symlink named "." in the current working directory).
|
||||||
- implement 'ls -R'.
|
|
||||||
- "math" should also take input from stdin
|
- "math" should also take input from stdin
|
||||||
- "more" doesn't accept " " to scroll by one page when BB_FEATURE_USE_TERMIOS
|
- "more" doesn't accept " " to scroll by one page when BB_FEATURE_USE_TERMIOS
|
||||||
is not on.
|
is not on.
|
||||||
|
@ -154,6 +154,9 @@
|
|||||||
// enable ls -p and -F
|
// enable ls -p and -F
|
||||||
#define BB_FEATURE_LS_FILETYPES
|
#define BB_FEATURE_LS_FILETYPES
|
||||||
//
|
//
|
||||||
|
// enable ls -R
|
||||||
|
#define BB_FEATURE_LS_RECURSIVE
|
||||||
|
//
|
||||||
// Change ping implementation -- simplified, featureless, but really small.
|
// Change ping implementation -- simplified, featureless, but really small.
|
||||||
//#define BB_SIMPLE_PING
|
//#define BB_SIMPLE_PING
|
||||||
//
|
//
|
||||||
|
@ -88,6 +88,7 @@
|
|||||||
#define DISP_FULLTIME 32 /* show extended time display */
|
#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_DIRNAME 128 /* show directory name (for internal use) */
|
||||||
|
#define DISP_RECURSIVE 256 /* Do a recursive listing */
|
||||||
|
|
||||||
#ifndef MAJOR
|
#ifndef MAJOR
|
||||||
#define MAJOR(dev) (((dev)>>8)&0xff)
|
#define MAJOR(dev) (((dev)>>8)&0xff)
|
||||||
@ -448,6 +449,9 @@ static const char ls_usage[] = "ls [-1a"
|
|||||||
"xAC"
|
"xAC"
|
||||||
#ifdef BB_FEATURE_LS_FILETYPES
|
#ifdef BB_FEATURE_LS_FILETYPES
|
||||||
"F"
|
"F"
|
||||||
|
#endif
|
||||||
|
#ifdef BB_FEATURE_LS_RECURSIVE
|
||||||
|
"R"
|
||||||
#endif
|
#endif
|
||||||
"] [filenames...]\n"
|
"] [filenames...]\n"
|
||||||
#ifndef BB_FEATURE_TRIVIAL_HELP
|
#ifndef BB_FEATURE_TRIVIAL_HELP
|
||||||
@ -477,9 +481,24 @@ static const char ls_usage[] = "ls [-1a"
|
|||||||
#ifdef BB_FEATURE_LS_FILETYPES
|
#ifdef BB_FEATURE_LS_FILETYPES
|
||||||
"\t-F\tappend indicator (one of */=@|) to entries\n"
|
"\t-F\tappend indicator (one of */=@|) to entries\n"
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef BB_FEATURE_LS_RECURSIVE
|
||||||
|
"\t-R\tlist subdirectories recursively\n"
|
||||||
|
#endif
|
||||||
#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)
|
extern int ls_main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
int argi = 1, i;
|
int argi = 1, i;
|
||||||
@ -543,6 +562,11 @@ extern int ls_main(int argc, char **argv)
|
|||||||
case 'e':
|
case 'e':
|
||||||
opts |= DISP_FULLTIME;
|
opts |= DISP_FULLTIME;
|
||||||
break;
|
break;
|
||||||
|
#endif
|
||||||
|
#ifdef BB_FEATURE_LS_RECURSIVE
|
||||||
|
case 'R':
|
||||||
|
opts |= DISP_RECURSIVE;
|
||||||
|
break;
|
||||||
#endif
|
#endif
|
||||||
default:
|
default:
|
||||||
goto print_usage_message;
|
goto print_usage_message;
|
||||||
@ -570,12 +594,25 @@ extern int ls_main(int argc, char **argv)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* process files specified, or current directory if none */
|
/* process files specified, or current directory if none */
|
||||||
|
#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;
|
i = 0;
|
||||||
if (argi == argc)
|
if (argi == argc)
|
||||||
i = list_item(".");
|
i = list_item(".");
|
||||||
while (argi < argc)
|
while (argi < argc)
|
||||||
i |= list_item(argv[argi++]);
|
i |= list_item(argv[argi++]);
|
||||||
newline();
|
newline();
|
||||||
|
}
|
||||||
exit(i);
|
exit(i);
|
||||||
|
|
||||||
print_usage_message:
|
print_usage_message:
|
||||||
|
@ -956,7 +956,7 @@ Example:
|
|||||||
|
|
||||||
=item ls
|
=item ls
|
||||||
|
|
||||||
Usage: ls [B<-1acdelnpuxACF>] [filenames...]
|
Usage: ls [B<-1acdelnpuxACFR>] [filenames...]
|
||||||
|
|
||||||
Options:
|
Options:
|
||||||
|
|
||||||
@ -974,6 +974,7 @@ Options:
|
|||||||
-A do not list implied . and ..
|
-A do not list implied . and ..
|
||||||
-C list entries by columns
|
-C list entries by columns
|
||||||
-F append indicator (one of */=@|) to entries
|
-F append indicator (one of */=@|) to entries
|
||||||
|
-R list subdirectories recursively
|
||||||
|
|
||||||
-------------------------------
|
-------------------------------
|
||||||
|
|
||||||
@ -1947,4 +1948,4 @@ Enrique Zanardi <ezanardi@ull.es>
|
|||||||
|
|
||||||
=cut
|
=cut
|
||||||
|
|
||||||
# $Id: busybox.pod,v 1.35 2000/06/06 16:15:23 andersen Exp $
|
# $Id: busybox.pod,v 1.36 2000/06/07 17:28:53 andersen Exp $
|
||||||
|
37
ls.c
37
ls.c
@ -88,6 +88,7 @@
|
|||||||
#define DISP_FULLTIME 32 /* show extended time display */
|
#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_DIRNAME 128 /* show directory name (for internal use) */
|
||||||
|
#define DISP_RECURSIVE 256 /* Do a recursive listing */
|
||||||
|
|
||||||
#ifndef MAJOR
|
#ifndef MAJOR
|
||||||
#define MAJOR(dev) (((dev)>>8)&0xff)
|
#define MAJOR(dev) (((dev)>>8)&0xff)
|
||||||
@ -448,6 +449,9 @@ static const char ls_usage[] = "ls [-1a"
|
|||||||
"xAC"
|
"xAC"
|
||||||
#ifdef BB_FEATURE_LS_FILETYPES
|
#ifdef BB_FEATURE_LS_FILETYPES
|
||||||
"F"
|
"F"
|
||||||
|
#endif
|
||||||
|
#ifdef BB_FEATURE_LS_RECURSIVE
|
||||||
|
"R"
|
||||||
#endif
|
#endif
|
||||||
"] [filenames...]\n"
|
"] [filenames...]\n"
|
||||||
#ifndef BB_FEATURE_TRIVIAL_HELP
|
#ifndef BB_FEATURE_TRIVIAL_HELP
|
||||||
@ -477,9 +481,24 @@ static const char ls_usage[] = "ls [-1a"
|
|||||||
#ifdef BB_FEATURE_LS_FILETYPES
|
#ifdef BB_FEATURE_LS_FILETYPES
|
||||||
"\t-F\tappend indicator (one of */=@|) to entries\n"
|
"\t-F\tappend indicator (one of */=@|) to entries\n"
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef BB_FEATURE_LS_RECURSIVE
|
||||||
|
"\t-R\tlist subdirectories recursively\n"
|
||||||
|
#endif
|
||||||
#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)
|
extern int ls_main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
int argi = 1, i;
|
int argi = 1, i;
|
||||||
@ -543,6 +562,11 @@ extern int ls_main(int argc, char **argv)
|
|||||||
case 'e':
|
case 'e':
|
||||||
opts |= DISP_FULLTIME;
|
opts |= DISP_FULLTIME;
|
||||||
break;
|
break;
|
||||||
|
#endif
|
||||||
|
#ifdef BB_FEATURE_LS_RECURSIVE
|
||||||
|
case 'R':
|
||||||
|
opts |= DISP_RECURSIVE;
|
||||||
|
break;
|
||||||
#endif
|
#endif
|
||||||
default:
|
default:
|
||||||
goto print_usage_message;
|
goto print_usage_message;
|
||||||
@ -570,12 +594,25 @@ extern int ls_main(int argc, char **argv)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* process files specified, or current directory if none */
|
/* process files specified, or current directory if none */
|
||||||
|
#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;
|
i = 0;
|
||||||
if (argi == argc)
|
if (argi == argc)
|
||||||
i = list_item(".");
|
i = list_item(".");
|
||||||
while (argi < argc)
|
while (argi < argc)
|
||||||
i |= list_item(argv[argi++]);
|
i |= list_item(argv[argi++]);
|
||||||
newline();
|
newline();
|
||||||
|
}
|
||||||
exit(i);
|
exit(i);
|
||||||
|
|
||||||
print_usage_message:
|
print_usage_message:
|
||||||
|
17
mount.c
17
mount.c
@ -154,8 +154,7 @@ do_mount(char *specialfile, char *dir, char *filesystemtype,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
status =
|
status = mount(specialfile, dir, filesystemtype, flags, string_flags);
|
||||||
mount(specialfile, dir, filesystemtype, flags, string_flags);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -176,6 +175,11 @@ do_mount(char *specialfile, char *dir, char *filesystemtype,
|
|||||||
del_loop(specialfile);
|
del_loop(specialfile);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
if (errno == EPERM) {
|
||||||
|
fatalError("mount: permission denied. Are you root?\n");
|
||||||
|
}
|
||||||
|
|
||||||
return (FALSE);
|
return (FALSE);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -307,7 +311,7 @@ mount_one(char *blockDevice, char *directory, char *filesystemType,
|
|||||||
fakeIt, mtab_opts);
|
fakeIt, mtab_opts);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (status == FALSE && whineOnErrors == TRUE) {
|
if (status == FALSE) {
|
||||||
if (whineOnErrors == TRUE) {
|
if (whineOnErrors == TRUE) {
|
||||||
fprintf(stderr, "Mounting %s on %s failed: %s\n",
|
fprintf(stderr, "Mounting %s on %s failed: %s\n",
|
||||||
blockDevice, directory, strerror(errno));
|
blockDevice, directory, strerror(errno));
|
||||||
@ -463,14 +467,9 @@ extern int mount_main(int argc, char **argv)
|
|||||||
flags = 0;
|
flags = 0;
|
||||||
*string_flags = '\0';
|
*string_flags = '\0';
|
||||||
parse_mount_options(m->mnt_opts, &flags, string_flags);
|
parse_mount_options(m->mnt_opts, &flags, string_flags);
|
||||||
/* If the directory is /, try to remount
|
|
||||||
* with the options specified in fstab */
|
|
||||||
if (m->mnt_dir[0] == '/' && m->mnt_dir[1] == '\0') {
|
|
||||||
flags |= MS_REMOUNT;
|
|
||||||
}
|
|
||||||
if (mount_one(m->mnt_fsname, m->mnt_dir, m->mnt_type,
|
if (mount_one(m->mnt_fsname, m->mnt_dir, m->mnt_type,
|
||||||
flags, string_flags, useMtab, fakeIt,
|
flags, string_flags, useMtab, fakeIt,
|
||||||
extra_opts, FALSE))
|
extra_opts, FALSE)==FALSE)
|
||||||
{
|
{
|
||||||
/* Try again, but this time try a remount */
|
/* Try again, but this time try a remount */
|
||||||
mount_one(m->mnt_fsname, m->mnt_dir, m->mnt_type,
|
mount_one(m->mnt_fsname, m->mnt_dir, m->mnt_type,
|
||||||
|
@ -83,7 +83,7 @@ static void do_em_all()
|
|||||||
exit(FALSE);
|
exit(FALSE);
|
||||||
}
|
}
|
||||||
while ((m = getmntent(f)) != NULL) {
|
while ((m = getmntent(f)) != NULL) {
|
||||||
if (!strstr(m->mnt_type, MNTTYPE_SWAP)) {
|
if (strcmp(m->mnt_type, MNTTYPE_SWAP)==0) {
|
||||||
swap_enable_disable(m->mnt_fsname);
|
swap_enable_disable(m->mnt_fsname);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -154,8 +154,7 @@ do_mount(char *specialfile, char *dir, char *filesystemtype,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
status =
|
status = mount(specialfile, dir, filesystemtype, flags, string_flags);
|
||||||
mount(specialfile, dir, filesystemtype, flags, string_flags);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -176,6 +175,11 @@ do_mount(char *specialfile, char *dir, char *filesystemtype,
|
|||||||
del_loop(specialfile);
|
del_loop(specialfile);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
if (errno == EPERM) {
|
||||||
|
fatalError("mount: permission denied. Are you root?\n");
|
||||||
|
}
|
||||||
|
|
||||||
return (FALSE);
|
return (FALSE);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -307,7 +311,7 @@ mount_one(char *blockDevice, char *directory, char *filesystemType,
|
|||||||
fakeIt, mtab_opts);
|
fakeIt, mtab_opts);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (status == FALSE && whineOnErrors == TRUE) {
|
if (status == FALSE) {
|
||||||
if (whineOnErrors == TRUE) {
|
if (whineOnErrors == TRUE) {
|
||||||
fprintf(stderr, "Mounting %s on %s failed: %s\n",
|
fprintf(stderr, "Mounting %s on %s failed: %s\n",
|
||||||
blockDevice, directory, strerror(errno));
|
blockDevice, directory, strerror(errno));
|
||||||
@ -463,14 +467,9 @@ extern int mount_main(int argc, char **argv)
|
|||||||
flags = 0;
|
flags = 0;
|
||||||
*string_flags = '\0';
|
*string_flags = '\0';
|
||||||
parse_mount_options(m->mnt_opts, &flags, string_flags);
|
parse_mount_options(m->mnt_opts, &flags, string_flags);
|
||||||
/* If the directory is /, try to remount
|
|
||||||
* with the options specified in fstab */
|
|
||||||
if (m->mnt_dir[0] == '/' && m->mnt_dir[1] == '\0') {
|
|
||||||
flags |= MS_REMOUNT;
|
|
||||||
}
|
|
||||||
if (mount_one(m->mnt_fsname, m->mnt_dir, m->mnt_type,
|
if (mount_one(m->mnt_fsname, m->mnt_dir, m->mnt_type,
|
||||||
flags, string_flags, useMtab, fakeIt,
|
flags, string_flags, useMtab, fakeIt,
|
||||||
extra_opts, FALSE))
|
extra_opts, FALSE)==FALSE)
|
||||||
{
|
{
|
||||||
/* Try again, but this time try a remount */
|
/* Try again, but this time try a remount */
|
||||||
mount_one(m->mnt_fsname, m->mnt_dir, m->mnt_type,
|
mount_one(m->mnt_fsname, m->mnt_dir, m->mnt_type,
|
||||||
|
@ -83,7 +83,7 @@ static void do_em_all()
|
|||||||
exit(FALSE);
|
exit(FALSE);
|
||||||
}
|
}
|
||||||
while ((m = getmntent(f)) != NULL) {
|
while ((m = getmntent(f)) != NULL) {
|
||||||
if (!strstr(m->mnt_type, MNTTYPE_SWAP)) {
|
if (strcmp(m->mnt_type, MNTTYPE_SWAP)==0) {
|
||||||
swap_enable_disable(m->mnt_fsname);
|
swap_enable_disable(m->mnt_fsname);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user