-/**
- * @brief Get the mode bits from the given file descriptor.
- *
- * @param fd
- * The file descriptor (which may reference a directory) whose
- * mode we want.
- *
- * @return A mode_t (st_mode) structure containing the mode bits.
- * See sys/stat.h for details.
- */
-mode_t get_mode(int fd) {
- if (fd <= 0) {
- errno = ENOENT;
- return ACL_ERROR;
- }
-
- struct stat s;
- int result = fstat(fd, &s);
-
- if (result == 0) {
- return s.st_mode;
- }
- else {
- /* errno will be set already by lstat() */
- return result;
- }
-}
-
-
/**
* @brief Determine if the given file descriptor might refer to an
int result = ACL_FAILURE;
if (acl_is_minimal(acl)) {
- mode_t mode = get_mode(fd);
- if (mode & (S_IXUSR | S_IXOTH | S_IXGRP)) {
+ struct stat s;
+ if (fstat(fd, &s) == -1) {
+ perror("any_can_execute_or_dir (fstat)");
+ result = ACL_ERROR;
+ goto cleanup;
+ }
+ if (s.st_mode & (S_IXUSR | S_IXOTH | S_IXGRP)) {
result = ACL_SUCCESS;
goto cleanup;
}