/* Minimal 'stat' emulation: tells directories from files and
   gives length and mtime.
   Public domain by Guido van Rossum, CWI, Amsterdam (July 1987).
   Updated to give more info, August 1994.
*/

#include "macstat.h"
#include "macdefs.h"

/* Bits in ioFlAttrib: */
#define LOCKBIT	(1<<0)		/* File locked */
#define DIRBIT	(1<<4)		/* It's a directory */

int
macstat(path, buf)
	char *path;
	struct macstat *buf;
{
	union {
		DirInfo d;
		FileParam f;
		HFileInfo hf;
	} pb;
	short err;
	
	pb.d.ioNamePtr = (unsigned char *)Pstring(path);
	pb.d.ioVRefNum = 0;
	pb.d.ioFDirIndex = 0;
	pb.d.ioDrDirID = 0;
	pb.f.ioFVersNum = 0; /* Fix found by Timo! See Tech Note 102 */
	err = PBGetCatInfoSync((CInfoPBPtr)&pb);
	if (err != noErr) {
		errno = ENOENT;
		return -1;
	}
	if (pb.d.ioFlAttrib & LOCKBIT)
		buf->st_mode = 0444;
	else
		buf->st_mode = 0666;
	if (pb.d.ioFlAttrib & DIRBIT) {
		buf->st_mode |= 0111 | S_IFDIR;
		buf->st_size = pb.d.ioDrNmFls;
		buf->st_rsize = 0;
	}
	else {
		buf->st_mode |= S_IFREG;
		if (pb.f.ioFlFndrInfo.fdType == 'APPL')
			buf->st_mode |= 0111;
	}
	buf->st_ino = pb.hf.ioDirID;
	buf->st_nlink = 1;
	buf->st_uid = 1;
	buf->st_gid = 1;
	buf->st_size = (buf->st_mode & S_IFDIR) ? 0 : pb.f.ioFlLgLen;
	buf->st_mtime = buf->st_atime = pb.f.ioFlMdDat;
	buf->st_ctime = pb.f.ioFlCrDat;
	buf->st_rsize = (buf->st_mode & S_IFDIR) ? 0 : pb.f.ioFlRLgLen;
	*(unsigned long *)buf->st_type =
		(buf->st_mode & S_IFDIR) ? 0 : pb.f.ioFlFndrInfo.fdType;
	*(unsigned long *)buf->st_creator =
		(buf->st_mode & S_IFDIR) ? 0 : pb.f.ioFlFndrInfo.fdCreator;
	return 0;
}
