Mercurial > cpython-lru_cache-weakref
diff Mac/Python/macglue.c @ 4522:d25a0ccbfd6b legacy-trunk
When loading a PYC resource check whether the filename is the
application, and if so take a shortcut. This should speedup loading
PYC resources when running off a CDROM quite a bit.
| author | Jack Jansen <jack.jansen@cwi.nl> |
|---|---|
| date | Sat, 09 Nov 1996 18:43:44 +0000 |
| parents | a240be5be6b4 |
| children | d6b292a33cfe |
line wrap: on
line diff
--- a/Mac/Python/macglue.c Sat Nov 09 18:42:13 1996 +0000 +++ b/Mac/Python/macglue.c Sat Nov 09 18:43:44 1996 +0000 @@ -579,20 +579,32 @@ 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 @@ 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 @@ } } HUnlock(h); - CloseResFile(filerh); + if ( filerh != -1 ) + CloseResFile(filerh); UseResFile(oldrh); if ( co ) { m = PyImport_ExecCodeModule(module, co);
