Skip to content
Projeler
Gruplar
Parçacıklar
Yardım
Yükleniyor...
Oturum aç / Kaydol
Gezinmeyi değiştir
C
cpython
Proje
Proje
Ayrıntılar
Etkinlik
Cycle Analytics
Depo (repository)
Depo (repository)
Dosyalar
Kayıtlar (commit)
Dallar (branch)
Etiketler
Katkıda bulunanlar
Grafik
Karşılaştır
Grafikler
Konular (issue)
0
Konular (issue)
0
Liste
Pano
Etiketler
Kilometre Taşları
Birleştirme (merge) Talepleri
0
Birleştirme (merge) Talepleri
0
CI / CD
CI / CD
İş akışları (pipeline)
İşler
Zamanlamalar
Grafikler
Paketler
Paketler
Wiki
Wiki
Parçacıklar
Parçacıklar
Üyeler
Üyeler
Collapse sidebar
Close sidebar
Etkinlik
Grafik
Grafikler
Yeni bir konu (issue) oluştur
İşler
Kayıtlar (commit)
Konu (issue) Panoları
Kenar çubuğunu aç
Batuhan Osman TASKAYA
cpython
Commits
edabdc1e
Kaydet (Commit)
edabdc1e
authored
Tem 08, 2000
tarafından
Fred Drake
Dosyalara gözat
Seçenekler
Dosyalara Gözat
İndir
Eposta Yamaları
Sade Fark
ANSI-fied sources, converted to four-space indentation.
üst
da940d8f
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
363 additions
and
372 deletions
+363
-372
getpath.c
Modules/getpath.c
+363
-372
No files found.
Modules/getpath.c
Dosyayı görüntüle @
edabdc1e
...
@@ -139,13 +139,12 @@ static char *module_search_path = NULL;
...
@@ -139,13 +139,12 @@ static char *module_search_path = NULL;
static
char
lib_python
[
20
];
/* Dynamically set to "lib/python" VERSION */
static
char
lib_python
[
20
];
/* Dynamically set to "lib/python" VERSION */
static
void
static
void
reduce
(
dir
)
reduce
(
char
*
dir
)
char
*
dir
;
{
{
size_t
i
=
strlen
(
dir
);
size_t
i
=
strlen
(
dir
);
while
(
i
>
0
&&
dir
[
i
]
!=
SEP
)
while
(
i
>
0
&&
dir
[
i
]
!=
SEP
)
--
i
;
--
i
;
dir
[
i
]
=
'\0'
;
dir
[
i
]
=
'\0'
;
}
}
...
@@ -158,239 +157,231 @@ reduce(dir)
...
@@ -158,239 +157,231 @@ reduce(dir)
#endif
#endif
static
int
static
int
isfile
(
filename
)
/* Is file, not directory */
isfile
(
char
*
filename
)
/* Is file, not directory */
char
*
filename
;
{
{
struct
stat
buf
;
struct
stat
buf
;
if
(
stat
(
filename
,
&
buf
)
!=
0
)
if
(
stat
(
filename
,
&
buf
)
!=
0
)
return
0
;
return
0
;
if
(
!
S_ISREG
(
buf
.
st_mode
))
if
(
!
S_ISREG
(
buf
.
st_mode
))
return
0
;
return
0
;
return
1
;
return
1
;
}
}
static
int
static
int
ismodule
(
filename
)
/* Is module -- check for .pyc/.pyo too */
ismodule
(
char
*
filename
)
/* Is module -- check for .pyc/.pyo too */
char
*
filename
;
{
{
if
(
isfile
(
filename
))
if
(
isfile
(
filename
))
return
1
;
return
1
;
/* Check for the compiled version of prefix. */
/* Check for the compiled version of prefix. */
if
(
strlen
(
filename
)
<
MAXPATHLEN
)
{
if
(
strlen
(
filename
)
<
MAXPATHLEN
)
{
strcat
(
filename
,
Py_OptimizeFlag
?
"o"
:
"c"
);
strcat
(
filename
,
Py_OptimizeFlag
?
"o"
:
"c"
);
if
(
isfile
(
filename
))
if
(
isfile
(
filename
))
return
1
;
return
1
;
}
}
return
0
;
return
0
;
}
}
static
int
static
int
isxfile
(
filename
)
/* Is executable file */
isxfile
(
char
*
filename
)
/* Is executable file */
char
*
filename
;
{
{
struct
stat
buf
;
struct
stat
buf
;
if
(
stat
(
filename
,
&
buf
)
!=
0
)
if
(
stat
(
filename
,
&
buf
)
!=
0
)
return
0
;
return
0
;
if
(
!
S_ISREG
(
buf
.
st_mode
))
if
(
!
S_ISREG
(
buf
.
st_mode
))
return
0
;
return
0
;
if
((
buf
.
st_mode
&
0111
)
==
0
)
if
((
buf
.
st_mode
&
0111
)
==
0
)
return
0
;
return
0
;
return
1
;
return
1
;
}
}
static
int
static
int
isdir
(
filename
)
/* Is directory */
isdir
(
char
*
filename
)
/* Is directory */
char
*
filename
;
{
{
struct
stat
buf
;
struct
stat
buf
;
if
(
stat
(
filename
,
&
buf
)
!=
0
)
if
(
stat
(
filename
,
&
buf
)
!=
0
)
return
0
;
return
0
;
if
(
!
S_ISDIR
(
buf
.
st_mode
))
if
(
!
S_ISDIR
(
buf
.
st_mode
))
return
0
;
return
0
;
return
1
;
return
1
;
}
}
static
void
static
void
joinpath
(
buffer
,
stuff
)
joinpath
(
char
*
buffer
,
char
*
stuff
)
char
*
buffer
;
char
*
stuff
;
{
{
size_t
n
,
k
;
size_t
n
,
k
;
if
(
stuff
[
0
]
==
SEP
)
if
(
stuff
[
0
]
==
SEP
)
n
=
0
;
n
=
0
;
else
{
else
{
n
=
strlen
(
buffer
);
n
=
strlen
(
buffer
);
if
(
n
>
0
&&
buffer
[
n
-
1
]
!=
SEP
&&
n
<
MAXPATHLEN
)
if
(
n
>
0
&&
buffer
[
n
-
1
]
!=
SEP
&&
n
<
MAXPATHLEN
)
buffer
[
n
++
]
=
SEP
;
buffer
[
n
++
]
=
SEP
;
}
}
k
=
strlen
(
stuff
);
k
=
strlen
(
stuff
);
if
(
n
+
k
>
MAXPATHLEN
)
if
(
n
+
k
>
MAXPATHLEN
)
k
=
MAXPATHLEN
-
n
;
k
=
MAXPATHLEN
-
n
;
strncpy
(
buffer
+
n
,
stuff
,
k
);
strncpy
(
buffer
+
n
,
stuff
,
k
);
buffer
[
n
+
k
]
=
'\0'
;
buffer
[
n
+
k
]
=
'\0'
;
}
}
static
int
static
int
search_for_prefix
(
argv0_path
,
home
)
search_for_prefix
(
char
*
argv0_path
,
char
*
home
)
char
*
argv0_path
;
char
*
home
;
{
{
size_t
n
;
size_t
n
;
char
*
vpath
;
char
*
vpath
;
/* If PYTHONHOME is set, we believe it unconditionally */
/* If PYTHONHOME is set, we believe it unconditionally */
if
(
home
)
{
if
(
home
)
{
char
*
delim
;
char
*
delim
;
strcpy
(
prefix
,
home
);
strcpy
(
prefix
,
home
);
delim
=
strchr
(
prefix
,
DELIM
);
delim
=
strchr
(
prefix
,
DELIM
);
if
(
delim
)
if
(
delim
)
*
delim
=
'\0'
;
*
delim
=
'\0'
;
joinpath
(
prefix
,
lib_python
);
joinpath
(
prefix
,
lib_python
);
joinpath
(
prefix
,
LANDMARK
);
joinpath
(
prefix
,
LANDMARK
);
return
1
;
return
1
;
}
}
/* Check to see if argv[0] is in the build directory */
/* Check to see if argv[0] is in the build directory */
strcpy
(
prefix
,
argv0_path
);
strcpy
(
prefix
,
argv0_path
);
joinpath
(
prefix
,
"Modules/Setup"
);
joinpath
(
prefix
,
"Modules/Setup"
);
if
(
isfile
(
prefix
))
{
if
(
isfile
(
prefix
))
{
/* Check VPATH to see if argv0_path is in the build directory.
/* Check VPATH to see if argv0_path is in the build directory.
* Complication: the VPATH passed in is relative to the
* Complication: the VPATH passed in is relative to the
* Modules build directory and points to the Modules source
* Modules build directory and points to the Modules source
* directory; we need it relative to the build tree and
* directory; we need it relative to the build tree and
* pointing to the source tree. Solution: chop off a leading
* pointing to the source tree. Solution: chop off a leading
* ".." (but only if it's there -- it could be an absolute
* ".." (but only if it's there -- it could be an absolute
* path) and chop off the final component (assuming it's
* path) and chop off the final component (assuming it's
* "Modules").
* "Modules").
*/
*/
vpath
=
VPATH
;
vpath
=
VPATH
;
if
(
vpath
[
0
]
==
'.'
&&
vpath
[
1
]
==
'.'
&&
vpath
[
2
]
==
'/'
)
if
(
vpath
[
0
]
==
'.'
&&
vpath
[
1
]
==
'.'
&&
vpath
[
2
]
==
'/'
)
vpath
+=
3
;
vpath
+=
3
;
strcpy
(
prefix
,
argv0_path
);
strcpy
(
prefix
,
argv0_path
);
joinpath
(
prefix
,
vpath
);
joinpath
(
prefix
,
vpath
);
reduce
(
prefix
);
reduce
(
prefix
);
joinpath
(
prefix
,
"Lib"
);
joinpath
(
prefix
,
"Lib"
);
joinpath
(
prefix
,
LANDMARK
);
joinpath
(
prefix
,
LANDMARK
);
if
(
ismodule
(
prefix
))
if
(
ismodule
(
prefix
))
return
-
1
;
return
-
1
;
}
}
/* Search from argv0_path, until root is found */
/* Search from argv0_path, until root is found */
strcpy
(
prefix
,
argv0_path
);
strcpy
(
prefix
,
argv0_path
);
do
{
do
{
n
=
strlen
(
prefix
);
n
=
strlen
(
prefix
);
joinpath
(
prefix
,
lib_python
);
joinpath
(
prefix
,
lib_python
);
joinpath
(
prefix
,
LANDMARK
);
joinpath
(
prefix
,
LANDMARK
);
if
(
ismodule
(
prefix
))
if
(
ismodule
(
prefix
))
return
1
;
return
1
;
prefix
[
n
]
=
'\0'
;
prefix
[
n
]
=
'\0'
;
reduce
(
prefix
);
reduce
(
prefix
);
}
while
(
prefix
[
0
]);
}
while
(
prefix
[
0
]);
/* Look at configure's PREFIX */
/* Look at configure's PREFIX */
strcpy
(
prefix
,
PREFIX
);
strcpy
(
prefix
,
PREFIX
);
joinpath
(
prefix
,
lib_python
);
joinpath
(
prefix
,
lib_python
);
joinpath
(
prefix
,
LANDMARK
);
joinpath
(
prefix
,
LANDMARK
);
if
(
ismodule
(
prefix
))
if
(
ismodule
(
prefix
))
return
1
;
return
1
;
/* Fail */
/* Fail */
return
0
;
return
0
;
}
}
static
int
static
int
search_for_exec_prefix
(
argv0_path
,
home
)
search_for_exec_prefix
(
char
*
argv0_path
,
char
*
home
)
char
*
argv0_path
;
char
*
home
;
{
{
size_t
n
;
size_t
n
;
/* If PYTHONHOME is set, we believe it unconditionally */
/* If PYTHONHOME is set, we believe it unconditionally */
if
(
home
)
{
if
(
home
)
{
char
*
delim
;
char
*
delim
;
delim
=
strchr
(
home
,
DELIM
);
delim
=
strchr
(
home
,
DELIM
);
if
(
delim
)
if
(
delim
)
strcpy
(
exec_prefix
,
delim
+
1
);
strcpy
(
exec_prefix
,
delim
+
1
);
else
else
strcpy
(
exec_prefix
,
home
);
strcpy
(
exec_prefix
,
home
);
joinpath
(
exec_prefix
,
lib_python
);
joinpath
(
exec_prefix
,
lib_python
);
joinpath
(
exec_prefix
,
"lib-dynload"
);
joinpath
(
exec_prefix
,
"lib-dynload"
);
return
1
;
return
1
;
}
}
/* Check to see if argv[0] is in the build directory */
/* Check to see if argv[0] is in the build directory */
strcpy
(
exec_prefix
,
argv0_path
);
strcpy
(
exec_prefix
,
argv0_path
);
joinpath
(
exec_prefix
,
"Modules/Setup"
);
joinpath
(
exec_prefix
,
"Modules/Setup"
);
if
(
isfile
(
exec_prefix
))
{
if
(
isfile
(
exec_prefix
))
{
reduce
(
exec_prefix
);
reduce
(
exec_prefix
);
return
-
1
;
return
-
1
;
}
}
/* Search from argv0_path, until root is found */
/* Search from argv0_path, until root is found */
strcpy
(
exec_prefix
,
argv0_path
);
strcpy
(
exec_prefix
,
argv0_path
);
do
{
do
{
n
=
strlen
(
exec_prefix
);
n
=
strlen
(
exec_prefix
);
joinpath
(
exec_prefix
,
lib_python
);
joinpath
(
exec_prefix
,
lib_python
);
joinpath
(
exec_prefix
,
"lib-dynload"
);
joinpath
(
exec_prefix
,
"lib-dynload"
);
if
(
isdir
(
exec_prefix
))
if
(
isdir
(
exec_prefix
))
return
1
;
return
1
;
exec_prefix
[
n
]
=
'\0'
;
exec_prefix
[
n
]
=
'\0'
;
reduce
(
exec_prefix
);
reduce
(
exec_prefix
);
}
while
(
exec_prefix
[
0
]);
}
while
(
exec_prefix
[
0
]);
/* Look at configure's EXEC_PREFIX */
/* Look at configure's EXEC_PREFIX */
strcpy
(
exec_prefix
,
EXEC_PREFIX
);
strcpy
(
exec_prefix
,
EXEC_PREFIX
);
joinpath
(
exec_prefix
,
lib_python
);
joinpath
(
exec_prefix
,
lib_python
);
joinpath
(
exec_prefix
,
"lib-dynload"
);
joinpath
(
exec_prefix
,
"lib-dynload"
);
if
(
isdir
(
exec_prefix
))
if
(
isdir
(
exec_prefix
))
return
1
;
return
1
;
/* Fail */
/* Fail */
return
0
;
return
0
;
}
}
static
void
static
void
calculate_path
()
calculate_path
()
{
{
extern
char
*
Py_GetProgramName
();
extern
char
*
Py_GetProgramName
();
static
char
delimiter
[
2
]
=
{
DELIM
,
'\0'
};
static
char
delimiter
[
2
]
=
{
DELIM
,
'\0'
};
static
char
separator
[
2
]
=
{
SEP
,
'\0'
};
static
char
separator
[
2
]
=
{
SEP
,
'\0'
};
char
*
pythonpath
=
PYTHONPATH
;
char
*
pythonpath
=
PYTHONPATH
;
char
*
rtpypath
=
getenv
(
"PYTHONPATH"
);
char
*
rtpypath
=
getenv
(
"PYTHONPATH"
);
char
*
home
=
Py_GetPythonHome
();
char
*
home
=
Py_GetPythonHome
();
char
*
path
=
getenv
(
"PATH"
);
char
*
path
=
getenv
(
"PATH"
);
char
*
prog
=
Py_GetProgramName
();
char
*
prog
=
Py_GetProgramName
();
char
argv0_path
[
MAXPATHLEN
+
1
];
char
argv0_path
[
MAXPATHLEN
+
1
];
int
pfound
,
efound
;
/* 1 if found; -1 if found build directory */
int
pfound
,
efound
;
/* 1 if found; -1 if found build directory */
char
*
buf
;
char
*
buf
;
size_t
bufsz
;
size_t
bufsz
;
size_t
prefixsz
;
size_t
prefixsz
;
char
*
defpath
=
pythonpath
;
char
*
defpath
=
pythonpath
;
#ifdef WITH_NEXT_FRAMEWORK
#ifdef WITH_NEXT_FRAMEWORK
NSModule
pythonModule
;
NSModule
pythonModule
;
#endif
#endif
#ifdef WITH_NEXT_FRAMEWORK
#ifdef WITH_NEXT_FRAMEWORK
pythonModule
=
NSModuleForSymbol
(
NSLookupAndBindSymbol
(
"_Py_Initialize"
));
pythonModule
=
NSModuleForSymbol
(
NSLookupAndBindSymbol
(
"_Py_Initialize"
));
/* Use dylib functions to find out where the framework was loaded from */
/* Use dylib functions to find out where the framework was loaded from */
buf
=
NSLibraryNameForModule
(
pythonModule
);
buf
=
NSLibraryNameForModule
(
pythonModule
);
if
(
buf
!=
NULL
)
{
if
(
buf
!=
NULL
)
{
/* We're in a framework. */
/* We're in a framework. */
strcpy
(
progpath
,
buf
);
strcpy
(
progpath
,
buf
);
/* Frameworks have support for versioning */
/* Frameworks have support for versioning */
strcpy
(
lib_python
,
"lib"
);
strcpy
(
lib_python
,
"lib"
);
}
else
{
}
/* If we're not in a framework, fall back to the old way (even though NSNameOfModule() probably does the same thing.) */
else
{
/* If we're not in a framework, fall back to the old way
(even though NSNameOfModule() probably does the same thing.) */
#endif
#endif
/* Initialize this dynamically for K&R C */
/* Initialize this dynamically for K&R C */
...
@@ -402,179 +393,179 @@ calculate_path()
...
@@ -402,179 +393,179 @@ calculate_path()
* $PATH isn't exported, you lose.
* $PATH isn't exported, you lose.
*/
*/
if
(
strchr
(
prog
,
SEP
))
if
(
strchr
(
prog
,
SEP
))
strcpy
(
progpath
,
prog
);
strcpy
(
progpath
,
prog
);
else
if
(
path
)
{
else
if
(
path
)
{
while
(
1
)
{
while
(
1
)
{
char
*
delim
=
strchr
(
path
,
DELIM
);
char
*
delim
=
strchr
(
path
,
DELIM
);
if
(
delim
)
{
if
(
delim
)
{
size_t
len
=
delim
-
path
;
size_t
len
=
delim
-
path
;
strncpy
(
progpath
,
path
,
len
);
strncpy
(
progpath
,
path
,
len
);
*
(
progpath
+
len
)
=
'\0'
;
*
(
progpath
+
len
)
=
'\0'
;
}
}
else
else
strcpy
(
progpath
,
path
);
strcpy
(
progpath
,
path
);
joinpath
(
progpath
,
prog
);
joinpath
(
progpath
,
prog
);
if
(
isxfile
(
progpath
))
if
(
isxfile
(
progpath
))
break
;
break
;
if
(
!
delim
)
{
if
(
!
delim
)
{
progpath
[
0
]
=
'\0'
;
progpath
[
0
]
=
'\0'
;
break
;
break
;
}
}
path
=
delim
+
1
;
path
=
delim
+
1
;
}
}
}
}
else
else
progpath
[
0
]
=
'\0'
;
progpath
[
0
]
=
'\0'
;
#ifdef WITH_NEXT_FRAMEWORK
#ifdef WITH_NEXT_FRAMEWORK
}
}
#endif
#endif
strcpy
(
argv0_path
,
progpath
);
strcpy
(
argv0_path
,
progpath
);
#if HAVE_READLINK
#if HAVE_READLINK
{
{
char
tmpbuffer
[
MAXPATHLEN
+
1
];
char
tmpbuffer
[
MAXPATHLEN
+
1
];
int
linklen
=
readlink
(
progpath
,
tmpbuffer
,
MAXPATHLEN
);
int
linklen
=
readlink
(
progpath
,
tmpbuffer
,
MAXPATHLEN
);
while
(
linklen
!=
-
1
)
{
while
(
linklen
!=
-
1
)
{
/* It's not null terminated! */
/* It's not null terminated! */
tmpbuffer
[
linklen
]
=
'\0'
;
tmpbuffer
[
linklen
]
=
'\0'
;
if
(
tmpbuffer
[
0
]
==
SEP
)
if
(
tmpbuffer
[
0
]
==
SEP
)
strcpy
(
argv0_path
,
tmpbuffer
);
strcpy
(
argv0_path
,
tmpbuffer
);
else
{
else
{
/* Interpret relative to progpath */
/* Interpret relative to progpath */
reduce
(
argv0_path
);
reduce
(
argv0_path
);
joinpath
(
argv0_path
,
tmpbuffer
);
joinpath
(
argv0_path
,
tmpbuffer
);
}
}
linklen
=
readlink
(
argv0_path
,
tmpbuffer
,
MAXPATHLEN
);
linklen
=
readlink
(
argv0_path
,
tmpbuffer
,
MAXPATHLEN
);
}
}
}
}
#endif
/* HAVE_READLINK */
#endif
/* HAVE_READLINK */
reduce
(
argv0_path
);
reduce
(
argv0_path
);
if
(
!
(
pfound
=
search_for_prefix
(
argv0_path
,
home
)))
{
if
(
!
(
pfound
=
search_for_prefix
(
argv0_path
,
home
)))
{
if
(
!
Py_FrozenFlag
)
if
(
!
Py_FrozenFlag
)
fprintf
(
stderr
,
fprintf
(
stderr
,
"Could not find platform independent libraries <prefix>
\n
"
);
"Could not find platform independent libraries <prefix>
\n
"
);
strcpy
(
prefix
,
PREFIX
);
strcpy
(
prefix
,
PREFIX
);
joinpath
(
prefix
,
lib_python
);
joinpath
(
prefix
,
lib_python
);
}
}
else
else
reduce
(
prefix
);
reduce
(
prefix
);
if
(
!
(
efound
=
search_for_exec_prefix
(
argv0_path
,
home
)))
{
if
(
!
(
efound
=
search_for_exec_prefix
(
argv0_path
,
home
)))
{
if
(
!
Py_FrozenFlag
)
if
(
!
Py_FrozenFlag
)
fprintf
(
stderr
,
fprintf
(
stderr
,
"Could not find platform dependent libraries <exec_prefix>
\n
"
);
"Could not find platform dependent libraries <exec_prefix>
\n
"
);
strcpy
(
exec_prefix
,
EXEC_PREFIX
);
strcpy
(
exec_prefix
,
EXEC_PREFIX
);
joinpath
(
exec_prefix
,
"lib/lib-dynload"
);
joinpath
(
exec_prefix
,
"lib/lib-dynload"
);
}
}
/* If we found EXEC_PREFIX do *not* reduce it! (Yet.) */
/* If we found EXEC_PREFIX do *not* reduce it! (Yet.) */
if
((
!
pfound
||
!
efound
)
&&
!
Py_FrozenFlag
)
if
((
!
pfound
||
!
efound
)
&&
!
Py_FrozenFlag
)
fprintf
(
stderr
,
fprintf
(
stderr
,
"Consider setting $PYTHONHOME to <prefix>[:<exec_prefix>]
\n
"
);
"Consider setting $PYTHONHOME to <prefix>[:<exec_prefix>]
\n
"
);
/* Calculate size of return buffer.
/* Calculate size of return buffer.
*/
*/
bufsz
=
0
;
bufsz
=
0
;
if
(
rtpypath
)
if
(
rtpypath
)
bufsz
+=
strlen
(
rtpypath
)
+
1
;
bufsz
+=
strlen
(
rtpypath
)
+
1
;
prefixsz
=
strlen
(
prefix
)
+
1
;
prefixsz
=
strlen
(
prefix
)
+
1
;
while
(
1
)
{
while
(
1
)
{
char
*
delim
=
strchr
(
defpath
,
DELIM
);
char
*
delim
=
strchr
(
defpath
,
DELIM
);
if
(
defpath
[
0
]
!=
SEP
)
if
(
defpath
[
0
]
!=
SEP
)
/* Paths are relative to prefix */
/* Paths are relative to prefix */
bufsz
+=
prefixsz
;
bufsz
+=
prefixsz
;
if
(
delim
)
if
(
delim
)
bufsz
+=
delim
-
defpath
+
1
;
bufsz
+=
delim
-
defpath
+
1
;
else
{
else
{
bufsz
+=
strlen
(
defpath
)
+
1
;
bufsz
+=
strlen
(
defpath
)
+
1
;
break
;
break
;
}
}
defpath
=
delim
+
1
;
defpath
=
delim
+
1
;
}
}
bufsz
+=
strlen
(
exec_prefix
)
+
1
;
bufsz
+=
strlen
(
exec_prefix
)
+
1
;
/* This is the only malloc call in this file */
/* This is the only malloc call in this file */
buf
=
PyMem_Malloc
(
bufsz
);
buf
=
PyMem_Malloc
(
bufsz
);
if
(
buf
==
NULL
)
{
if
(
buf
==
NULL
)
{
/* We can't exit, so print a warning and limp along */
/* We can't exit, so print a warning and limp along */
fprintf
(
stderr
,
"Not enough memory for dynamic PYTHONPATH.
\n
"
);
fprintf
(
stderr
,
"Not enough memory for dynamic PYTHONPATH.
\n
"
);
fprintf
(
stderr
,
"Using default static PYTHONPATH.
\n
"
);
fprintf
(
stderr
,
"Using default static PYTHONPATH.
\n
"
);
module_search_path
=
PYTHONPATH
;
module_search_path
=
PYTHONPATH
;
}
}
else
{
else
{
/* Run-time value of $PYTHONPATH goes first */
/* Run-time value of $PYTHONPATH goes first */
if
(
rtpypath
)
{
if
(
rtpypath
)
{
strcpy
(
buf
,
rtpypath
);
strcpy
(
buf
,
rtpypath
);
strcat
(
buf
,
delimiter
);
strcat
(
buf
,
delimiter
);
}
}
else
else
buf
[
0
]
=
'\0'
;
buf
[
0
]
=
'\0'
;
/* Next goes merge of compile-time $PYTHONPATH with
/* Next goes merge of compile-time $PYTHONPATH with
* dynamically located prefix.
* dynamically located prefix.
*/
*/
defpath
=
pythonpath
;
defpath
=
pythonpath
;
while
(
1
)
{
while
(
1
)
{
char
*
delim
=
strchr
(
defpath
,
DELIM
);
char
*
delim
=
strchr
(
defpath
,
DELIM
);
if
(
defpath
[
0
]
!=
SEP
)
{
if
(
defpath
[
0
]
!=
SEP
)
{
strcat
(
buf
,
prefix
);
strcat
(
buf
,
prefix
);
strcat
(
buf
,
separator
);
strcat
(
buf
,
separator
);
}
}
if
(
delim
)
{
if
(
delim
)
{
size_t
len
=
delim
-
defpath
+
1
;
size_t
len
=
delim
-
defpath
+
1
;
size_t
end
=
strlen
(
buf
)
+
len
;
size_t
end
=
strlen
(
buf
)
+
len
;
strncat
(
buf
,
defpath
,
len
);
strncat
(
buf
,
defpath
,
len
);
*
(
buf
+
end
)
=
'\0'
;
*
(
buf
+
end
)
=
'\0'
;
}
}
else
{
else
{
strcat
(
buf
,
defpath
);
strcat
(
buf
,
defpath
);
break
;
break
;
}
}
defpath
=
delim
+
1
;
defpath
=
delim
+
1
;
}
}
strcat
(
buf
,
delimiter
);
strcat
(
buf
,
delimiter
);
/* Finally, on goes the directory for dynamic-load modules */
/* Finally, on goes the directory for dynamic-load modules */
strcat
(
buf
,
exec_prefix
);
strcat
(
buf
,
exec_prefix
);
/* And publish the results */
/* And publish the results */
module_search_path
=
buf
;
module_search_path
=
buf
;
}
}
/* Reduce prefix and exec_prefix to their essence,
/* Reduce prefix and exec_prefix to their essence,
* e.g. /usr/local/lib/python1.5 is reduced to /usr/local.
* e.g. /usr/local/lib/python1.5 is reduced to /usr/local.
* If we're loading relative to the build directory,
* If we're loading relative to the build directory,
* return the compiled-in defaults instead.
* return the compiled-in defaults instead.
*/
*/
if
(
pfound
>
0
)
{
if
(
pfound
>
0
)
{
reduce
(
prefix
);
reduce
(
prefix
);
reduce
(
prefix
);
reduce
(
prefix
);
}
}
else
else
strcpy
(
prefix
,
PREFIX
);
strcpy
(
prefix
,
PREFIX
);
if
(
efound
>
0
)
{
if
(
efound
>
0
)
{
reduce
(
exec_prefix
);
reduce
(
exec_prefix
);
reduce
(
exec_prefix
);
reduce
(
exec_prefix
);
reduce
(
exec_prefix
);
reduce
(
exec_prefix
);
}
}
else
else
strcpy
(
exec_prefix
,
EXEC_PREFIX
);
strcpy
(
exec_prefix
,
EXEC_PREFIX
);
}
}
...
@@ -583,31 +574,31 @@ calculate_path()
...
@@ -583,31 +574,31 @@ calculate_path()
char
*
char
*
Py_GetPath
()
Py_GetPath
()
{
{
if
(
!
module_search_path
)
if
(
!
module_search_path
)
calculate_path
();
calculate_path
();
return
module_search_path
;
return
module_search_path
;
}
}
char
*
char
*
Py_GetPrefix
()
Py_GetPrefix
()
{
{
if
(
!
module_search_path
)
if
(
!
module_search_path
)
calculate_path
();
calculate_path
();
return
prefix
;
return
prefix
;
}
}
char
*
char
*
Py_GetExecPrefix
()
Py_GetExecPrefix
()
{
{
if
(
!
module_search_path
)
if
(
!
module_search_path
)
calculate_path
();
calculate_path
();
return
exec_prefix
;
return
exec_prefix
;
}
}
char
*
char
*
Py_GetProgramFullPath
()
Py_GetProgramFullPath
()
{
{
if
(
!
module_search_path
)
if
(
!
module_search_path
)
calculate_path
();
calculate_path
();
return
progpath
;
return
progpath
;
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment