]> granicus.if.org Git - python/commitdiff
Patch #567296 by Pim Buurman, slightly modified by me so it can be disabled
authorJack Jansen <jack.jansen@cwi.nl>
Tue, 6 Aug 2002 12:59:44 +0000 (12:59 +0000)
committerJack Jansen <jack.jansen@cwi.nl>
Tue, 6 Aug 2002 12:59:44 +0000 (12:59 +0000)
at compile time: use PBGetCatInfoSync() to get FInfo data in stead of
GetFInfo. The latter doesn't work for folders. The former does, at
least on OSX, and insofar the info makes sense for a folder.

Mac/Modules/macfsmodule.c

index 488dd7e678f852832b0a0d3e2d98bff0262d4643..f8c3428ce73cc220a54e6bc1493f238f2d200b73 100644 (file)
@@ -39,6 +39,13 @@ OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 
 #include "getapplbycreator.h"
 
+/*
+** The next define uses PBGetCatInfoSync for GetFInfo, allowing you
+** to get FInfo for folders. This works on OSX, but it may result
+** in problems on OS9, hence the define (for the time being).
+*/
+#define USE_CATINFO_FOR_FINFO
+
 #ifndef TARGET_API_MAC_OSX
 #include "pythonresources.h"
 extern PyMac_PrefRecord PyMac_options;
@@ -592,18 +599,33 @@ mfss_GetFInfo(mfssobject *self, PyObject *args)
 {
        OSErr err;
        mfsiobject *fip;
-       
-       
+       CInfoPBRec pb;
+       FSSpec* fss = &self->fsspec;
+
        if (!PyArg_ParseTuple(args, ""))
                return NULL;
        if ( (fip=newmfsiobject()) == NULL )
                return NULL;
+#ifdef USE_CATINFO_FOR_FINFO
+       pb.dirInfo.ioNamePtr = fss->name;
+       pb.dirInfo.ioFDirIndex = 0;
+       pb.dirInfo.ioVRefNum = fss->vRefNum;
+       pb.dirInfo.ioDrDirID = fss->parID;
+       err = PBGetCatInfoSync(&pb);
+       if ( err ) {
+               PyErr_Mac(ErrorObject, err);
+               Py_DECREF(fip);
+               return NULL;
+       }
+       memcpy(&fip->finfo, &pb.hFileInfo.ioFlFndrInfo, sizeof(FileInfo));
+#else
        err = FSpGetFInfo(&self->fsspec, &fip->finfo);
        if ( err ) {
                PyErr_Mac(ErrorObject, err);
                Py_DECREF(fip);
                return NULL;
        }
+#endif
        return (PyObject *)fip;
 }