+++ /dev/null
---- Python-2.4.1/pyconfig.h.in.canonicalize 2004-10-13 11:30:55.000000000 -0400
-+++ Python-2.4.1/pyconfig.h.in 2005-10-06 14:04:06.000000000 -0400
-@@ -58,6 +58,9 @@
- /* Define if pthread_sigmask() does not work on your system. */
- #undef HAVE_BROKEN_PTHREAD_SIGMASK
-
-+/* Define to 1 if you have the `canonicalize_file_name' function. */
-+#undef HAVE_CANONICALIZE_FILE_NAME
-+
- /* Define to 1 if you have the `chown' function. */
- #undef HAVE_CHOWN
-
---- Python-2.4.1/Python/sysmodule.c.canonicalize 2005-01-27 13:58:30.000000000 -0500
-+++ Python-2.4.1/Python/sysmodule.c 2005-10-06 14:56:37.000000000 -0400
-@@ -1168,11 +1168,13 @@
- void
- PySys_SetArgv(int argc, char **argv)
- {
-+#ifndef HAVE_CANONICALIZE_FILE_NAME
- #if defined(HAVE_REALPATH)
- char fullpath[MAXPATHLEN];
- #elif defined(MS_WINDOWS)
- char fullpath[MAX_PATH];
- #endif
-+#endif
- PyObject *av = makeargvobject(argc, argv);
- PyObject *path = PySys_GetObject("path");
- if (av == NULL)
-@@ -1184,6 +1186,64 @@
- char *p = NULL;
- int n = 0;
- PyObject *a;
-+#ifdef HAVE_CANONICALIZE_FILE_NAME
-+ char *link = NULL, *argv0copy = NULL;
-+
-+ if (argc > 0 && argv0 != NULL) {
-+
-+ link = canonicalize_file_name(argv0);
-+ if (link == NULL) {
-+ link = strdup(argv0);
-+ if (!link)
-+ Py_FatalError("no mem for sys.argv");
-+ }
-+ }
-+ if (link) {
-+ if (link[0] == SEP) /* Link to absolute path */
-+ argv0 = link;
-+ else if (strchr(link, SEP) == NULL) {
-+ /* Link without path */
-+ /* strdup argv0 so we can free it
-+ unconditionally */
-+ argv0 = strdup(argv0);
-+ if (!argv0)
-+ Py_FatalError("no mem for sys.argv");
-+ free(link);
-+ } else {
-+ /* Must join(dirname(argv0), link) */
-+ char *q = strrchr(argv0, SEP);
-+ if (q == NULL) /* argv0 without path */
-+ argv0 = link;
-+ else {
-+ /* Must make a copy */
-+ argv0copy = calloc(
-+ strlen(link) + strlen(q) +1,
-+ sizeof (char));
-+ if (!argv0copy)
-+ Py_FatalError("no mem for sys.argv");
-+ strcpy(argv0copy, argv0);
-+ q = strrchr(argv0copy, SEP);
-+ strcpy(argv0copy+1, link);
-+ argv0 = argv0copy;
-+ p = NULL;
-+ free(link);
-+ }
-+ }
-+ }
-+ if (argc > 0 && argv0 != NULL) {
-+ char *q;
-+ p = strrchr(argv0, SEP);
-+ /* Test for alternate separator */
-+ q = strrchr(p ? p : argv0, '/');
-+ if (q != NULL)
-+ p = q;
-+ if (p != NULL) {
-+ n = p + 1 - argv0;
-+ if (n > 1 && p[-1] != ':')
-+ n--; /* Drop trailing separator */
-+ }
-+ }
-+#else /* ! HAVE_CANONICALIZE_FILE_NAME */
- #ifdef HAVE_READLINK
- char link[MAXPATHLEN+1];
- char argv0copy[2*MAXPATHLEN+1];
-@@ -1256,9 +1316,14 @@
- #endif /* Unix */
- }
- #endif /* All others */
-+#endif /* ! HAVE_CANONICALIZE_FILE_NAME */
- a = PyString_FromStringAndSize(argv0, n);
- if (a == NULL)
- Py_FatalError("no mem for sys.path insertion");
-+#ifdef HAVE_CANONICALIZE_FILE_NAME
-+ if (argc > 0 && argv0 != NULL)
-+ free(argv0);
-+#endif /* HAVE_CANONICALIZE_FILE_NAME */
- if (PyList_Insert(path, 0, a) < 0)
- Py_FatalError("sys.path.insert(0) failed");
- Py_DECREF(a);
---- Python-2.4.1/configure.in.canonicalize 2005-03-28 18:23:34.000000000 -0500
-+++ Python-2.4.1/configure.in 2005-10-06 14:04:06.000000000 -0400
-@@ -2096,8 +2096,8 @@
- AC_MSG_RESULT(MACHDEP_OBJS)
-
- # checks for library functions
--AC_CHECK_FUNCS(alarm bind_textdomain_codeset chown clock confstr ctermid \
-- execv fork fpathconf ftime ftruncate \
-+AC_CHECK_FUNCS(alarm bind_textdomain_codeset canonicalize_file_name chown \
-+ clock confstr ctermid execv fork fpathconf ftime ftruncate \
- gai_strerror getgroups getlogin getloadavg getpeername getpgid getpid \
- getpriority getpwent getsid getwd \
- kill killpg lchown lstat mkfifo mknod mktime \