From bb5525613ec109aa30d2cb1db84e18aa0b084576 Mon Sep 17 00:00:00 2001 From: Denys Vlasenko Date: Sun, 6 Oct 2024 19:24:06 +0200 Subject: test: Invert return value of test_eaccess and rename it to test_st_mode From dash: From: herbert 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 --- coreutils/test.c | 27 +++++++++++---------------- 1 file changed, 11 insertions(+), 16 deletions(-) (limited to 'coreutils/test.c') 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) -- cgit v1.2.3-55-g6feb