chown: support long options

function                                             old     new   delta
chown_longopts                                         -      81     +81
chown_main                                           182     192     +10

Signed-off-by: Matheus Izvekov <mizvekov@gmail.com>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
Matheus Izvekov 2010-01-21 19:30:25 -02:00 committed by Denys Vlasenko
parent 8b8d32ea56
commit 31416d589e
2 changed files with 24 additions and 1 deletions

View File

@ -52,6 +52,13 @@ config CHOWN
chown is used to change the user and/or group ownership chown is used to change the user and/or group ownership
of files. of files.
config FEATURE_CHOWN_LONG_OPTIONS
bool "Enable long options"
default n
depends on CHOWN && LONG_OPTS
help
Enable use of long options
config CHROOT config CHROOT
bool "chroot" bool "chroot"
default n default n

View File

@ -8,7 +8,6 @@
*/ */
/* BB_AUDIT SUSv3 defects - none? */ /* BB_AUDIT SUSv3 defects - none? */
/* BB_AUDIT GNU defects - unsupported long options. */
/* http://www.opengroup.org/onlinepubs/007904975/utilities/chown.html */ /* http://www.opengroup.org/onlinepubs/007904975/utilities/chown.html */
#include "libbb.h" #include "libbb.h"
@ -37,6 +36,20 @@
#define BIT_TRAVERSE_TOP (0x20|0x40) #define BIT_TRAVERSE_TOP (0x20|0x40)
#define OPT_TRAVERSE_TOP (IF_DESKTOP(opt & BIT_TRAVERSE_TOP) IF_NOT_DESKTOP(0)) #define OPT_TRAVERSE_TOP (IF_DESKTOP(opt & BIT_TRAVERSE_TOP) IF_NOT_DESKTOP(0))
#if ENABLE_FEATURE_CHOWN_LONG_OPTIONS
static const char chown_longopts[] ALIGN1 =
"recursive\0" No_argument "R"
"dereference\0" No_argument "\xff"
"no-dereference\0" No_argument "h"
# if ENABLE_DESKTOP
"changes\0" No_argument "c"
"silent\0" No_argument "f"
"quiet\0" No_argument "f"
"verbose\0" No_argument "v"
# endif
;
#endif
typedef int (*chown_fptr)(const char *, uid_t, gid_t); typedef int (*chown_fptr)(const char *, uid_t, gid_t);
struct param_t { struct param_t {
@ -78,6 +91,9 @@ int chown_main(int argc UNUSED_PARAM, char **argv)
param.ugid.gid = -1; param.ugid.gid = -1;
param.chown_func = chown; param.chown_func = chown;
#if ENABLE_FEATURE_CHOWN_LONG_OPTIONS
applet_long_options = chown_longopts;
#endif
opt_complementary = "-2"; opt_complementary = "-2";
opt = getopt32(argv, OPT_STR); opt = getopt32(argv, OPT_STR);
argv += optind; argv += optind;