summaryrefslogtreecommitdiffstats
path: root/Mac/Compat
diff options
context:
space:
mode:
authorGuido van Rossum <guido@python.org>1994-08-26 09:09:48 (GMT)
committerGuido van Rossum <guido@python.org>1994-08-26 09:09:48 (GMT)
commite78344444086581bdf59f13415b0c701e740cce1 (patch)
tree3acac917aadc26e434e55d139ddfcab7d671ef3b /Mac/Compat
parentf0171a1626164cad064930e60fe5f06ca2c51f8b (diff)
downloadcpython-e78344444086581bdf59f13415b0c701e740cce1.zip
cpython-e78344444086581bdf59f13415b0c701e740cce1.tar.gz
cpython-e78344444086581bdf59f13415b0c701e740cce1.tar.bz2
Intermediate version of changes after porting to MPW 3.2
Diffstat (limited to 'Mac/Compat')
-rw-r--r--Mac/Compat/macstat.c57
-rw-r--r--Mac/Compat/macstat.h25
2 files changed, 82 insertions, 0 deletions
diff --git a/Mac/Compat/macstat.c b/Mac/Compat/macstat.c
new file mode 100644
index 0000000..e645050
--- /dev/null
+++ b/Mac/Compat/macstat.c
@@ -0,0 +1,57 @@
+/* Minimal 'stat' emulation: tells directories from files and
+ gives length and mtime.
+ Public domain by Guido van Rossum, CWI, Amsterdam (July 1987).
+*/
+
+#include "stat.h"
+#include "macdefs.h"
+
+/* Bits in ioFlAttrib: */
+#define LOCKBIT (1<<0) /* File locked */
+#define DIRBIT (1<<4) /* It's a directory */
+
+int
+stat(path, buf)
+ char *path;
+ struct stat *buf;
+{
+ union {
+ DirInfo d;
+ FileParam f;
+ HFileInfo hf;
+ } pb;
+ 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 */
+ if (hfsrunning())
+ err= PBGetCatInfo((CInfoPBPtr)&pb, FALSE);
+ else
+ err= PBGetFInfo((ParmBlkPtr)&pb, FALSE);
+ 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_size= pb.f.ioFlLgLen;
+ buf->st_rsize= pb.f.ioFlRLgLen;
+ }
+ buf->st_mtime= pb.f.ioFlMdDat - TIMEDIFF;
+ return 0;
+}
diff --git a/Mac/Compat/macstat.h b/Mac/Compat/macstat.h
new file mode 100644
index 0000000..c14116a
--- /dev/null
+++ b/Mac/Compat/macstat.h
@@ -0,0 +1,25 @@
+/* Include file belonging to stat emulator.
+ Public domain by Guido van Rossum, CWI, Amsterdam (July 1987). */
+
+struct stat {
+ unsigned short st_mode;
+ unsigned long st_size;
+ unsigned long st_rsize; /* Resource size -- nonstandard */
+ unsigned long st_mtime;
+};
+
+#ifdef UNIX_COMPAT
+#define S_IFMT 0170000L
+#define S_IFDIR 0040000L
+#define S_IFREG 0100000L
+#define S_IREAD 0400
+#define S_IWRITE 0200
+#define S_IEXEC 0100
+#else
+#define S_IFMT 0xFFFF
+#define S_IFDIR 0x0000
+#define S_IFREG 0x0003
+#define S_IREAD 0400
+#define S_IWRITE 0200
+#define S_IEXEC 0100
+#endif