diff --git a/Mac/Include/macglue.h b/Mac/Include/macglue.h
index 8057c28..eb0c9a1 100644
--- a/Mac/Include/macglue.h
+++ b/Mac/Include/macglue.h
@@ -62,7 +62,6 @@
 extern FSSpec PyMac_ApplicationFSSpec;		/* Application location (from macargv.c) */
 extern char PyMac_ApplicationPath[];		/* Application location (from macargv.c) */
 extern OSErr PyMac_init_application_location(void);	/* Init the above */
-extern OSErr PyMac_GetFullPath(FSSpec *, char *); /* convert fsspec->path (macargv.c) */
 extern int PyMac_GetArgv(char ***, int);	/* Get argc, argv (from macargv.c) */
 extern int PyMac_AppearanceCompliant;	/* True if in appearance support mode */
 
diff --git a/Mac/Modules/macfsmodule.c b/Mac/Modules/macfsmodule.c
index 2c20e89..15d9f30 100644
--- a/Mac/Modules/macfsmodule.c
+++ b/Mac/Modules/macfsmodule.c
@@ -51,6 +51,12 @@
 #endif
 static PyObject *ErrorObject;
 
+#ifdef TARGET_API_MAC_OSX
+#define PATHNAMELEN 1024
+#else
+#define PATHNAMELEN 256
+#endif
+
 /* ----------------------------------------------------- */
 /* Declarations for objects of type Alias */
 
@@ -449,22 +455,17 @@
 static PyObject *
 mfss_as_pathname(mfssobject *self, PyObject *args)
 {
-#if TARGET_API_MAC_OSX
-	PyErr_SetString(PyExc_NotImplementedError, "FSSpec.as_pathname not supported on this platform");
-	return 0;
-#else
-	char strbuf[257];
+	char strbuf[PATHNAMELEN];
 	OSErr err;
 
 	if (!PyArg_ParseTuple(args, ""))
 		return NULL;
-	err = PyMac_GetFullPath(&self->fsspec, strbuf);
+	err = PyMac_GetFullPathname(&self->fsspec, strbuf, PATHNAMELEN);
 	if ( err ) {
 		PyErr_Mac(ErrorObject, err);
 		return NULL;
 	}
 	return PyString_FromString(strbuf);
-#endif
 }
 
 static PyObject *
diff --git a/Mac/Modules/macosmodule.c b/Mac/Modules/macosmodule.c
index 0b8d856..6b8b87d 100644
--- a/Mac/Modules/macosmodule.c
+++ b/Mac/Modules/macosmodule.c
@@ -40,6 +40,12 @@
 
 static PyObject *MacOS_Error; /* Exception MacOS.Error */
 
+#ifdef TARGET_API_MAC_OSX
+#define PATHNAMELEN 1024
+#else
+#define PATHNAMELEN 256
+#endif
+
 #ifdef MPW
 #define bufferIsSmall -607	/*error returns from Post and Accept */
 #endif
@@ -596,15 +602,14 @@
 		
 	err = HOpenRF(fss.vRefNum, fss.parID, fss.name, permission, &fp->fRefNum);
 	
