blob: 6d098cf9855c995a5f5602a87ca0e89ab4d03034 [file] [log] [blame]
// Copyright 2021 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef SRC_LIB_NIX_INCLUDE_SYS_STATX_H_
#define SRC_LIB_NIX_INCLUDE_SYS_STATX_H_
#include <lib/fdio/vfs.h>
#include <stdint.h>
#include <sys/types.h>
#include <bits/alltypes.h>
#ifdef __cplusplus
extern "C" {
#endif
// The `mask` argument is used to indicate which fields the caller is interested in.
// These values are also returned by `stx_mask` in struct statx indicating
// the values that were actually returned or ignored.
// The `mask` argument to statx() and `stx_mask` in struct statx is an ORed combination
// of the following:
#define STATX_TYPE 0x00000001U // Want stx_mode & S_IFMT
#define STATX_MODE 0x00000002U // Want/got stx_mode & ~S_IFMT
#define STATX_NLINK 0x00000004U // Want/got stx_nlink
#define STATX_UID 0x00000008U // Want/got stx_uid
#define STATX_GID 0x00000010U // Want/got stx_gid.
#define STATX_ATIME 0x00000020U // Want/got stx_atime.
#define STATX_MTIME 0x00000040U // Want/got stx_mtime.
#define STATX_CTIME 0x00000080U // Want/got stx_ctime.
#define STATX_INO 0x00000100U // Want/got stx_ino.
#define STATX_SIZE 0x00000200U // Want/got stx_size.
#define STATX_BLOCKS 0x00000400U // Want/got stx_blocks.
#define STATX_BASIC_STATS 0x000007ffU // Same as the stat struct.
#define STATX_BTIME 0x00000800U // Want/got stx_btime.
#define STATX_MNT_ID 0x00001000U // Got stx_mnt_id.
#define STATX__RESERVED 0x80000000U // Reserved for future struct statx expansion.
struct statx_timestamp {
int64_t tv_sec; // Seconds since the Epoch (UNIX time).
uint32_t tv_nsec; // Nanoseconds since tv_sec.
};
struct statx {
uint32_t stx_mask; // Mask of bits indicating filled fields.
uint32_t stx_blksize; // Block size for filesystem I/O.
uint64_t stx_attributes; // Extra file attribute indicators.
uint32_t stx_nlink; // Number of hard links.
uint32_t stx_uid; // User ID of owner.
uint32_t stx_gid; // Group ID of owner.
uint16_t stx_mode; // File type and mode.
uint64_t stx_ino; // Inode number.
uint64_t stx_size; // Total size in bytes.
uint64_t stx_blocks; // Number of 512B blocks allocated.
uint64_t stx_attributes_mask; // Mask to show what's supported in stx_attributes.
// The following fields are file timestamps.
struct statx_timestamp stx_atime; // Last access.
struct statx_timestamp stx_btime; // Creation.
struct statx_timestamp stx_ctime; // Last status change.
struct statx_timestamp stx_mtime; // Last modification.
// If this file represents a device, then the next two
// fields contain the ID of the device.
uint32_t stx_rdev_major; // Major ID.
uint32_t stx_rdev_minor; // Minor ID.
// The next two fields contain the ID of the device
// containing the filesystem where the file resides.
uint32_t stx_dev_major; // Major ID.
uint32_t stx_dev_minor; // Minor ID.
};
int statx(int dirfd, const char *pathname, int flags, unsigned int mask, struct statx *statxbuf);
#ifdef __cplusplus
}
#endif
#endif // SRC_LIB_NIX_INCLUDE_SYS_STATX_H_