]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Got rid of nfullpath in favor of PyMac_GetFullPath (which was pretty
authorJack Jansen <jack.jansen@cwi.nl>
Sat, 9 Nov 1996 18:45:18 +0000 (18:45 +0000)
committerJack Jansen <jack.jansen@cwi.nl>
Sat, 9 Nov 1996 18:45:18 +0000 (18:45 +0000)
much identical anyway).
Initialize PyMac_ApplicationPath and PyMac_ApplicationFSSpec to point
to the current application.

Mac/Python/macgetargv.c
Mac/Python/macgetpath.c

index e0ecb8eeaae15a64632a84c422eda3b597970016..c1d1e3edef08a1448934705c277611aa1524b7cf 100644 (file)
@@ -46,6 +46,9 @@ OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 #include <Dialogs.h>
 #include <Windows.h>
 
+#include "Python.h"
+#include "macglue.h"
+
 #ifdef GENERATINGCFM   /* Defined to 0 or 1 in Universal headers */
 #define HAVE_UNIVERSAL_HEADERS
 #endif
@@ -61,6 +64,9 @@ OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 
 static int arg_count;
 static char *arg_vector[256];
+FSSpec PyMac_ApplicationFSSpec;
+char PyMac_ApplicationPath[256];
+static int applocation_inited;
 
 /* Duplicate a string to the heap. We also export this since it isn't standard
 ** and others use it
@@ -75,20 +81,27 @@ strdup(char *src)
        return dst;
 }
 
-/* Return FSSpec of current application */
+/* Initialize FSSpec and full name of current application */
 
 OSErr
-PyMac_process_location(FSSpec *applicationSpec)
+PyMac_init_process_location()
 {
        ProcessSerialNumber currentPSN;
        ProcessInfoRec info;
+       OSErr err;
        
+       if ( applocation_inited ) return 0;
        currentPSN.highLongOfPSN = 0;
        currentPSN.lowLongOfPSN = kCurrentProcess;
        info.processInfoLength = sizeof(ProcessInfoRec);
        info.processName = NULL;
-       info.processAppSpec = applicationSpec;
-       return GetProcessInformation(&currentPSN, &info);
+       info.processAppSpec = &PyMac_ApplicationFSSpec;
+       if ( err=GetProcessInformation(&currentPSN, &info))
+               return err;
+       if ( err=PyMac_GetFullPath(&PyMac_ApplicationFSSpec, PyMac_ApplicationPath) )
+               return err;
+       applocation_inited = 1;
+       return 0;
 }
 
 /* Given an FSSpec, return the FSSpec of the parent folder */
@@ -114,8 +127,8 @@ get_folder_parent (FSSpec * fss, FSSpec * parent)
 
 /* Given an FSSpec return a full, colon-separated pathname */
 
-static OSErr
-get_full_path (FSSpec *fss, char *buf)
+OSErr
+PyMac_GetFullPath (FSSpec *fss, char *buf)
 {
        short err;
        FSSpec fss_parent, fss_current;
@@ -146,21 +159,6 @@ get_full_path (FSSpec *fss, char *buf)
         return 0;
 }
 
-/* Return the full program name */
-
-static char *
-get_application_name()
-{
-       static char appname[256];
-       FSSpec appspec;
-       
-       if (PyMac_process_location(&appspec))
-               return NULL;
-       if (get_full_path(&appspec, appname))
-               return NULL;
-       return appname;
-}
-
 /* Check that there aren't any args remaining in the event */
 
 static OSErr 
@@ -230,7 +228,7 @@ handle_open_doc(AppleEvent *theAppleEvent, AppleEvent *reply, long refCon)
                                  &keywd, &rttype, &fss, sizeof(fss), &size);
                if (err)
                        break;
-               get_full_path(&fss, path);
+               PyMac_GetFullPath(&fss, path);
                arg_vector[arg_count++] = strdup(path);
        }
        return err;
@@ -301,7 +299,8 @@ PyMac_GetArgv(pargv, noevents)
 {
        
        arg_count = 0;
-       arg_vector[arg_count++] = strdup(get_application_name());
+       (void)PyMac_init_process_location();
+       arg_vector[arg_count++] = strdup(PyMac_ApplicationPath);
        
        if( !noevents ) {
                set_ae_handlers();
index a7c1366eb837c0a11d2a3fed1dc6ca3d6679d763..11eea575fe8262bb912d547c5816fd867c608b75 100644 (file)
@@ -147,10 +147,11 @@ PyMac_OpenPrefFile()
                        printf("Cannot create preferences file, error %d\n", ResError());
                        exit(1);
                }
-               if ( (err=PyMac_process_location(&dirspec)) != 0 ) {
-                       printf("Cannot get FSSpec for application, error %d\n", err);
+               if ( (err=PyMac_init_process_location()) != 0 ) {
+                       printf("Cannot get application location, error %d\n", err);
                        exit(1);
                }
+               dirspec = PyMac_ApplicationFSSpec;
                dirspec.name[0] = 0;
                if ((err=NewAlias(NULL, &dirspec, &handle)) != 0 ) {
                        printf("Cannot make alias to application directory, error %d\n", err);
@@ -212,7 +213,7 @@ PyMac_GetPythonDir()
     if ( prefrh != -1 ) CloseResFile(prefrh);
     UseResFile(oldrh);
 
-       if ( nfullpath(&dirspec, name) == 0 ) {
+       if ( PyMac_GetFullPath(&dirspec, name) == 0 ) {
                strcat(name, ":");
     } else {
                /* If all fails, we return the current directory */
@@ -228,7 +229,6 @@ PyMac_GetPythonDir()
 static char *
 PyMac_GetPythonPath()
 {
-    FSSpec dirspec;
     short oldrh, prefrh = -1;
     char *rv;
     int i, newlen;
@@ -289,20 +289,16 @@ PyMac_GetPythonPath()
                rv[newlen-1] = 0;
        } else if ( pathitem[0] >= 14 && strncmp((char *)pathitem+1, "$(APPLICATION)", 14) == 0 ) {
                /* This is the application itself */
-                       char fullname[256];
                        
-               if ( (err=PyMac_process_location(&dirspec)) != 0 ) {
-                               printf("Cannot get FSSpec for application, error %d\n", err);
-                               exit(1);
-                       }
-                       if ( nfullpath(&dirspec, fullname) != 0 ) {
-                               printf("Cannot convert application fsspec to path\n");
+               if ( (err=PyMac_init_process_location()) != 0 ) {
+                               printf("Cannot get  application location, error %d\n", err);
                                exit(1);
                        }
-                       newlen = strlen(rv) + strlen(fullname) + 2;
+
+                       newlen = strlen(rv) + strlen(PyMac_ApplicationPath) + 2;
                if( (rv=realloc(rv, newlen)) == NULL)
                        goto out;
-               strcpy(rv+strlen(rv), fullname);
+               strcpy(rv+strlen(rv), PyMac_ApplicationPath);
                rv[newlen-2] = '\n';
                rv[newlen-1] = 0;