-#if !TARGET_API_MAC_OSX
 	if ( err == fnfErr ) {
 		/* In stead of doing complicated things here to get creator/type
 		** correct we let the standard i/o library handle it
 		*/
 		FILE *tfp;
-		char pathname[257];
+		char pathname[PATHNAMELEN];
 		
-		if ( err=PyMac_GetFullPath(&fss, pathname) ) {
+		if ( err=PyMac_GetFullPathname(&fss, pathname, PATHNAMELEN) ) {
 			PyMac_Error(err);
 			Py_DECREF(fp);
 			return NULL;
@@ -618,7 +623,6 @@
 		fclose(tfp);
 		err = HOpenRF(fss.vRefNum, fss.parID, fss.name, permission, &fp->fRefNum);
 	}
-#endif
 	if ( err ) {
 		Py_DECREF(fp);
 		PyMac_Error(err);
diff --git a/Mac/Python/macgetargv.c b/Mac/Python/macgetargv.c
index c5af0ec..8fdbad5 100644
--- a/Mac/Python/macgetargv.c
+++ b/Mac/Python/macgetargv.c
@@ -54,10 +54,16 @@
 #include "Python.h"
 #include "macglue.h"
 
+#ifdef TARGET_API_MAC_OSX
+#define PATHNAMELEN 1024
+#else
+#define PATHNAMELEN 256
+#endif
+
 static int arg_count;
 static char *arg_vector[256];
 FSSpec PyMac_ApplicationFSSpec;
-char PyMac_ApplicationPath[256];
+char PyMac_ApplicationPath[PATHNAMELEN];
 
 /* Duplicate a string to the heap. We also export this since it isn't standard
 ** and others use it
@@ -73,22 +79,6 @@
 }
 #endif
 
-#if TARGET_API_MAC_OSX
-OSErr
-PyMac_GetFullPath(FSSpec *fss, char *path)
-{
-	FSRef fsr;
-	OSErr err;
-	
-	*path = '\0';
-	err = FSpMakeFSRef(fss, &fsr);
-	if ( err ) return err;
-	err = (OSErr)FSRefMakePath(&fsr, path, 1024);
-	if ( err ) return err;
-	return 0;
-}
-#endif /* TARGET_API_MAC_OSX */
-
 
 #if !TARGET_API_MAC_OSX
 /* Initialize FSSpec and full name of current application */
@@ -109,7 +99,7 @@
 	info.processAppSpec = &PyMac_ApplicationFSSpec;
 	if ( err=GetProcessInformation(&currentPSN, &info))
 		return err;
-	if ( err=PyMac_GetFullPath(&PyMac_ApplicationFSSpec, PyMac_ApplicationPath) )
+	if ( err=PyMac_GetFullPathname(&PyMac_ApplicationFSSpec, PyMac_ApplicationPath, PATHNAMELEN) )
 		return err;
 	applocation_inited = 1;
 	return 0;
@@ -170,7 +160,7 @@
 	DescType rttype;
 	long i, ndocs, size;
 	FSSpec fss;
-	char path[1024];
+	char path[PATHNAMELEN];
 	
 	got_one = 1;
 	if ((err = AEGetParamDesc(theAppleEvent,
@@ -185,7 +175,7 @@
 				  &keywd, &rttype, &fss, sizeof(fss), &size);
 		if (err)
 			break;
-		PyMac_GetFullPath(&fss, path);
+		PyMac_GetFullPathname(&fss, path, PATHNAMELEN);
 		arg_vector[arg_count++] = strdup(path);
 	}
 	return err;
diff --git a/Mac/Python/macgetpath.c b/Mac/Python/macgetpath.c
index 83117ed..e087023 100644
--- a/Mac/Python/macgetpath.c
+++ b/Mac/Python/macgetpath.c
@@ -38,6 +38,11 @@
 #include <unistd.h>
 #endif
 
+#ifdef TARGET_API_MAC_OSX
+#define PATHNAMELEN 1024
+#else
+#define PATHNAMELEN 256
+#endif
 
 /* Return the initial python search path.  This is called once from
 ** initsys() to initialize sys.path.
@@ -244,7 +249,7 @@
 PyMac_GetPythonDir()
 {
 	static int diditbefore = 0;
-	static char name[256] = {':', '\0'};
+	static char name[PATHNAMELEN] = {':', '\0'};
 	AliasHandle handle;
 	FSSpec dirspec;
 	Boolean modified = 0;
@@ -285,7 +290,7 @@
 	if ( prefrh != -1 ) CloseResFile(prefrh);
 	UseResFile(oldrh);
 
-   	if ( PyMac_GetFullPath(&dirspec, name) == 0 ) {
+   	if ( PyMac_GetFullPathname(&dirspec, name, PATHNAMELEN) == 0 ) {
    		strcat(name, ":");
 	} else {
  		/* If all fails, we return the current directory */
diff --git a/Python/mactoolboxglue.c b/Python/mactoolboxglue.c
index 0781a3b..52ff00b 100644
--- a/Python/mactoolboxglue.c
+++ b/Python/mactoolboxglue.c
@@ -93,7 +93,7 @@
 
 /* Initialize and return PyMac_OSErrException */
 PyObject *
-PyMac_GetOSErrException()
+PyMac_GetOSErrException(void)
 {
 	if (PyMac_OSErrException == NULL)
 		PyMac_OSErrException = PyString_FromString("MacOS.Error");
@@ -127,6 +127,46 @@
 	return PyErr_Mac(PyMac_GetOSErrException(), err);
 }
 
+
+#if TARGET_API_MAC_OSX
+OSErr
+PyMac_GetFullPathname(FSSpec *fss, char *path, int len)
+{
+	FSRef fsr;
+	OSErr err;
+	
+	*path = '\0';
+	err = FSpMakeFSRef(fss, &fsr);
+	if ( err == fnfErr ) {
+		/* FSSpecs can point to non-existing files, fsrefs can't. */
+		FSSpec fss2;
+		int tocopy;
+		
+		err = FSMakeFSSpec(fss->vRefNum, fss->parID, "", &fss2);
+		if ( err ) return err;
+		err = FSpMakeFSRef(&fss2, &fsr);
+		if ( err ) return err;
+		err = (OSErr)FSRefMakePath(&fsr, path, len-1);
+		if ( err ) return err;
+		/* This part is not 100% safe: we append the filename part, but
+		** I'm not sure that we don't run afoul of the various 8bit
+		** encodings here. Will have to look this up at some point...
+		*/
+		strcat(path, "/");
+		tocopy = fss->name[0];
+		if ( strlen(path) + tocopy >= len )
+			tocopy = len - strlen(path) - 1;
+		if ( tocopy > 0 )
+			strncat(path, fss->name+1, tocopy);
+	} else {
+		if ( err ) return err;
+		err = (OSErr)FSRefMakePath(&fsr, path, len);
+		if ( err ) return err;
+	}
+	return 0;
+}
+
+#endif /* TARGET_API_MAC_OSX */
 /* Convert a 4-char string object argument to an OSType value */
 int
 PyMac_GetOSType(PyObject *v, OSType *pr)
