]> granicus.if.org Git - python/commitdiff
Replaced previous gusi-chdir() fix by a call to PyMac_FixGUSIcd()
authorJack Jansen <jack.jansen@cwi.nl>
Wed, 6 Mar 1996 16:21:34 +0000 (16:21 +0000)
committerJack Jansen <jack.jansen@cwi.nl>
Wed, 6 Mar 1996 16:21:34 +0000 (16:21 +0000)
after each chdir call.

Mac/Include/macglue.h
Mac/Modules/macmodule.c
Mac/Python/macglue.c
Mac/Python/macmain.c

index 9213f2f33f67b7eff55bff9b893ba65199aeecdc..58b28e041b9fe7df31e1bd5df4b06b586094c7d3 100644 (file)
@@ -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 */
index 4190db0b80c9e764708aaf5e5c64935d843ad93d..75716db66d96db7aa5f4db1325f6f8aef2b3ee58 100644 (file)
@@ -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 *
index dd4499e32f0639eadbaf3439ff91cc0964fb29e0..215accc6932dbef9d653d5bbe28528c5ee1eed83 100644 (file)
@@ -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
index 3d878ed4328bd5f5a67c2751733c6625dc721985..5cea381b429f29d947819c4f0892e267d5736bac 100644 (file)
@@ -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);