@@ -73,30 +73,57 @@ getpreffilefss(FSSpec *fssp)
7373 static FSSpec fss ;
7474 short prefdirRefNum ;
7575 long prefdirDirID ;
76+ long pyprefdirDirID ;
7677 Handle namehandle ;
78+ OSErr err ;
7779
7880 if ( !diditbefore ) {
79- if ( FindFolder (kOnSystemDisk , 'pref' , kDontCreateFolder , & prefdirRefNum ,
80- & prefdirDirID ) != noErr ) {
81- /* Something wrong with preferences folder */
82- (void )StopAlert (NOPREFDIR_ID , NULL );
83- exit (1 );
84- }
85-
8681 if ( (namehandle = GetNamedResource ('STR ' , PREFFILENAME_NAME )) == NULL ) {
8782 (void )StopAlert (NOPREFNAME_ID , NULL );
8883 exit (1 );
8984 }
9085
91- HLock (namehandle );
9286 if ( * * namehandle == '\0' ) {
9387 /* Empty string means don't use preferences file */
9488 rv = 0 ;
9589 } else {
9690 /* There is a filename, construct the fsspec */
97- (void )FSMakeFSSpec (prefdirRefNum , prefdirDirID , (unsigned char * )* namehandle , & fss );
91+ if ( FindFolder (kOnSystemDisk , 'pref' , kDontCreateFolder , & prefdirRefNum ,
92+ & prefdirDirID ) != noErr ) {
93+ /* Something wrong with preferences folder */
94+ (void )StopAlert (NOPREFDIR_ID , NULL );
95+ exit (1 );
96+ }
97+ /* make fsspec for the "Python" folder inside the prefs folder */
98+ err = FSMakeFSSpec (prefdirRefNum , prefdirDirID , "\pPython" , & fss );
99+ if (err == fnfErr ) {
100+ /* it doesn't exist: create it */
101+ err = FSpDirCreate (& fss , smSystemScript , & pyprefdirDirID );
102+ } else {
103+ /* it does exist, now find out the dirID of the Python prefs folder, brrr. */
104+ CInfoPBRec info ;
105+ info .dirInfo .ioVRefNum = fss .vRefNum ;
106+ info .dirInfo .ioDrDirID = fss .parID ;
107+ info .dirInfo .ioNamePtr = fss .name ;
108+ info .dirInfo .ioFDirIndex = 0 ;
109+ info .dirInfo .ioACUser = 0 ;
110+ err = PBGetCatInfo (& info , 0 );
111+ if (err == noErr ) {
112+ pyprefdirDirID = info .dirInfo .ioDrDirID ;
113+ }
114+ }
115+ if (err != noErr ) {
116+ (void )StopAlert (NOPREFDIR_ID , NULL );
117+ exit (1 );
118+ }
119+ HLock (namehandle );
120+ err = FSMakeFSSpec (fss .vRefNum , pyprefdirDirID , (unsigned char * )* namehandle , & fss );
121+ HUnlock (namehandle );
122+ if (err != noErr && err != fnfErr ) {
123+ (void )StopAlert (NOPREFDIR_ID , NULL );
124+ exit (1 );
125+ }
98126 }
99- HUnlock (namehandle );
100127 ReleaseResource (namehandle );
101128 diditbefore = 1 ;
102129 }
0 commit comments