summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Mac/Include/macglue.h4
-rw-r--r--Mac/Modules/macmodule.c10
-rw-r--r--Mac/Python/macglue.c45
-rw-r--r--Mac/Python/macmain.c4
4 files changed, 48 insertions, 15 deletions
diff --git a/Mac/Include/macglue.h b/Mac/Include/macglue.h
index 9213f2f..58b28e0 100644
--- a/Mac/Include/macglue.h
+++ b/Mac/Include/macglue.h
@@ -39,6 +39,10 @@ OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
#pragma lib_export on
#endif
+#ifdef USE_GUSI
+void PyMac_FixGUSIcd Py_PROTO((void)); /* Workaround for GUSI chdir() call */
+#endif
+
char *PyMac_StrError(int); /* strerror with mac errors */
extern int PyMac_DoYieldEnabled; /* Don't do eventloop when false */
diff --git a/Mac/Modules/macmodule.c b/Mac/Modules/macmodule.c
index 4190db0..75716db 100644
--- a/Mac/Modules/macmodule.c
+++ b/Mac/Modules/macmodule.c
@@ -176,7 +176,17 @@ mac_chdir(self, args)
object *self;
object *args;
{
+#ifdef USE_GUSI
+ object *rv;
+
+ /* Change MacOS's idea of wd too */
+ rv = mac_1str(args, chdir);
+ PyMac_FixGUSIcd();
+ return rv;
+#else
return mac_1str(args, chdir);
+#endif
+
}
static object *
diff --git a/Mac/Python/macglue.c b/Mac/Python/macglue.c
index dd4499e..215accc 100644
--- a/Mac/Python/macglue.c
+++ b/Mac/Python/macglue.c
@@ -51,6 +51,7 @@ OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
#endif
#ifdef USE_GUSI
#include <TFileSpec.h> /* For Path2FSSpec */
+#include <LowMem.h> /* For SetSFCurDir, etc */
#endif
#ifndef HAVE_UNIVERSAL_HEADERS
@@ -118,6 +119,34 @@ struct hook_args {
static DlgHookYDUPP myhook_upp;
static int upp_inited = 0;
+#ifdef USE_GUSI
+/*
+** GUSI (1.6.0 and earlier, at the least) do not set the MacOS idea of
+** the working directory. Hence, we call this routine after each call
+** to chdir() to rectify things.
+*/
+void
+PyMac_FixGUSIcd()
+{
+ WDPBRec pb;
+ FSSpec curdirfss;
+
+ if ( Path2FSSpec(":x", &curdirfss) != noErr )
+ return;
+
+ /* Set MacOS "working directory" */
+ pb.ioNamePtr= "\p";
+ pb.ioVRefNum= curdirfss.vRefNum;
+ pb.ioWDDirID= curdirfss.parID;
+ if (PBHSetVol(&pb, 0) != noErr)
+ return;
+
+ /* Set standard-file working directory */
+ LMSetSFSaveDisk(-curdirfss.vRefNum);
+ LMSetCurDirStore(curdirfss.parID);
+}
+#endif
+
/* Convert C to Pascal string. Returns pointer to static buffer. */
unsigned char *
@@ -657,21 +686,8 @@ PyMac_GetFSSpec(PyObject *v, FSSpec *fs)
/* It's a pathname */
if( !PyArg_Parse(v, "O&", PyMac_GetStr255, &path) )
return 0;
-#ifdef USE_GUSI
- {
- FSSpec curdirfss;
-
- if ( Path2FSSpec(":x", &curdirfss) == 0 ) {
- refnum = curdirfss.vRefNum;
- parid = curdirfss.parID;
- } else {
- return 0;
- }
- }
-#else
- refnum = 0; /* XXXX Should get CurWD here... */
+ refnum = 0; /* XXXX Should get CurWD here?? */
parid = 0;
-#endif
} else {
if( !PyArg_Parse(v, "(hlO&); FSSpec should be fullpath or (vrefnum,dirid,path)",
&refnum, &parid, PyMac_GetStr255, &path)) {
@@ -687,7 +703,6 @@ PyMac_GetFSSpec(PyObject *v, FSSpec *fs)
}
-
/* Convert a Python object to a Rect.
The object must be a (left, top, right, bottom) tuple.
(This differs from the order in the struct but is consistent with
diff --git a/Mac/Python/macmain.c b/Mac/Python/macmain.c
index 3d878ed..5cea381 100644
--- a/Mac/Python/macmain.c
+++ b/Mac/Python/macmain.c
@@ -192,6 +192,10 @@ PyMac_InitApplication()
*endp = '\0';
chdir(curwd);
+#ifdef USE_GUSI
+ /* Change MacOS's idea of wd too */
+ PyMac_FixGUSIcd();
+#endif
}
}
Py_Main(argc, argv);