Blame include/statdefs.h

Packit 45fded
/*
Packit 45fded
 * This file has been modified for the cdrkit suite.
Packit 45fded
 *
Packit 45fded
 * The behaviour and appearence of the program code below can differ to a major
Packit 45fded
 * extent from the version distributed by the original author(s).
Packit 45fded
 *
Packit 45fded
 * For details, see Changelog file distributed with the cdrkit package. If you
Packit 45fded
 * received this file from another source then ask the distributing person for
Packit 45fded
 * a log of modifications.
Packit 45fded
 *
Packit 45fded
 */
Packit 45fded
Packit 45fded
/* @(#)statdefs.h	1.9 03/06/15 Copyright 1998 J. Schilling */
Packit 45fded
/*
Packit 45fded
 *	Definitions for stat() file mode
Packit 45fded
 *
Packit 45fded
 *	Copyright (c) 1998 J. Schilling
Packit 45fded
 */
Packit 45fded
/*
Packit 45fded
 * This program is free software; you can redistribute it and/or modify
Packit 45fded
 * it under the terms of the GNU General Public License version 2
Packit 45fded
 * as published by the Free Software Foundation.
Packit 45fded
 *
Packit 45fded
 * This program is distributed in the hope that it will be useful,
Packit 45fded
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit 45fded
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
Packit 45fded
 * GNU General Public License for more details.
Packit 45fded
 *
Packit 45fded
 * You should have received a copy of the GNU General Public License along with
Packit 45fded
 * this program; see the file COPYING.  If not, write to the Free Software
Packit 45fded
 * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
Packit 45fded
 */
Packit 45fded
Packit 45fded
#ifndef	_STATDEFS_H
Packit 45fded
#define	_STATDEFS_H
Packit 45fded
Packit 45fded
#ifndef _MCONFIG_H
Packit 45fded
#include <mconfig.h>
Packit 45fded
#endif
Packit 45fded
Packit 45fded
#ifndef	_INCL_SYS_TYPES_H
Packit 45fded
#include <sys/types.h>		/* Needed for sys/stat.h		*/
Packit 45fded
#define	_INCL_SYS_TYPES_H
Packit 45fded
#endif
Packit 45fded
#ifndef	_INCL_SYS_STAT_H
Packit 45fded
#include <sys/stat.h>		/* For S_IS* and S_IF*			*/
Packit 45fded
#define	_INCL_SYS_STAT_H
Packit 45fded
#endif
Packit 45fded
Packit 45fded
/*
Packit 45fded
 * Apollo Domain/OS has a broken sys/stat.h that defines
Packit 45fded
 * S_IFIFO == S_IFSOCK and creates trouble if the constants
Packit 45fded
 * are used as case labels.
Packit 45fded
 */
