mirror of
https://github.com/python/cpython.git
synced 2025-07-23 03:05:38 +00:00
- Get preference filename from a resource
- Create the file if it doesn't exist and don't be fussy about it
This commit is contained in:
parent
d081b13c0d
commit
83c74dfa2a
1 changed files with 53 additions and 31 deletions
|
@ -34,6 +34,36 @@
|
|||
:Lib:test\n\
|
||||
:Lib:mac"
|
||||
|
||||
static void
|
||||
getpreffilefss(FSSpec *fssp)
|
||||
{
|
||||
static int diditbefore=0;
|
||||
static FSSpec fss;
|
||||
short prefdirRefNum;
|
||||
long prefdirDirID;
|
||||
Handle namehandle;
|
||||
|
||||
if ( !diditbefore ) {
|
||||
if ( FindFolder(kOnSystemDisk, 'pref', kDontCreateFolder, &prefdirRefNum,
|
||||
&prefdirDirID) != noErr ) {
|
||||
/* Something wrong with preferences folder */
|
||||
(void)StopAlert(NOPREFDIR_ID, NULL);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
if ( (namehandle=GetNamedResource('STR ', PREFFILENAME_NAME)) == NULL ) {
|
||||
(void)StopAlert(NOPREFNAME_ID, NULL);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
HLock(namehandle);
|
||||
(void)FSMakeFSSpec(prefdirRefNum, prefdirDirID, (unsigned char *)*namehandle, &fss);
|
||||
HUnlock(namehandle);
|
||||
ReleaseResource(namehandle);
|
||||
diditbefore = 1;
|
||||
}
|
||||
*fssp = fss;
|
||||
}
|
||||
|
||||
char *
|
||||
Py_GetPath()
|
||||
|
@ -44,21 +74,21 @@ Py_GetPath()
|
|||
** - Add :
|
||||
*/
|
||||
static char *pythonpath;
|
||||
char *curwd;
|
||||
char *p, *endp;
|
||||
int newlen;
|
||||
char *curwd;
|
||||
staticforward char *PyMac_GetPythonDir();
|
||||
#ifndef USE_BUILTIN_PATH
|
||||
staticforward char *PyMac_GetPythonPath();
|
||||
#endif
|
||||
|
||||
if ( pythonpath ) return pythonpath;
|
||||
curwd = PyMac_GetPythonDir();
|
||||
#ifndef USE_BUILTIN_PATH
|
||||
if ( pythonpath = PyMac_GetPythonPath(curwd) )
|
||||
if ( pythonpath = PyMac_GetPythonPath() )
|
||||
return pythonpath;
|
||||
printf("Warning: No pythonpath resource found, using builtin default\n");
|
||||
#endif
|
||||
curwd = PyMac_GetPythonDir();
|
||||
p = PYTHONPATH;
|
||||
endp = p;
|
||||
pythonpath = malloc(2);
|
||||
|
@ -90,6 +120,7 @@ Py_GetPath()
|
|||
return pythonpath;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
** Open/create the Python Preferences file, return the handle
|
||||
*/
|
||||
|
@ -99,25 +130,16 @@ PyMac_OpenPrefFile()
|
|||
AliasHandle handle;
|
||||
FSSpec dirspec;
|
||||
short prefrh;
|
||||
short prefdirRefNum;
|
||||
long prefdirDirID;
|
||||
short action;
|
||||
OSErr err;
|
||||
|
||||
if ( FindFolder(kOnSystemDisk, 'pref', kDontCreateFolder, &prefdirRefNum,
|
||||
&prefdirDirID) != noErr ) {
|
||||
/* Something wrong with preferences folder */
|
||||
(void)StopAlert(NOPREFDIR_ID, NULL);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
(void)FSMakeFSSpec(prefdirRefNum, prefdirDirID, "\pPython Preferences", &dirspec);
|
||||
getpreffilefss(&dirspec);
|
||||
prefrh = FSpOpenResFile(&dirspec, fsRdWrShPerm);
|
||||
if ( prefrh < 0 ) {
|
||||
#if 0
|
||||
action = CautionAlert(NOPREFFILE_ID, NULL);
|
||||
if ( action == NOPREFFILE_NO )
|
||||
exit(1);
|
||||
|
||||
#endif
|
||||
FSpCreateResFile(&dirspec, 'Pyth', 'pref', 0);
|
||||
prefrh = FSpOpenResFile(&dirspec, fsRdWrShPerm);
|
||||
if ( prefrh == -1 ) {
|
||||
|
@ -149,12 +171,16 @@ PyMac_OpenPrefFile()
|
|||
static char *
|
||||
PyMac_GetPythonDir()
|
||||
{
|
||||
static char name[256];
|
||||
static int diditbefore = 0;
|
||||
static char name[256] = {':', '\0'};
|
||||
AliasHandle handle;
|
||||
FSSpec dirspec;
|
||||
Boolean modified = 0;
|
||||
short oldrh, prefrh = -1, homerh;
|
||||
|
||||
if ( diditbefore )
|
||||
return name;
|
||||
|
||||
oldrh = CurResFile();
|
||||
|
||||
/* First look for an override in the application file */
|
||||
|
@ -168,14 +194,16 @@ PyMac_GetPythonDir()
|
|||
handle = (AliasHandle)Get1Resource('alis', PYTHONHOME_ID);
|
||||
if ( handle == NULL ) {
|
||||
(void)StopAlert(BADPREFFILE_ID, NULL);
|
||||
exit(1);
|
||||
diditbefore=1;
|
||||
return ":";
|
||||
}
|
||||
homerh = prefrh;
|
||||
}
|
||||
/* It exists. Resolve it (possibly updating it) */
|
||||
if ( ResolveAlias(NULL, handle, &dirspec, &modified) != noErr ) {
|
||||
(void)StopAlert(BADPREFFILE_ID, NULL);
|
||||
exit(1);
|
||||
diditbefore=1;
|
||||
return ":";
|
||||
}
|
||||
if ( modified ) {
|
||||
ChangedResource((Handle)handle);
|
||||
|
@ -192,18 +220,16 @@ PyMac_GetPythonDir()
|
|||
name[0] = 0;
|
||||
(void)getwd(name);
|
||||
}
|
||||
diditbefore = 1;
|
||||
return name;
|
||||
}
|
||||
|
||||
#ifndef USE_BUILTIN_PATH
|
||||
static char *
|
||||
PyMac_GetPythonPath(dir)
|
||||
char *dir;
|
||||
PyMac_GetPythonPath()
|
||||
{
|
||||
FSSpec dirspec;
|
||||
short oldrh, prefrh = -1;
|
||||
short prefdirRefNum;
|
||||
long prefdirDirID;
|
||||
char *rv;
|
||||
int i, newlen;
|
||||
Str255 pathitem;
|
||||
|
@ -228,15 +254,9 @@ char *dir;
|
|||
SetResLoad(1);
|
||||
UseResFile(oldrh);
|
||||
|
||||
/*
|
||||
** Remember old resource file and try to open preferences file
|
||||
** in the preferences folder.
|
||||
*/
|
||||
if ( FindFolder(kOnSystemDisk, 'pref', kDontCreateFolder, &prefdirRefNum,
|
||||
&prefdirDirID) == noErr ) {
|
||||
(void)FSMakeFSSpec(prefdirRefNum, prefdirDirID, "\pPython Preferences", &dirspec);
|
||||
prefrh = FSpOpenResFile(&dirspec, fsRdWrShPerm);
|
||||
}
|
||||
/* Open the preferences file only if there is no override */
|
||||
if ( resource_id != PYTHONPATHOVERRIDE_ID )
|
||||
prefrh = PyMac_OpenPrefFile();
|
||||
/* At this point, we may or may not have the preferences file open, and it
|
||||
** may or may not contain a sys.path STR# resource. We don't care, if it doesn't
|
||||
** exist we use the one from the application (the default).
|
||||
|
@ -252,6 +272,8 @@ char *dir;
|
|||
break;
|
||||
if ( pathitem[0] >= 9 && strncmp((char *)pathitem+1, "$(PYTHON)", 9) == 0 ) {
|
||||
/* We have to put the directory in place */
|
||||
char *dir = PyMac_GetPythonDir();
|
||||
|
||||
newlen = strlen(rv) + strlen(dir) + (pathitem[0]-9) + 2;
|
||||
if( (rv=realloc(rv, newlen)) == NULL)
|
||||
goto out;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue