ftp.nice.ch/pub/next/unix/mail/zend.1.0.s.tar.gz#/zend-1.0/include/p-stat.h

This is p-stat.h in view mode; [Download] [Up]

/*+++*
 *  RCS		$Id: p-stat.h,v 1.6 1993/02/02 21:00:42 gerben Exp $
 *  title:	p-stat.h
 *  abstract:	portable Posix-compliant <sys/stat.h>.
 *  author:	T.R.Hageman, Groningen, The Netherlands
 *  created:	September 1992
 *  modified:	(see RCS Log at end)
 *  copyleft:
 *
 *		Copyright (C) 1992  Tom R. Hageman.
 *
 *	This is free software; you can redistribute it and/or modify
 *	it under the terms of the GNU General Public License as published by
 *	the Free Software Foundation; either version 2 of the License, or
 *	(at your option) any later version.
 *
 *	This software is distributed in the hope that it will be useful,
 *	but WITHOUT ANY WARRANTY; without even the implied warranty of
 *	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *	GNU General Public License for more details.
 *
 *	You should have received a copy of the GNU General Public License
 *	along with this software; if not, write to the Free Software
 *	Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 *
 *  description:
 *
 *	This is a Posix-compatible version of <sys/stat.h> for both Posix
 *	and non-Posix systems.
 *
 *	 o Include this BEFORE all other "p-<header>" files, since otherwise
 *	   the catch-all types defined in "p-types.h" may conflict with
 *	   the actual types in `struct stat'. ("p-types.h" is silently included
 *	   by a number of other "p-<header>" files.)
 *
 *	 o The constants S_ISUID and S_ISGRP (which are required by Posix)
 *	   are deliberately left undefined for systems that do not define
 *	   these, so aplications can check their existence.
 *
 *	 o `lstat' is aliased to `stat' if S_ISLNK is undefined.
 *
 *--*/

#ifndef _P_STAT_H_
#define _P_STAT_H_	0x104

#ifndef _PORTDEFS_H_
#   include "portdefs.h"
#endif

#if __STRICT_ANSI__
    #error "You shouldn't use this header in strict ANSI C code"
#endif

#ifndef _SYS_TYPES_H_
#   if _I_SYS_TYPES - -1
#	include <sys/types.h>
#   else
#	if _I_TYPES
#	    include <types.h>
#	endif
#   endif
#   define _SYS_TYPES_H_
#endif

#ifndef _SYS_STAT_H_
#   if _I_SYS_STAT - -1
#	include <sys/stat.h>
#   else
#	if _I_STAT
#	    include <stat.h>
#	else
	    #error "both <sys/stat.h> and <stat.h> are absent" \
	           "(according to portdefs.h)"
#	endif
#   endif
#   define _SYS_STAT_H_
#endif


/* Include our own ``sys/types.h'' AFTER <sys/stat.h> so that incorrect type
   definitions there at least will not affect struct stat. */

#ifndef _P_TYPES_H_
#   include "p-types.h"
#endif


/* Now, provide Posix-style S_IS* and S_I[RWX]* macros if undefined. */
/* {{Should we also try to provide backwards-compatibility??}} */

#ifndef S_ISREG
    /* Allow either traditional unix S_IF* or wannabe Posix _S_IF* masks. */ 
#   if (!(S_IFMT && S_IFREG != S_IFDIR) && !(_S_IFMT && _S_IFREG != _S_IFDIR))
	#error "st_mode macros undefined--check <sys/stat.h>!"
#   endif

#   ifdef S_IFREG 
#	define S_ISREG(m)	(((m)&S_IFMT)==S_IFREG)
#   else
#	ifdef _S_IFREG
#	    define S_ISREG(m)	(((m)&_S_IFMT)==_S_IFREG)
#	endif
#   endif
#endif
#ifndef S_ISDIR
#   ifdef S_IFDIR
#	define S_ISDIR(m)	(((m)&S_IFMT)==S_IFDIR)
#   else
#	ifdef _S_IFDIR
#	    define S_ISDIR(m)	(((m)&_S_IFMT)==_S_IFDIR)
#	endif
#   endif
#endif
#ifndef S_ISCHR
#   ifdef S_IFCHR
#	define S_ISCHR(m)	(((m)&S_IFMT)==S_IFCHR)
#   else
#	ifdef _S_IFCHR
#	    define S_ISCHR(m)	(((m)&_S_IFMT)==_S_IFCHR)
#	endif
#   endif
#endif
#ifndef S_ISBLK
#   ifdef S_IFBLK
#	define S_ISBLK(m)	(((m)&S_IFMT)==S_IFBLK)
#   else
#	ifdef _S_IFBLK
#	    define S_ISBLK(m)	(((m)&_S_IFMT)==_S_IFBLK)
#	endif
#   endif
#endif
#ifndef S_ISFIFO
#   ifdef S_IFIFO
#	define S_ISFIFO(m)	(((m)&S_IFMT)==S_IFIFO)
#   else
#	ifdef _S_IFIFO
#	    define S_ISFIFO(m)	(((m)&_S_IFMT)==_S_IFIFO)
#	endif
#   endif
#endif
#ifndef S_ISLNK
#   ifdef S_IFLNK
#	define S_ISLNK(m)	(((m)&S_IFMT)==S_IFLNK)
#   else
#	ifdef _S_IFLNK
#	    define S_ISLNK(m)	(((m)&_S_IFMT)==_S_IFLNK)
#	endif
#   endif
#endif
#ifndef S_ISNAM
#   ifdef S_IFNAM
#	define S_ISNAM(m)	(((m)&S_IFMT)==S_IFNAM)
#   else
#	ifdef _S_IFNAM
#	    define S_ISNAM(m)	(((m)&_S_IFMT)==_S_IFNAM)
#	endif
#   endif
#endif
#ifndef S_ISSOCK
#   ifdef S_IFSOCK
#	define S_ISSOCK(m)	(((m)&S_IFMT)==S_IFSOCK)
#   else
#	ifdef _S_IFSOCK
#	    define S_ISSOCK(m)	(((m)&_S_IFMT)==_S_IFSOCK)
#	endif
#   endif
#endif