Packit 45fded
#if S_IFIFO == S_IFSOCK
Packit 45fded
#	undef	S_IFSOCK
Packit 45fded
#endif
Packit 45fded
Packit 45fded
#ifdef	STAT_MACROS_BROKEN
Packit 45fded
#undef	S_ISFIFO			/* Named pipe		*/
Packit 45fded
#undef	S_ISCHR				/* Character special	*/
Packit 45fded
#undef	S_ISMPC				/* UNUSED multiplexed c	*/
Packit 45fded
#undef	S_ISDIR				/* Directory		*/
Packit 45fded
#undef	S_ISNAM				/* Named file (XENIX)	*/
Packit 45fded
#undef	S_ISBLK				/* Block special	*/
Packit 45fded
#undef	S_ISMPB				/* UNUSED multiplexed b	*/
Packit 45fded
#undef	S_ISREG				/* Regular file		*/
Packit 45fded
#undef	S_ISCNT				/* Contiguous file	*/
Packit 45fded
#undef	S_ISLNK				/* Symbolic link	*/
Packit 45fded
#undef	S_ISSHAD			/* Solaris shadow inode	*/
Packit 45fded
#undef	S_ISSOCK			/* UNIX domain socket	*/
Packit 45fded
#undef	S_ISDOOR			/* Solaris DOOR		*/
Packit 45fded
#undef	S_ISWHT				/* BSD whiteout		*/
Packit 45fded
#undef	S_ISEVC				/* UNOS eventcount	*/
Packit 45fded
#endif
Packit 45fded
Packit 45fded
#ifndef	S_ISFIFO			/* 1 Named pipe		*/
Packit 45fded
#	ifdef	S_IFIFO
Packit 45fded
#		define	S_ISFIFO(m)	(((m) & S_IFMT) == S_IFIFO)
Packit 45fded
#	else
Packit 45fded
#		define	S_ISFIFO(m)	(0)
Packit 45fded
#	endif
Packit 45fded
#endif
Packit 45fded
#ifndef	S_ISCHR				/* 2 Character special	*/
Packit 45fded
#	ifdef	S_IFCHR
Packit 45fded
#		define	S_ISCHR(m)	(((m) & S_IFMT) == S_IFCHR)
Packit 45fded
#	else
Packit 45fded
#		define	S_ISCHR(m)	(0)
Packit 45fded
#	endif
Packit 45fded
#endif
Packit 45fded
#ifndef	S_ISMPC				/* 3 UNUSED multiplexed char	*/
Packit 45fded
#	ifdef	S_IFMPC
Packit 45fded
#		define	S_ISMPC(m)	(((m) & S_IFMT) == S_IFMPC)
Packit 45fded
#	else
Packit 45fded
#		define	S_ISMPC(m)	(0)
Packit 45fded
#	endif
Packit 45fded
#endif
Packit 45fded
#ifndef	S_ISDIR				/* 4 Directory			*/
Packit 45fded
#	ifdef	S_IFDIR
Packit 45fded
#		define	S_ISDIR(m)	(((m) & S_IFMT) == S_IFDIR)
Packit 45fded
#	else
Packit 45fded
#		define	S_ISDIR(m)	(0)
Packit 45fded
#	endif
Packit 45fded
#endif
Packit 45fded
#ifndef	S_ISNAM				/* 5 Named file (XENIX)		*/
Packit 45fded
#	ifdef	S_IFNAM
Packit 45fded
#		define	S_ISNAM(m)	(((m) & S_IFMT) == S_IFNAM)
Packit 45fded
#	else
Packit 45fded
#		define	S_ISNAM(m)	(0)
Packit 45fded
#	endif
Packit 45fded
#endif
Packit 45fded
#ifndef	S_ISBLK				/* 6 Block special		*/
Packit 45fded
#	ifdef	S_IFBLK
Packit 45fded
#		define	S_ISBLK(m)	(((m) & S_IFMT) == S_IFBLK)
Packit 45fded
#	else
Packit 45fded
#		define	S_ISBLK(m)	(0)
Packit 45fded
#	endif
Packit 45fded
#endif
Packit 45fded
#ifndef	S_ISMPB				/* 7 UNUSED multiplexed block	*/
Packit 45fded
#	ifdef	S_IFMPB
Packit 45fded
#		define	S_ISMPB(m)	(((m) & S_IFMT) == S_IFMPB)
Packit 45fded
#	else
Packit 45fded
#		define	S_ISMPB(m)	(0)
Packit 45fded
#	endif
Packit 45fded
#endif
Packit 45fded
#ifndef	S_ISREG				/* 8 Regular file		*/
Packit 45fded
#	ifdef	S_IFREG
Packit 45fded
#		define	S_ISREG(m)	(((m) & S_IFMT) == S_IFREG)
Packit 45fded
#	else
Packit 45fded
#		define	S_ISREG(m)	(0)
Packit 45fded
#	endif
Packit 45fded
#endif
Packit 45fded
#ifndef	S_ISCNT				/* 9 Contiguous file		*/
Packit 45fded
#	ifdef	S_IFCNT
Packit 45fded
#		define	S_ISCNT(m)	(((m) & S_IFMT) == S_IFCNT)
Packit 45fded
#	else
Packit 45fded
#		define	S_ISCNT(m)	(0)
Packit 45fded
#	endif
Packit 45fded
#endif
Packit 45fded
#ifndef	S_ISLNK				/* 10 Symbolic link		*/
Packit 45fded
#	ifdef	S_IFLNK
Packit 45fded
#		define	S_ISLNK(m)	(((m) & S_IFMT) == S_IFLNK)
Packit 45fded
#	else
Packit 45fded
#		define	S_ISLNK(m)	(0)
Packit 45fded
#	endif
Packit 45fded
#endif
Packit 45fded
#ifndef	S_ISSHAD			/* 11 Solaris shadow inode	*/
Packit 45fded
#	ifdef	S_IFSHAD
Packit 45fded
#		define	S_ISSHAD(m)	(((m) & S_IFMT) == S_IFSHAD)
Packit 45fded
#	else
Packit 45fded
#		define	S_ISSHAD(m)	(0)
Packit 45fded
#	endif
Packit 45fded
#endif
Packit 45fded
#ifndef	S_ISSOCK			/* 12 UNIX domain socket	*/
Packit 45fded
#	ifdef	S_IFSOCK
Packit 45fded
#		define	S_ISSOCK(m)	(((m) & S_IFMT) == S_IFSOCK)
Packit 45fded
#	else
Packit 45fded
#		define	S_ISSOCK(m)	(0)
Packit 45fded
#	endif
Packit 45fded
#endif
Packit 45fded
#ifndef	S_ISDOOR			/* 13 Solaris DOOR		*/
Packit 45fded
#	ifdef	S_IFDOOR
Packit 45fded
#		define	S_ISDOOR(m)	(((m) & S_IFMT) == S_IFDOOR)
Packit 45fded
#	else
Packit 45fded
#		define	S_ISDOOR(m)	(0)
Packit 45fded
#	endif
Packit 45fded
#endif
Packit 45fded
#ifndef	S_ISWHT				/* 14 BSD whiteout		*/
Packit 45fded
#	ifdef	S_IFWHT
Packit 45fded
#		define	S_ISWHT(m)	(((m) & S_IFMT) == S_ISWHT)
Packit 45fded
#	else
Packit 45fded
#		define	S_ISWHT(m)	(0)
Packit 45fded
#	endif
Packit 45fded
#endif
Packit 45fded
#ifndef	S_IFEVC				/* 15 UNOS eventcount		*/
Packit 45fded
#	ifdef	S_IFEVC
Packit 45fded
#		define	S_ISEVC(m)	(((m) & S_IFMT) == S_IFEVC)
Packit 45fded
#	else
Packit 45fded
#		define	S_ISEVC(m)	(0)
Packit 45fded
#	endif
Packit 45fded
#endif
Packit 45fded
Packit 45fded
#ifndef	S_TYPEISMQ
Packit 45fded
/*
Packit 45fded
 * XXX ??? where is a definition of a message queue ???
Packit 45fded
 */
Packit 45fded
#		define	S_TYPEISMQ(_stbuf)	(0)
Packit 45fded
#endif
Packit 45fded
#ifndef	S_TYPEISSEM
Packit 45fded
#	ifdef	S_INSEM
Packit 45fded
#		define	S_TYPEISSEM(_stbuf)	(S_ISNAM((_stbuf)->st_mode) && (_stbuf)->st_rdev == S_INSEM)
Packit 45fded
#	else
Packit 45fded
#		define	S_TYPEISSEM(_stbuf)	(0)
Packit 45fded
#	endif
Packit 45fded
#endif
Packit 45fded
#ifndef	S_TYPEISSHM
Packit 45fded
#	ifdef	S_INSHD
Packit 45fded
#		define	S_TYPEISSHM(_stbuf)	(S_ISNAM((_stbuf)->st_mode) && (_stbuf)->st_rdev == S_INSHD)
Packit 45fded
#	else
Packit 45fded
#		define	S_TYPEISSHM(_stbuf)	(0)
Packit 45fded
#	endif
Packit 45fded
#endif
Packit 45fded
Packit 45fded
/*
Packit 45fded
 * Mode permission bits.
Packit 45fded
 * UNIX V.7 has only	S_ISUID/S_ISGID/S_ISVTX and S_IREAD/S_IWRITE/S_IEXEC
Packit 45fded
 */
