diff options
Diffstat (limited to 'coreutils/chgrp.c')
-rw-r--r-- | coreutils/chgrp.c | 48 |
1 files changed, 10 insertions, 38 deletions
diff --git a/coreutils/chgrp.c b/coreutils/chgrp.c index e62bd16f0..da5b12964 100644 --- a/coreutils/chgrp.c +++ b/coreutils/chgrp.c | |||
@@ -7,49 +7,21 @@ | |||
7 | * Licensed under GPLv2 or later, see file LICENSE in this tarball for details. | 7 | * Licensed under GPLv2 or later, see file LICENSE in this tarball for details. |
8 | */ | 8 | */ |
9 | 9 | ||
10 | /* BB_AUDIT SUSv3 defects - unsupported options -h, -H, -L, and -P. */ | 10 | /* BB_AUDIT SUSv3 defects - unsupported options -H, -L, and -P. */ |
11 | /* BB_AUDIT GNU defects - unsupported options -h, -c, -f, -v, and long options. */ | 11 | /* BB_AUDIT GNU defects - unsupported long options. */ |
12 | /* BB_AUDIT Note: gnu chgrp does not support -H, -L, or -P. */ | ||
13 | /* http://www.opengroup.org/onlinepubs/007904975/utilities/chgrp.html */ | 12 | /* http://www.opengroup.org/onlinepubs/007904975/utilities/chgrp.html */ |
14 | 13 | ||
15 | #include <stdlib.h> | ||
16 | #include <unistd.h> | ||
17 | #include "busybox.h" | 14 | #include "busybox.h" |
18 | 15 | ||
19 | static int fileAction(const char *fileName, struct stat *statbuf, void* junk) | ||
20 | { | ||
21 | if (lchown(fileName, statbuf->st_uid, *((long *) junk)) == 0) { | ||
22 | return (TRUE); | ||
23 | } | ||
24 | bb_perror_msg("%s", fileName); /* Avoid multibyte problems. */ | ||
25 | return (FALSE); | ||
26 | } | ||
27 | |||
28 | int chgrp_main(int argc, char **argv) | 16 | int chgrp_main(int argc, char **argv) |
29 | { | 17 | { |
30 | long gid; | 18 | /* "chgrp [opts] abc file(s)" == "chown [opts] :abc file(s)" */ |
31 | int recursiveFlag; | 19 | char **p = argv; |
32 | int retval = EXIT_SUCCESS; | 20 | while (*++p) { |
33 | 21 | if (p[0][0] != '-') { | |
34 | recursiveFlag = getopt32(argc, argv, "R"); | 22 | p[0] = xasprintf(":%s", p[0]); |
35 | 23 | break; | |
36 | if (argc - optind < 2) { | ||
37 | bb_show_usage(); | ||
38 | } | ||
39 | |||
40 | argv += optind; | ||
41 | |||
42 | /* Find the selected group */ | ||
43 | gid = get_ug_id(*argv, bb_xgetgrnam); | ||
44 | ++argv; | ||
45 | |||
46 | /* Ok, ready to do the deed now */ | ||
47 | do { | ||
48 | if (! recursive_action (*argv, recursiveFlag, FALSE, FALSE, | ||
49 | fileAction, fileAction, &gid)) { | ||
50 | retval = EXIT_FAILURE; | ||
51 | } | 24 | } |
52 | } while (*++argv); | 25 | } |
53 | 26 | return chown_main(argc, argv); | |
54 | return retval; | ||
55 | } | 27 | } |