]> granicus.if.org Git - python/commitdiff
When loading a PYC resource check whether the filename is the
authorJack Jansen <jack.jansen@cwi.nl>
Sat, 9 Nov 1996 18:43:44 +0000 (18:43 +0000)
committerJack Jansen <jack.jansen@cwi.nl>
Sat, 9 Nov 1996 18:43:44 +0000 (18:43 +0000)
application, and if so take a shortcut. This should speedup loading
PYC resources when running off a CDROM quite a bit.

Mac/Python/macglue.c

index f996f4a6fd54fb6c8c69f4959edb18ded28e0531..895002002b6b539a6f3b23cd9d17305426c52f53 100644 (file)
@@ -579,20 +579,32 @@ char *filename;
        int ok;
        Handle h;
        
-       if ( FSMakeFSSpec(0, 0, Pstring(filename), &fss) != noErr )
-               return 0;                       /* It doesn't exist */
-       if ( FSpGetFInfo(&fss, &finfo) != noErr )
-               return 0;                       /* shouldn't happen, I guess */
-       oldrh = CurResFile();
-       filerh = FSpOpenResFile(&fss, fsRdPerm);
-       if ( filerh == -1 )
-               return 0;
-       UseResFile(filerh);
+       if ( strcmp(filename, PyMac_ApplicationPath) == 0 ) {
+               /*
+               ** Special case: the application itself. Use a shortcut to
+               ** forestall opening and closing the application numerous times
+               ** (which is dead slow when running from CDROM)
+               */
+               oldrh = CurResFile();
+               UseResFile(PyMac_AppRefNum);
+               filerh = -1;
+       } else {
+               if ( FSMakeFSSpec(0, 0, Pstring(filename), &fss) != noErr )
+                       return 0;                       /* It doesn't exist */
+               if ( FSpGetFInfo(&fss, &finfo) != noErr )
+                       return 0;                       /* shouldn't happen, I guess */
+               oldrh = CurResFile();
+               filerh = FSpOpenResFile(&fss, fsRdPerm);
+               if ( filerh == -1 )
+                       return 0;
+               UseResFile(filerh);
+       }
        SetResLoad(0);
        h = Get1NamedResource('PYC ', Pstring(module));
        SetResLoad(1);
        ok = (h != NULL);
-       CloseResFile(filerh);
+       if ( filerh != -1 )
+               CloseResFile(filerh);
        UseResFile(oldrh);
        return ok;
 }
@@ -613,17 +625,28 @@ char *filename;
        PyObject *m, *co;
        long num, size;
        
-       if ( (err=FSMakeFSSpec(0, 0, Pstring(filename), &fss)) != noErr )
-               goto error;
-       if ( (err=FSpGetFInfo(&fss, &finfo)) != noErr )
-               goto error;
-       oldrh = CurResFile();
-       filerh = FSpOpenResFile(&fss, fsRdPerm);
-       if ( filerh == -1 ) {
-               err = ResError();
-               goto error;
+       if ( strcmp(filename, PyMac_ApplicationPath) == 0 ) {
+               /*
+               ** Special case: the application itself. Use a shortcut to
+               ** forestall opening and closing the application numerous times
+               ** (which is dead slow when running from CDROM)
+               */
+               oldrh = CurResFile();
+               UseResFile(PyMac_AppRefNum);
+               filerh = -1;
+       } else {
+               if ( (err=FSMakeFSSpec(0, 0, Pstring(filename), &fss)) != noErr )
+                       goto error;
+               if ( (err=FSpGetFInfo(&fss, &finfo)) != noErr )
+                       goto error;
+               oldrh = CurResFile();
+               filerh = FSpOpenResFile(&fss, fsRdPerm);
+               if ( filerh == -1 ) {
+                       err = ResError();
+                       goto error;
+               }
+               UseResFile(filerh);
        }
-       UseResFile(filerh);
        h = Get1NamedResource('PYC ', Pstring(module));
        if ( h == NULL ) {
                err = ResError();
@@ -651,7 +674,8 @@ char *filename;
                }
        }
        HUnlock(h);
-       CloseResFile(filerh);
+       if ( filerh != -1 )
+               CloseResFile(filerh);
        UseResFile(oldrh);
        if ( co ) {
                m = PyImport_ExecCodeModule(module, co);