Packit 45fded
#ifndef	S_ISUID			/* Set-user-ID on execution */
Packit 45fded
#define	S_ISUID	0		/* If it is not defined, it is not supported */
Packit 45fded
#endif
Packit 45fded
#ifndef	S_ISGID			/* Set-group-ID on execution */
Packit 45fded
#define	S_ISGID	0		/* If it is not defined, it is not supported */
Packit 45fded
#endif
Packit 45fded
#ifndef	S_ISVTX			/* On directories, restricted deletion flag */
Packit 45fded
#define	S_ISVTX	0		/* If it is not defined, it is not supported */
Packit 45fded
#endif
Packit 45fded
Packit 45fded
#ifndef	S_IRUSR			/* Read permission, owner */
Packit 45fded
#ifdef	S_IREAD
Packit 45fded
#define	S_IRUSR	S_IREAD		/* Needed on old UNIX systems */
Packit 45fded
#else
Packit 45fded
#define	S_IRUSR	0400
Packit 45fded
#endif
Packit 45fded
#endif
Packit 45fded
#ifndef	S_IWUSR			/* Write permission, owner */
Packit 45fded
#ifdef	S_IWRITE
Packit 45fded
#define	S_IWUSR	S_IWRITE	/* Needed on old UNIX systems */
Packit 45fded
#else
Packit 45fded
#define	S_IWUSR	0200
Packit 45fded
#endif
Packit 45fded
#endif
Packit 45fded
#ifndef	S_IXUSR			/* Execute/search permission, owner */
Packit 45fded
#ifdef	S_IEXEC
Packit 45fded
#define	S_IXUSR	S_IEXEC		/* Needed on old UNIX systems */
Packit 45fded
#else
Packit 45fded
#define	S_IXUSR	0100
Packit 45fded
#endif
Packit 45fded
#endif
Packit 45fded
#ifndef	S_IRGRP			/* Read permission, group */
Packit 45fded
#ifdef	S_IREAD
Packit 45fded
#define	S_IRGRP	(S_IREAD >> 3)	/* Needed on old UNIX systems */
Packit 45fded
#else
Packit 45fded
#define	S_IRGRP	040
Packit 45fded
#endif
Packit 45fded
#endif
Packit 45fded
#ifndef	S_IWGRP			/* Write permission, group */
Packit 45fded
#ifdef	S_IWRITE
Packit 45fded
#define	S_IWGRP	(S_IWRITE >> 3)	/* Needed on old UNIX systems */
Packit 45fded
#else
Packit 45fded
#define	S_IWGRP	020
Packit 45fded
#endif
Packit 45fded
#endif
Packit 45fded
#ifndef	S_IXGRP			/* Execute/search permission, group */
Packit 45fded
#ifdef	S_IEXEC
Packit 45fded
#define	S_IXGRP	(S_IEXEC >> 3)	/* Needed on old UNIX systems */
Packit 45fded
#else
Packit 45fded
#define	S_IXGRP	010
Packit 45fded
#endif
Packit 45fded
#endif
Packit 45fded
#ifndef	S_IROTH			/* Read permission, others */
Packit 45fded
#ifdef	S_IREAD
Packit 45fded
#define	S_IROTH	(S_IREAD >> 6)	/* Needed on old UNIX systems */
Packit 45fded
#else
Packit 45fded
#define	S_IROTH	004
Packit 45fded
#endif
Packit 45fded
#endif
Packit 45fded
#ifndef	S_IWOTH			/* Write permission, others */
Packit 45fded
#ifdef	S_IWRITE
Packit 45fded
#define	S_IWOTH	(S_IWRITE >> 6)	/* Needed on old UNIX systems */
Packit 45fded
#else
Packit 45fded
#define	S_IWOTH	002
Packit 45fded
#endif
Packit 45fded
#endif
Packit 45fded
#ifndef	S_IXOTH			/* Execute/search permission, others */
Packit 45fded
#ifdef	S_IEXEC
Packit 45fded
#define	S_IXOTH	(S_IEXEC >> 6)	/* Needed on old UNIX systems */
Packit 45fded
#else
Packit 45fded
#define	S_IXOTH	001
Packit 45fded
#endif
Packit 45fded
#endif
Packit 45fded
Packit 45fded
#ifndef	S_IRWXU			/* Read, write, execute/search by owner */
Packit 45fded
#define	S_IRWXU (S_IRUSR|S_IWUSR|S_IXUSR)
Packit 45fded
#endif
Packit 45fded
#ifndef	S_IRWXG			/* Read, write, execute/search by group */
Packit 45fded
#define	S_IRWXG (S_IRGRP|S_IWGRP|S_IXGRP)
Packit 45fded
#endif
Packit 45fded
#ifndef	S_IRWXO			/* Read, write, execute/search by others */
Packit 45fded
#define	S_IRWXO (S_IROTH|S_IWOTH|S_IXOTH)
Packit 45fded
#endif
Packit 45fded
Packit 45fded
/*
Packit 45fded
 * SCO UnixWare has st_atim.st__tim.tv_nsec but the st_atim.tv_nsec tests also
Packit 45fded
 * succeeds. If we use st_atim.tv_nsec on UnixWare, we get a warning about
Packit 45fded
 * illegal structure usage. For this reason, our code needs to have
Packit 45fded
 * #ifdef HAVE_ST__TIM before #ifdef HAVE_ST_NSEC.
Packit 45fded
 */
