Mac-specific mod to enable aliases on import paths.

(Jack Jansen and/or Just van Rossum)
This commit is contained in:
Guido van Rossum 1998-09-14 13:40:53 +00:00
parent ce11393136
commit a0f0a33d05
2 changed files with 35 additions and 9 deletions

View File

@ -1055,27 +1055,44 @@ check_case(char *buf, int len, int namelen, char *name)
#ifdef macintosh
#include <TextUtils.h>
#ifdef USE_GUSI
#include "TFileSpec.h" /* for Path2FSSpec() */
#endif
static int
check_case(char *buf, int len, int namelen, char *name)
{
FSSpec fss;
OSErr err;
unsigned char mybuf[MAXPATHLEN+1];
strcpy((char *)mybuf, buf);
c2pstr((char *)mybuf);
err = FSMakeFSSpec(0, 0, mybuf, &fss);
#ifndef USE_GUSI
err = FSMakeFSSpec(0, 0, Pstring(buf), &fss);
#else
/* GUSI's Path2FSSpec() resolves all possible aliases nicely on
the way, which is fine for all directories, but here we need
the original name of the alias file (say, Dlg.ppc.slb, not
toolboxmodules.ppc.slb). */
char *colon;
err = Path2FSSpec(buf, &fss);
if (err == noErr) {
colon = strrchr(buf, ':'); /* find filename */
if (colon != NULL)
err = FSMakeFSSpec(fss.vRefNum, fss.parID,
Pstring(colon+1), &fss);
else
err = FSMakeFSSpec(fss.vRefNum, fss.parID,
fss.name, &fss);
}
#endif
if (err) {
PyErr_Format(PyExc_NameError,
"Can't find file for module %.100s\n(filename %.300s)",
name, buf);
"Can't find file for module %.100s\n(filename %.300s)",
name, buf);
return 0;
}
p2cstr(fss.name);
if ( strncmp(name, (char *)fss.name, namelen) != 0 ) {
PyErr_Format(PyExc_NameError,
"Case mismatch for module name %.100s\n(filename %.300s)",
name, fss.name);
"Case mismatch for module name %.100s\n(filename %.300s)",
name, fss.name);
return 0;
}
return 1;

View File

@ -249,6 +249,9 @@ typedef void (*dl_funcptr)();
#define CFragConnectionID ConnectionID
#define kLoadCFrag 0x01
#endif
#ifdef USE_GUSI
#include "TFileSpec.h" /* for Path2FSSpec() */
#endif
#include <Files.h>
#include "macdefs.h"
#include "macglue.h"
@ -372,15 +375,21 @@ _PyImport_LoadDynamicModule(name, pathname, fp)
Ptr mainAddr;
Str255 errMessage;
OSErr err;
#ifndef USE_GUSI
Boolean isfolder, didsomething;
#endif
char buf[512];
Str63 fragname;
Ptr symAddr;
CFragSymbolClass class;
/* First resolve any aliases to find the real file */
#ifdef USE_GUSI
err = Path2FSSpec(pathname, &libspec);
#else
(void)FSMakeFSSpec(0, 0, Pstring(pathname), &libspec);
err = ResolveAliasFile(&libspec, 1, &isfolder, &didsomething);
#endif
if ( err ) {
sprintf(buf, "%.255s: %.200s",
pathname, PyMac_StrError(err));