From 6f931e79966625e04c70e3be2aa7eb84b0864a88 Mon Sep 17 00:00:00 2001 From: Peter Jones Date: Mon, 26 Sep 2005 22:19:21 +0000 Subject: [PATCH] once more into the breach... --- python-2.4.1-canonicalize.patch | 80 +++++++++++++++++++++++---------- 1 file changed, 57 insertions(+), 23 deletions(-) diff --git a/python-2.4.1-canonicalize.patch b/python-2.4.1-canonicalize.patch index bdc631e..e42fc0e 100644 --- a/python-2.4.1-canonicalize.patch +++ b/python-2.4.1-canonicalize.patch @@ -1,5 +1,5 @@ --- Python-2.4.1/pyconfig.h.in.canonicalize 2004-10-13 11:30:55.000000000 -0400 -+++ Python-2.4.1/pyconfig.h.in 2005-09-25 16:30:43.000000000 -0400 ++++ Python-2.4.1/pyconfig.h.in 2005-09-26 16:03:35.000000000 -0400 @@ -58,6 +58,9 @@ /* Define if pthread_sigmask() does not work on your system. */ #undef HAVE_BROKEN_PTHREAD_SIGMASK @@ -11,7 +11,7 @@ #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-09-25 16:38:47.000000000 -0400 ++++ Python-2.4.1/Python/sysmodule.c 2005-09-26 16:24:37.000000000 -0400 @@ -1168,11 +1168,13 @@ void PySys_SetArgv(int argc, char **argv) @@ -26,41 +26,75 @@ PyObject *av = makeargvobject(argc, argv); PyObject *path = PySys_GetObject("path"); if (av == NULL) -@@ -1184,6 +1186,33 @@ +@@ -1184,6 +1186,67 @@ char *p = NULL; int n = 0; PyObject *a; +#ifdef HAVE_CANONICALIZE_FILE_NAME ++ char *link = NULL, *argv0copy = NULL; + int errnum; + + if (argc > 0 && argv0 != NULL) { -+ if (argv[0][0] == '\0') -+ /* python started with no arguments -+ copy the empty string and move on */ -+ argv0 = strdup(argv[0]); -+ else { -+ argv0 = canonicalize_file_name(argv[0]); -+ errnum = errno; -+ if (argv0 == NULL) { -+ if (errnum != ENOENT) -+ Py_FatalError(strerror(errnum)); ++ ++ link = canonicalize_file_name(argv0); ++ errnum = errno; ++ if (link == NULL && errno == ENOENT) { ++ link = strdup(argv0); ++ if (!link) ++ Py_FatalError("no mem for sys.argv"); ++ } ++ } + -+ /* errno == ENOENT; the input file name is -+ empty, or at least one of the path -+ components does not exist */ -+ /* strdup because we're going to free() it -+ later no matter what */ -+ argv0 = strdup(argv[0]); ++ 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 (argv0 == NULL) -+ Py_FatalError("no mem for sys.argv"); ++ } ++ 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 +1285,14 @@ +@@ -1256,9 +1319,14 @@ #endif /* Unix */ } #endif /* All others */ @@ -76,7 +110,7 @@ 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-09-25 16:30:43.000000000 -0400 ++++ Python-2.4.1/configure.in 2005-09-26 16:03:35.000000000 -0400 @@ -2096,8 +2096,8 @@ AC_MSG_RESULT(MACHDEP_OBJS)