mirror of
https://github.com/python/cpython.git
synced 2025-08-04 00:48:58 +00:00
Completed (hopefully) the unification of THINK 6.0 and MPW 3.2
versions -- they now share config.c and config.h, and statting is always done through macstat.[ch] (THINK's <stat.h> defines funny constants). Also the configuration of stdwin is done differently: you have to define USE_STDWIN to the compiler prefix.
This commit is contained in:
parent
e783444440
commit
739267b7c3
8 changed files with 71 additions and 53 deletions
|
@ -1,9 +1,10 @@
|
|||
/* 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 "stat.h"
|
||||
#include "macstat.h"
|
||||
#include "macdefs.h"
|
||||
|
||||
/* Bits in ioFlAttrib: */
|
||||
|
@ -11,9 +12,9 @@
|
|||
#define DIRBIT (1<<4) /* It's a directory */
|
||||
|
||||
int
|
||||
stat(path, buf)
|
||||
macstat(path, buf)
|
||||
char *path;
|
||||
struct stat *buf;
|
||||
struct macstat *buf;
|
||||
{
|
||||
union {
|
||||
DirInfo d;
|
||||
|
@ -23,35 +24,42 @@ stat(path, buf)
|
|||
char name[256];
|
||||
short err;
|
||||
|
||||
pb.d.ioNamePtr= (unsigned char *)c2pstr(strcpy(name, 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 */
|
||||
pb.d.ioNamePtr = (unsigned char *)c2pstr(strcpy(name, 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 */
|
||||
if (hfsrunning())
|
||||
err= PBGetCatInfo((CInfoPBPtr)&pb, FALSE);
|
||||
err = PBGetCatInfo((CInfoPBPtr)&pb, FALSE);
|
||||
else
|
||||
err= PBGetFInfo((ParmBlkPtr)&pb, FALSE);
|
||||
err = PBGetFInfo((ParmBlkPtr)&pb, FALSE);
|
||||
if (err != noErr) {
|
||||
errno = ENOENT;
|
||||
return -1;
|
||||
}
|
||||
if (pb.d.ioFlAttrib & LOCKBIT)
|
||||
buf->st_mode= 0444;
|
||||
buf->st_mode = 0444;
|
||||
else
|
||||
buf->st_mode= 0666;
|
||||
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;
|
||||
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_size= pb.f.ioFlLgLen;
|
||||
buf->st_rsize= pb.f.ioFlRLgLen;
|
||||
}
|
||||
buf->st_mtime= pb.f.ioFlMdDat - TIMEDIFF;
|
||||
buf->st_ino = pb.hf.ioDirID;
|
||||
buf->st_nlink = 1;
|
||||
buf->st_uid = 1;
|
||||
buf->st_gid = 1;
|
||||
buf->st_size = pb.f.ioFlLgLen;
|
||||
buf->st_mtime = buf->st_atime = pb.f.ioFlMdDat;
|
||||
buf->st_ctime = pb.f.ioFlCrDat;
|
||||
buf->st_rsize = pb.f.ioFlRLgLen;
|
||||
*(unsigned long *)buf->st_type = pb.f.ioFlFndrInfo.fdType;
|
||||
*(unsigned long *)buf->st_creator = pb.f.ioFlFndrInfo.fdCreator;
|
||||
return 0;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue