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>
This commit is contained in:
Denys Vlasenko 2024-10-06 19:24:06 +02:00
parent 222802e833
commit bb5525613e

View file

@ -665,34 +665,29 @@ static int is_a_group_member(gid_t gid)
return 0; return 0;
} }
/*
/* Do the same thing access(2) does, but use the effective uid and gid, * Similar to what access(2) does, but uses the effective uid and gid.
and don't make the mistake of telling root that any file is * Doesn't make the mistake of telling root that any file is executable.
executable. */ * Returns non-zero if the file is accessible.
static int test_eaccess(struct stat *st, int mode) */
static int test_st_mode(struct stat *st, int mode)
{ {
unsigned int euid = geteuid(); unsigned int euid = geteuid();
if (euid == 0) { if (euid == 0) {
/* Root can read or write any file. */ /* Root can read or write any file. */
if (mode != X_OK) if (mode != X_OK)
return 0; return 1;
/* Root can execute any file that has any one of the execute /* Root can execute any file that has any one of the execute
* bits set. */ * bits set. */
if (st->st_mode & (S_IXUSR | S_IXGRP | S_IXOTH)) mode = S_IXUSR | S_IXGRP | S_IXOTH;
return 0; } else if (st->st_uid == euid) /* owner */
}
if (st->st_uid == euid) /* owner */
mode <<= 6; mode <<= 6;
else if (is_a_group_member(st->st_gid)) else if (is_a_group_member(st->st_gid))
mode <<= 3; mode <<= 3;
if (st->st_mode & mode) return st->st_mode & mode;
return 0;
return -1;
} }
@ -722,7 +717,7 @@ static int filstat(char *nm, enum token mode)
i = W_OK; i = W_OK;
if (mode == FILEX) if (mode == FILEX)
i = X_OK; i = X_OK;
return test_eaccess(&s, i) == 0; return test_st_mode(&s, i);
} }
if (is_file_type(mode)) { if (is_file_type(mode)) {
if (mode == FILREG) if (mode == FILREG)