[comp.lang.perl] ANSI problems on a Convex

tchrist@convex.com (Tom Christiansen) (10/24/90)

On a lark (and to get waitpid()), I tried building perl in my
compiler's ANSI mode.  Unfortunately, in doio.c there are a bunch of
calls accessing the statbuf fields with & operators.  The problem is
that in strictly conforming ANSI mode, those aren't defined -- you must
use them as macros.  The relevant portions of <sys/stat.h> are included
below.

Remember: standards are your *friends*. :-)

--tom

#define	_S_IFMT		0170000	/* type of file				*/
#define		_S_IFDIR	0040000		/* directory		*/
#define		_S_IFCHR	0020000		/* character special	*/
#define		_S_IFBLK	0060000		/* block special	*/
#define		_S_IFREG	0100000		/* regular		*/
#define		_S_IFLNK	0120000		/* symbolic link	*/
#define		_S_IFSOCK	0140000		/* socket		*/
#define		_S_IFIFO	0010000		/* fifo			*/
#define	_S_ISVTX	0001000	/* file mode sticky bit (see sticky(8))	*/
#define	_S_IREAD	0000400	/* read permission, owner		*/
#define	_S_IWRITE	0000200	/* write permission, owner		*/
#define	_S_IEXEC	0000100	/* execute/search permission, owner	*/

#define	_S_FMTMASK(m)	((m)&_S_IFMT)
#define	_S_ISLNK(m)	(_S_FMTMASK(m)==_S_IFLNK)
#define	_S_ISSOCK(m)	(_S_FMTMASK(m)==_S_IFSOCK)
#define	S_ISDIR(m)	(_S_FMTMASK(m)==_S_IFDIR)
#define	S_ISCHR(m)	(_S_FMTMASK(m)==_S_IFCHR)
#define	S_ISBLK(m)	(_S_FMTMASK(m)==_S_IFBLK)
#define	S_ISREG(m)	(_S_FMTMASK(m)==_S_IFREG)
#define	S_ISFIFO(m)	(_S_FMTMASK(m)==_S_IFIFO)
#define	  S_IRUSR		_S_IREAD
#define	  S_IWUSR		_S_IWRITE
#define	  S_IXUSR		_S_IEXEC
#define	S_IRWXU		(S_IRUSR|S_IWUSR|S_IXUSR)
#define	  S_IRGRP		(S_IRUSR>>3)
#define   S_IWGRP		(S_IWUSR>>3)
#define	  S_IXGRP		(S_IXUSR>>3)
#define	S_IRWXG		(S_IRGRP|S_IWGRP|S_IXGRP)
#define	  S_IROTH		(S_IRUSR>>6)
#define	  S_IWOTH		(S_IWUSR>>6)
#define	  S_IXOTH		(S_IXUSR>>6)
#define	S_IRWXO		(S_IROTH|S_IWOTH|S_IXOTH)
#define	S_ISUID	0004000		/* set user id on execution */
#define	S_ISGID	0002000		/* set group id on execution */

#if	!__STDC__				/* { !__STDC__		*/
#define	S_IFMT		_S_IFMT
#define	S_IFDIR		_S_IFDIR
#define	S_IFBLK		_S_IFBLK
#define	S_IFCHR		_S_IFCHR
#define	S_IFREG		_S_IFREG
#define	S_IFLNK		_S_IFLNK
#define	S_IFSOCK	_S_IFSOCK	
#define	S_IFIFO		_S_IFIFO
#define	S_ISVTX		_S_ISVTX
#define	S_IREAD		_S_IREAD
#define	S_IWRITE	_S_IWRITE
#define	S_IEXEC		_S_IEXEC
#endif						/* } !__STDC__		*/