#ifndef S_IRUSR
#   ifdef S_IREAD
#	define S_IRUSR	S_IREAD
#   else
#	ifdef _S_IREAD
#	    define S_IRUSR	_S_IREAD
#	else
#	    define S_IRUSR	0400
#	endif
#   endif
#endif
#ifndef S_IRGRP
#   define S_IRGRP	(S_IRUSR>>3)
#endif
#ifndef S_IROTH
#   define S_IROTH	(S_IRUSR>>6)
#endif

#ifndef S_IWUSR
#   ifdef S_IWRITE
#	define S_IWUSR	S_IWRITE
#   else
#	ifdef _S_IWRITE
#	    define S_IWUSR	_S_IWRITE
#	else
#	    define S_IWUSR	0200
#	endif
#   endif
#endif
#ifndef S_IWGRP
#   define S_IWGRP	(S_IWUSR>>3)
#endif
#ifndef S_IWOTH
#   define S_IWOTH	(S_IWUSR>>6)
#endif

#ifndef S_IXUSR
#   ifdef S_IEXEC
#	define S_IXUSR	S_IEXEC
#   else
#	ifdef _S_IEXEC
#	    define S_IXUSR	_S_IEXEC
#	else
#	    define S_IXUSR	0100
#	endif
#   endif
#endif
#ifndef S_IXGRP
#   define S_IXGRP	(S_IXUSR>>3)
#endif
#ifndef S_IXOTH
#   define S_IXOTH	(S_IXUSR>>6)
#endif

#ifndef S_IRWXU
#   define S_IRWXU	(S_IRUSR|S_IWUSR|S_IXUSR)
#endif
#ifndef S_IRWXG
#   define S_IRWXG	(S_IRGRP|S_IWGRP|S_IXGRP)
#endif
#ifndef S_IRWXO
#   define S_IRWXO	(S_IROTH|S_IWOTH|S_IXOTH)
#endif

#if !__POSIX__
#if !__NO_PROTO__ && !__NO_TRIV_PROTO__

extern int	stat	__(( const char *_(name), struct stat *_(buf) ));
extern int	fstat	__(( int _(fd), struct stat *_(buf) ));

extern int	mkdir	__(( const char *_(name), mode_t _(mode) ));
extern int	mkfifo	__(( const char *_(name), mode_t _(mode) ));

extern int	chmod	__(( const char *_(name), mode_t _(mode) ));

#ifndef umask
extern mode_t	umask	__(( mode_t _(newmask) ));
#endif

#endif /* !__NO_PROTO__ */
#endif /* !__POSIX__ */

#if !__STRICT_POSIX__
#ifdef S_ISLNK
#   if !__NO_PROTO__ && !__NO_TRIV_PROTO__
	extern int	lstat	__(( const char *_(name), struct stat *_(buf) ));
#   endif
#else
#   define	lstat	stat
#endif
#endif

#endif /* _P_STAT_H_ */

/*======================================================================*
 * $Log: p-stat.h,v $
 * Revision 1.6  1993/02/02  21:00:42  gerben
 * *** empty log message ***
 *
 * Revision 1.5  1992/10/23  04:56:47  tom
 * fix typo in declaration of lstat().
 *
 * Revision 1.4  1992/10/23  04:11:15  tom
 * add __STRICT_ANSI__ check; describe BUGS; add __NO_TRIV_PROTO__.
 *
 * Revision 1.3  1992/10/21  19:40:23  tom
 * don't include function prototypes if __POSIX__.
 *
 * Revision 1.2  1992/10/20  16:52:19  tom
 * make __NO_PROTO__ consistent with other headers.
 *
 * Revision 1.1  1992/10/14  13:38:20  tom
 * rename to "p-<header>".
 *
 * Revision 1.0  1992/10/09  07:07:34  tom
 * Initial revision
 *
 *======================================================================*/

These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.