Packit 45fded
#if	defined(HAVE_ST_ATIMENSEC)
Packit 45fded
Packit 45fded
#define	stat_ansecs(s)		((s)->st_atimensec)
Packit 45fded
#define	stat_mnsecs(s)		((s)->st_mtimensec)
Packit 45fded
#define	stat_cnsecs(s)		((s)->st_ctimensec)
Packit 45fded
Packit 45fded
#define	_FOUND_STAT_NSECS_
Packit 45fded
#endif
Packit 45fded
Packit 45fded
#if	defined(HAVE_ST_SPARE1) && !defined(_FOUND_STAT_NSECS_)
Packit 45fded
Packit 45fded
#define	stat_ansecs(s)		((s)->st_spare1 * 1000)
Packit 45fded
#define	stat_mnsecs(s)		((s)->st_spare2 * 1000)
Packit 45fded
#define	stat_cnsecs(s)		((s)->st_spare3 * 1000)
Packit 45fded
Packit 45fded
#define	_FOUND_STAT_USECS_
Packit 45fded
#define	_FOUND_STAT_NSECS_
Packit 45fded
#endif
Packit 45fded
Packit 45fded
#if	defined(HAVE_ST__TIM) && !defined(_FOUND_STAT_NSECS_)
Packit 45fded
Packit 45fded
#define	stat_ansecs(s)		((s)->st_atim.st__tim.tv_nsec)
Packit 45fded
#define	stat_mnsecs(s)		((s)->st_mtim.st__tim.tv_nsec)
Packit 45fded
#define	stat_cnsecs(s)		((s)->st_ctim.st__tim.tv_nsec)
Packit 45fded
Packit 45fded
#define	_FOUND_STAT_NSECS_
Packit 45fded
#endif
Packit 45fded
Packit 45fded
#if	defined(HAVE_ST_NSEC) && !defined(_FOUND_STAT_NSECS_)
Packit 45fded
Packit 45fded
#define	stat_ansecs(s)		((s)->st_atim.tv_nsec)
Packit 45fded
#define	stat_mnsecs(s)		((s)->st_mtim.tv_nsec)
Packit 45fded
#define	stat_cnsecs(s)		((s)->st_ctim.tv_nsec)
Packit 45fded
Packit 45fded
#define	_FOUND_STAT_NSECS_
Packit 45fded
#endif
Packit 45fded
Packit 45fded
#if	defined(HAVE_ST_ATIMESPEC) && !defined(_FOUND_STAT_NSECS_)
Packit 45fded
Packit 45fded
#define	stat_ansecs(s)		((s)->st_atimespec.tv_nsec)
Packit 45fded
#define	stat_mnsecs(s)		((s)->st_mtimespec.tv_nsec)
Packit 45fded
#define	stat_cnsecs(s)		((s)->st_ctimespec.tv_nsec)
Packit 45fded
Packit 45fded
#define	_FOUND_STAT_NSECS_
Packit 45fded
#endif
Packit 45fded
Packit 45fded
#if	!defined(_FOUND_STAT_NSECS_)
Packit 45fded
#define	stat_ansecs(s)		(0)
Packit 45fded
#define	stat_mnsecs(s)		(0)
Packit 45fded
#define	stat_cnsecs(s)		(0)
Packit 45fded
#endif
Packit 45fded
Packit 45fded
#endif	/* _STATDEFS_H */