Blame sysdeps/unix/sysv/linux/x86/bits/stat.h

Packit Service 82fcde
/* Copyright (C) 1999-2018 Free Software Foundation, Inc.
Packit Service 82fcde
   This file is part of the GNU C Library.
Packit Service 82fcde
Packit Service 82fcde
   The GNU C Library is free software; you can redistribute it and/or
Packit Service 82fcde
   modify it under the terms of the GNU Lesser General Public
Packit Service 82fcde
   License as published by the Free Software Foundation; either
Packit Service 82fcde
   version 2.1 of the License, or (at your option) any later version.
Packit Service 82fcde
Packit Service 82fcde
   The GNU C Library is distributed in the hope that it will be useful,
Packit Service 82fcde
   but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit Service 82fcde
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Packit Service 82fcde
   Lesser General Public License for more details.
Packit Service 82fcde
Packit Service 82fcde
   You should have received a copy of the GNU Lesser General Public
Packit Service 82fcde
   License along with the GNU C Library; if not, see
Packit Service 82fcde
   <http://www.gnu.org/licenses/>.  */
Packit Service 82fcde
Packit Service 82fcde
#if !defined _SYS_STAT_H && !defined _FCNTL_H
Packit Service 82fcde
# error "Never include <bits/stat.h> directly; use <sys/stat.h> instead."
Packit Service 82fcde
#endif
Packit Service 82fcde
Packit Service 82fcde
#ifndef _BITS_STAT_H
Packit Service 82fcde
#define _BITS_STAT_H	1
Packit Service 82fcde
Packit Service 82fcde
/* Versions of the `struct stat' data structure.  */
Packit Service 82fcde
#ifndef __x86_64__
Packit Service 82fcde
# define _STAT_VER_LINUX_OLD	1
Packit Service 82fcde
# define _STAT_VER_KERNEL	1
Packit Service 82fcde
# define _STAT_VER_SVR4		2
Packit Service 82fcde
# define _STAT_VER_LINUX	3
Packit Service 82fcde
Packit Service 82fcde
/* i386 versions of the `xmknod' interface.  */
Packit Service 82fcde
# define _MKNOD_VER_LINUX	1
Packit Service 82fcde
# define _MKNOD_VER_SVR4	2
Packit Service 82fcde
# define _MKNOD_VER		_MKNOD_VER_LINUX /* The bits defined below.  */
Packit Service 82fcde
#else
Packit Service 82fcde
# define _STAT_VER_KERNEL	0
Packit Service 82fcde
# define _STAT_VER_LINUX	1
Packit Service 82fcde
Packit Service 82fcde
/* x86-64 versions of the `xmknod' interface.  */
Packit Service 82fcde
# define _MKNOD_VER_LINUX	0
Packit Service 82fcde
#endif
Packit Service 82fcde
Packit Service 82fcde
#define _STAT_VER		_STAT_VER_LINUX
Packit Service 82fcde
Packit Service 82fcde
struct stat
Packit Service 82fcde
  {
Packit Service 82fcde
    __dev_t st_dev;		/* Device.  */
Packit Service 82fcde
#ifndef __x86_64__
Packit Service 82fcde
    unsigned short int __pad1;
Packit Service 82fcde
#endif
Packit Service 82fcde
#if defined __x86_64__ || !defined __USE_FILE_OFFSET64
Packit Service 82fcde
    __ino_t st_ino;		/* File serial number.	*/
Packit Service 82fcde
#else
Packit Service 82fcde
    __ino_t __st_ino;			/* 32bit file serial number.	*/
Packit Service 82fcde
#endif
Packit Service 82fcde
#ifndef __x86_64__
Packit Service 82fcde
    __mode_t st_mode;			/* File mode.  */
Packit Service 82fcde
    __nlink_t st_nlink;			/* Link count.  */
Packit Service 82fcde
#else
Packit Service 82fcde
    __nlink_t st_nlink;		/* Link count.  */
Packit Service 82fcde
    __mode_t st_mode;		/* File mode.  */
Packit Service 82fcde
#endif
Packit Service 82fcde
    __uid_t st_uid;		/* User ID of the file's owner.	*/
Packit Service 82fcde
    __gid_t st_gid;		/* Group ID of the file's group.*/
Packit Service 82fcde
#ifdef __x86_64__
Packit Service 82fcde
    int __pad0;
Packit Service 82fcde
#endif
Packit Service 82fcde
    __dev_t st_rdev;		/* Device number, if device.  */
Packit Service 82fcde
#ifndef __x86_64__
Packit Service 82fcde
    unsigned short int __pad2;
Packit Service 82fcde
#endif
Packit Service 82fcde
#if defined __x86_64__ || !defined __USE_FILE_OFFSET64
Packit Service 82fcde
    __off_t st_size;			/* Size of file, in bytes.  */
Packit Service 82fcde
#else
Packit Service 82fcde
    __off64_t st_size;			/* Size of file, in bytes.  */
Packit Service 82fcde
#endif
Packit Service 82fcde
    __blksize_t st_blksize;	/* Optimal block size for I/O.  */
Packit Service 82fcde
#if defined __x86_64__  || !defined __USE_FILE_OFFSET64
Packit Service 82fcde
    __blkcnt_t st_blocks;		/* Number 512-byte blocks allocated. */
Packit Service 82fcde
#else
Packit Service 82fcde
    __blkcnt64_t st_blocks;		/* Number 512-byte blocks allocated. */
Packit Service 82fcde
#endif
Packit Service 82fcde
#ifdef __USE_XOPEN2K8
Packit Service 82fcde
    /* Nanosecond resolution timestamps are stored in a format
Packit Service 82fcde
       equivalent to 'struct timespec'.  This is the type used
Packit Service 82fcde
       whenever possible but the Unix namespace rules do not allow the
Packit Service 82fcde
       identifier 'timespec' to appear in the <sys/stat.h> header.
Packit Service 82fcde
       Therefore we have to handle the use of this header in strictly
Packit Service 82fcde
       standard-compliant sources special.  */
Packit Service 82fcde
    struct timespec st_atim;		/* Time of last access.  */
Packit Service 82fcde
    struct timespec st_mtim;		/* Time of last modification.  */
Packit Service 82fcde
    struct timespec st_ctim;		/* Time of last status change.  */
Packit Service 82fcde
# define st_atime st_atim.tv_sec	/* Backward compatibility.  */
Packit Service 82fcde
# define st_mtime st_mtim.tv_sec
Packit Service 82fcde
# define st_ctime st_ctim.tv_sec
Packit Service 82fcde
#else
Packit Service 82fcde
    __time_t st_atime;			/* Time of last access.  */
Packit Service 82fcde
    __syscall_ulong_t st_atimensec;	/* Nscecs of last access.  */
Packit Service 82fcde
    __time_t st_mtime;			/* Time of last modification.  */
Packit Service 82fcde
    __syscall_ulong_t st_mtimensec;	/* Nsecs of last modification.  */
Packit Service 82fcde
    __time_t st_ctime;			/* Time of last status change.  */
Packit Service 82fcde
    __syscall_ulong_t st_ctimensec;	/* Nsecs of last status change.  */
Packit Service 82fcde
#endif
Packit Service 82fcde
#ifdef __x86_64__
Packit Service 82fcde
    __syscall_slong_t __glibc_reserved[3];
Packit Service 82fcde
#else
Packit Service 82fcde
# ifndef __USE_FILE_OFFSET64
Packit Service 82fcde
    unsigned long int __glibc_reserved4;
Packit Service 82fcde
    unsigned long int __glibc_reserved5;
Packit Service 82fcde
# else
Packit Service 82fcde
    __ino64_t st_ino;			/* File serial number.	*/
Packit Service 82fcde
# endif
Packit Service 82fcde
#endif
Packit Service 82fcde
  };
Packit Service 82fcde
Packit Service 82fcde
#ifdef __USE_LARGEFILE64
Packit Service 82fcde
/* Note stat64 has the same shape as stat for x86-64.  */
Packit Service 82fcde
struct stat64
Packit Service 82fcde
  {
Packit Service 82fcde
    __dev_t st_dev;		/* Device.  */
Packit Service 82fcde
# ifdef __x86_64__
Packit Service 82fcde
    __ino64_t st_ino;		/* File serial number.  */
Packit Service 82fcde
    __nlink_t st_nlink;		/* Link count.  */
Packit Service 82fcde
    __mode_t st_mode;		/* File mode.  */
Packit Service 82fcde
# else
Packit Service 82fcde
    unsigned int __pad1;
Packit Service 82fcde
    __ino_t __st_ino;			/* 32bit file serial number.	*/
Packit Service 82fcde
    __mode_t st_mode;			/* File mode.  */
Packit Service 82fcde
    __nlink_t st_nlink;			/* Link count.  */
Packit Service 82fcde
# endif
Packit Service 82fcde
    __uid_t st_uid;		/* User ID of the file's owner.	*/
Packit Service 82fcde
    __gid_t st_gid;		/* Group ID of the file's group.*/
Packit Service 82fcde
# ifdef __x86_64__
Packit Service 82fcde
    int __pad0;
Packit Service 82fcde
    __dev_t st_rdev;		/* Device number, if device.  */
Packit Service 82fcde
    __off_t st_size;		/* Size of file, in bytes.  */
Packit Service 82fcde
# else
Packit Service 82fcde
    __dev_t st_rdev;			/* Device number, if device.  */
Packit Service 82fcde
    unsigned int __pad2;
Packit Service 82fcde
    __off64_t st_size;			/* Size of file, in bytes.  */
Packit Service 82fcde
# endif
Packit Service 82fcde
    __blksize_t st_blksize;	/* Optimal block size for I/O.  */
Packit Service 82fcde
    __blkcnt64_t st_blocks;	/* Nr. 512-byte blocks allocated.  */
Packit Service 82fcde
# ifdef __USE_XOPEN2K8
Packit Service 82fcde
    /* Nanosecond resolution timestamps are stored in a format
Packit Service 82fcde
       equivalent to 'struct timespec'.  This is the type used
Packit Service 82fcde
       whenever possible but the Unix namespace rules do not allow the
Packit Service 82fcde
       identifier 'timespec' to appear in the <sys/stat.h> header.
Packit Service 82fcde
       Therefore we have to handle the use of this header in strictly
Packit Service 82fcde
       standard-compliant sources special.  */
Packit Service 82fcde
    struct timespec st_atim;		/* Time of last access.  */
Packit Service 82fcde
    struct timespec st_mtim;		/* Time of last modification.  */
Packit Service 82fcde
    struct timespec st_ctim;		/* Time of last status change.  */
Packit Service 82fcde
# else
Packit Service 82fcde
    __time_t st_atime;			/* Time of last access.  */
Packit Service 82fcde
    __syscall_ulong_t st_atimensec;	/* Nscecs of last access.  */
Packit Service 82fcde
    __time_t st_mtime;			/* Time of last modification.  */
Packit Service 82fcde
    __syscall_ulong_t st_mtimensec;	/* Nsecs of last modification.  */
Packit Service 82fcde
    __time_t st_ctime;			/* Time of last status change.  */
Packit Service 82fcde
    __syscall_ulong_t st_ctimensec;	/* Nsecs of last status change.  */
Packit Service 82fcde
# endif
Packit Service 82fcde
# ifdef __x86_64__
Packit Service 82fcde
    __syscall_slong_t __glibc_reserved[3];
Packit Service 82fcde
# else
Packit Service 82fcde
    __ino64_t st_ino;			/* File serial number.		*/
Packit Service 82fcde
# endif
Packit Service 82fcde
  };
Packit Service 82fcde
#endif
Packit Service 82fcde
Packit Service 82fcde
/* Tell code we have these members.  */
Packit Service 82fcde
#define	_STATBUF_ST_BLKSIZE
Packit Service 82fcde
#define _STATBUF_ST_RDEV
Packit Service 82fcde
/* Nanosecond resolution time values are supported.  */
Packit Service 82fcde
#define _STATBUF_ST_NSEC
Packit Service 82fcde
Packit Service 82fcde
/* Encoding of the file mode.  */
Packit Service 82fcde
Packit Service 82fcde
#define	__S_IFMT	0170000	/* These bits determine file type.  */
Packit Service 82fcde
Packit Service 82fcde
/* File types.  */
Packit Service 82fcde
#define	__S_IFDIR	0040000	/* Directory.  */
Packit Service 82fcde
#define	__S_IFCHR	0020000	/* Character device.  */
Packit Service 82fcde
#define	__S_IFBLK	0060000	/* Block device.  */
Packit Service 82fcde
#define	__S_IFREG	0100000	/* Regular file.  */
Packit Service 82fcde
#define	__S_IFIFO	0010000	/* FIFO.  */
Packit Service 82fcde
#define	__S_IFLNK	0120000	/* Symbolic link.  */
Packit Service 82fcde
#define	__S_IFSOCK	0140000	/* Socket.  */
Packit Service 82fcde
Packit Service 82fcde
/* POSIX.1b objects.  Note that these macros always evaluate to zero.  But
Packit Service 82fcde
   they do it by enforcing the correct use of the macros.  */
Packit Service 82fcde
#define __S_TYPEISMQ(buf)  ((buf)->st_mode - (buf)->st_mode)
Packit Service 82fcde
#define __S_TYPEISSEM(buf) ((buf)->st_mode - (buf)->st_mode)
Packit Service 82fcde
#define __S_TYPEISSHM(buf) ((buf)->st_mode - (buf)->st_mode)
Packit Service 82fcde
Packit Service 82fcde
/* Protection bits.  */
Packit Service 82fcde
Packit Service 82fcde
#define	__S_ISUID	04000	/* Set user ID on execution.  */
Packit Service 82fcde
#define	__S_ISGID	02000	/* Set group ID on execution.  */
Packit Service 82fcde
#define	__S_ISVTX	01000	/* Save swapped text after use (sticky).  */
Packit Service 82fcde
#define	__S_IREAD	0400	/* Read by owner.  */
Packit Service 82fcde
#define	__S_IWRITE	0200	/* Write by owner.  */
Packit Service 82fcde
#define	__S_IEXEC	0100	/* Execute by owner.  */
Packit Service 82fcde
Packit Service 82fcde
#ifdef __USE_ATFILE
Packit Service 82fcde
# define UTIME_NOW	((1l << 30) - 1l)
Packit Service 82fcde
# define UTIME_OMIT	((1l << 30) - 2l)
Packit Service 82fcde
#endif
Packit Service 82fcde
Packit Service 82fcde
#endif	/* bits/stat.h */