diff options
| author | Denys Vlasenko <vda.linux@googlemail.com> | 2024-10-06 19:24:06 +0200 |
|---|---|---|
| committer | Denys Vlasenko <vda.linux@googlemail.com> | 2024-10-06 19:25:07 +0200 |
| commit | bb5525613ec109aa30d2cb1db84e18aa0b084576 (patch) | |
| tree | 7a2689181130996ba91fef597289cbfde89d6e19 | |
| parent | 222802e83362eabd4c631897ff7db5e85955d7c5 (diff) | |
test: Invert return value of test_eaccess and rename it to test_st_mode
From dash:
From: herbert <herbert@gondor.apana.org.au>
Date: Wed, 2 Mar 2005 22:14:54 +1100
Invert return value of test_eaccess and rename it to test_st_mode.
function old new delta
nexpr 800 766 -34
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
| -rw-r--r-- | coreutils/test.c | 27 |
1 files changed, 11 insertions, 16 deletions
diff --git a/coreutils/test.c b/coreutils/test.c index 7df7d0fc8..c02c92745 100644 --- a/coreutils/test.c +++ b/coreutils/test.c @@ -665,34 +665,29 @@ static int is_a_group_member(gid_t gid) return 0; } - -/* Do the same thing access(2) does, but use the effective uid and gid, - and don't make the mistake of telling root that any file is - executable. */ -static int test_eaccess(struct stat *st, int mode) +/* + * Similar to what access(2) does, but uses the effective uid and gid. + * Doesn't make the mistake of telling root that any file is executable. + * Returns non-zero if the file is accessible. + */ +static int test_st_mode(struct stat *st, int mode) { unsigned int euid = geteuid(); if (euid == 0) { /* Root can read or write any file. */ if (mode != X_OK) - return 0; + return 1; /* Root can execute any file that has any one of the execute * bits set. */ - if (st->st_mode & (S_IXUSR | S_IXGRP | S_IXOTH)) - return 0; - } - - if (st->st_uid == euid) /* owner */ + mode = S_IXUSR | S_IXGRP | S_IXOTH; + } else if (st->st_uid == euid) /* owner */ mode <<= 6; else if (is_a_group_member(st->st_gid)) mode <<= 3; - if (st->st_mode & mode) - return 0; - - return -1; + return st->st_mode & mode; } @@ -722,7 +717,7 @@ static int filstat(char *nm, enum token mode) i = W_OK; if (mode == FILEX) i = X_OK; - return test_eaccess(&s, i) == 0; + return test_st_mode(&s, i); } if (is_file_type(mode)) { if (mode == FILREG) |
