Fix handling of permission addition and removal (e.g., o-r).

This commit is contained in:
Matt Kraai
2001-04-26 18:55:29 +00:00
parent ca85cdbe4c
commit 6aabfd5e30
2 changed files with 18 additions and 18 deletions

18
chmod.c
View File

@@ -29,13 +29,11 @@
#include <getopt.h> #include <getopt.h>
#include "busybox.h" #include "busybox.h"
struct stat theMode;
static int fileAction(const char *fileName, struct stat *statbuf, void* junk) static int fileAction(const char *fileName, struct stat *statbuf, void* junk)
{ {
if (chmod(fileName, theMode.st_mode) == 0) if (!parse_mode((char *)junk, &(statbuf->st_mode)))
error_msg_and_die("internal error");
if (chmod(fileName, statbuf->st_mode) == 0)
return (TRUE); return (TRUE);
perror(fileName); perror(fileName);
return (FALSE); return (FALSE);
@@ -43,6 +41,7 @@ static int fileAction(const char *fileName, struct stat *statbuf, void* junk)
int chmod_main(int argc, char **argv) int chmod_main(int argc, char **argv)
{ {
int i;
int opt; int opt;
int recursiveFlag = FALSE; int recursiveFlag = FALSE;
@@ -59,7 +58,8 @@ int chmod_main(int argc, char **argv)
if (argc > optind && argc > 2 && argv[optind]) { if (argc > optind && argc > 2 && argv[optind]) {
/* Parse the specified mode */ /* Parse the specified mode */
if (parse_mode(argv[optind], &(theMode.st_mode)) == FALSE) { mode_t mode;
if (parse_mode(argv[optind], &mode) == FALSE) {
error_msg_and_die( "unknown mode: %s", argv[optind]); error_msg_and_die( "unknown mode: %s", argv[optind]);
} }
} else { } else {
@@ -67,9 +67,9 @@ int chmod_main(int argc, char **argv)
} }
/* Ok, ready to do the deed now */ /* Ok, ready to do the deed now */
while (++optind < argc) { for (i = optind + 1; i < argc; i++) {
if (recursive_action (argv[optind], recursiveFlag, FALSE, FALSE, if (recursive_action (argv[i], recursiveFlag, FALSE, FALSE, fileAction,
fileAction, fileAction, NULL) == FALSE) { fileAction, argv[optind]) == FALSE) {
return EXIT_FAILURE; return EXIT_FAILURE;
} }
} }

View File

@@ -29,13 +29,11 @@
#include <getopt.h> #include <getopt.h>
#include "busybox.h" #include "busybox.h"
struct stat theMode;
static int fileAction(const char *fileName, struct stat *statbuf, void* junk) static int fileAction(const char *fileName, struct stat *statbuf, void* junk)
{ {
if (chmod(fileName, theMode.st_mode) == 0) if (!parse_mode((char *)junk, &(statbuf->st_mode)))
error_msg_and_die("internal error");
if (chmod(fileName, statbuf->st_mode) == 0)
return (TRUE); return (TRUE);
perror(fileName); perror(fileName);
return (FALSE); return (FALSE);
@@ -43,6 +41,7 @@ static int fileAction(const char *fileName, struct stat *statbuf, void* junk)
int chmod_main(int argc, char **argv) int chmod_main(int argc, char **argv)
{ {
int i;
int opt; int opt;
int recursiveFlag = FALSE; int recursiveFlag = FALSE;
@@ -59,7 +58,8 @@ int chmod_main(int argc, char **argv)
if (argc > optind && argc > 2 && argv[optind]) { if (argc > optind && argc > 2 && argv[optind]) {
/* Parse the specified mode */ /* Parse the specified mode */
if (parse_mode(argv[optind], &(theMode.st_mode)) == FALSE) { mode_t mode;
if (parse_mode(argv[optind], &mode) == FALSE) {
error_msg_and_die( "unknown mode: %s", argv[optind]); error_msg_and_die( "unknown mode: %s", argv[optind]);
} }
} else { } else {
@@ -67,9 +67,9 @@ int chmod_main(int argc, char **argv)
} }
/* Ok, ready to do the deed now */ /* Ok, ready to do the deed now */
while (++optind < argc) { for (i = optind + 1; i < argc; i++) {
if (recursive_action (argv[optind], recursiveFlag, FALSE, FALSE, if (recursive_action (argv[i], recursiveFlag, FALSE, FALSE, fileAction,
fileAction, fileAction, NULL) == FALSE) { fileAction, argv[optind]) == FALSE) {
return EXIT_FAILURE; return EXIT_FAILURE;
} }
} }