mirror of https://github.com/acidanthera/audk.git
AppPkg/Applications/Python: Get Python startup process fully working for EDK II.
AppPkg.dsc: Clean up and add Socket support. Applications/Python/PythonCore.inf: Re-order source files. Applications/Python/Efi/config.c: Add all mandatory modules. Disable remaining. Applications/Python/Efi/edk2module.c: EDK II port of posixmodule.c. Applications/Python/Efi/getpath.c: Determine initial module search path. Applications/Python/Ia32/pyconfig.h: Configuration macros for Ia32. Applications/Python/Ipf/pyconfig.h: Configuration macros for Ipf. Applications/Python/PyMod-2.7.2/Include/osdefs.h: Select appropriate directory and path separators for UEFI. Applications/Python/PyMod-2.7.2/Lib/ntpath.py: Allow multi-character device names to left of colon. Applications/Python/PyMod-2.7.2/Lib/os.py: Add edk2 as a supported OS. Applications/Python/PyMod-2.7.2/Lib/site.py: UEFI-specific path and environment setup. Applications/Python/PyMod-2.7.2/Modules/errnomodule.c: Sync with errno.h. Applications/Python/PyMod-2.7.2/Modules/selectmodule.c: Add UEFI support. Applications/Python/PyMod-2.7.2/Modules/socketmodule.h: Add UEFI support. Applications/Python/PyMod-2.7.2/Modules/zlib/zutil.h: Add UEFI support. Applications/Python/PyMod-2.7.2/Python/getcopyright.c: Add Intel copyright. Applications/Python/X64/pyconfig.h: Configuration macros for X64. Signed-off-by: darylm503 Reviewed-by: geekboy15a Reviewed-by: jljusten Reviewed-by: lpleahy Reviewed-by: leegrosenbaum git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@12957 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
parent
87bd924782
commit
b410d6e4ce
|
@ -71,6 +71,8 @@
|
|||
SortLib|ShellPkg/Library/UefiSortLib/UefiSortLib.inf
|
||||
PathLib|ShellPkg/Library/BasePathLib/BasePathLib.inf
|
||||
|
||||
CacheMaintenanceLib|MdePkg/Library/BaseCacheMaintenanceLib/BaseCacheMaintenanceLib.inf
|
||||
|
||||
###################################################################################################
|
||||
#
|
||||
# Components Section - list of the modules and components that will be processed by compilation
|
||||
|
@ -100,37 +102,18 @@
|
|||
#### After extracting the Python distribution, un-comment the following line to build Python.
|
||||
# AppPkg/Applications/Python/PythonCore.inf
|
||||
|
||||
##########
|
||||
# Socket Applications - LibC based
|
||||
##########
|
||||
# AppPkg/Applications/Sockets/DataSink/DataSink.inf
|
||||
# AppPkg/Applications/Sockets/DataSource/DataSource.inf
|
||||
# SocketPkg/Application/FtpNew/FTP.inf
|
||||
# AppPkg/Applications/Sockets/GetHostByAddr/GetHostByAddr.inf
|
||||
# AppPkg/Applications/Sockets/GetHostByDns/GetHostByDns.inf
|
||||
# AppPkg/Applications/Sockets/GetHostByName/GetHostByName.inf
|
||||
# AppPkg/Applications/Sockets/GetNetByAddr/GetNetByAddr.inf
|
||||
# AppPkg/Applications/Sockets/GetNetByName/GetNetByName.inf
|
||||
# AppPkg/Applications/Sockets/GetServByName/GetServByName.inf
|
||||
# AppPkg/Applications/Sockets/GetServByPort/GetServByPort.inf
|
||||
# AppPkg/Applications/Sockets/RecvDgram/RecvDgram.inf
|
||||
# SocketPkg/Application/route/route.inf
|
||||
# AppPkg/Applications/Sockets/SetHostName/SetHostName.inf
|
||||
# AppPkg/Applications/Sockets/SetSockOpt/SetSockOpt.inf
|
||||
# AppPkg/Applications/Sockets/TftpServer/TftpServer.inf
|
||||
# AppPkg/Applications/Sockets/WebServer/WebServer.inf {
|
||||
# <PcdsFixedAtBuild>
|
||||
# gStdLibTokenSpaceGuid.WebServer_HttpPort|80
|
||||
# }
|
||||
|
||||
##############################################################################
|
||||
#
|
||||
# Specify whether we are running in an emulation environment, or not.
|
||||
# Define EMULATE if we are, else keep the DEFINE commented out.
|
||||
#
|
||||
# DEFINE EMULATE = 1
|
||||
|
||||
##############################################################################
|
||||
#
|
||||
# Include Boilerplate text required for building with the Standard Libraries.
|
||||
#
|
||||
##############################################################################
|
||||
# Specify whether we are running in an emulation environment, or not.
|
||||
# Define EMULATE if we are.
|
||||
#
|
||||
#DEFINE EMULATE = 1
|
||||
|
||||
!include StdLib/StdLib.inc
|
||||
!include AppPkg/Applications/Sockets/Sockets.inc
|
||||
|
|
|
@ -30,7 +30,7 @@ extern void initimageop(void);
|
|||
#endif
|
||||
extern void initmath(void);
|
||||
extern void init_md5(void);
|
||||
extern void initnt(void);
|
||||
extern void initedk2(void);
|
||||
extern void initoperator(void);
|
||||
extern void initsignal(void);
|
||||
extern void init_sha(void);
|
||||
|
@ -80,6 +80,9 @@ extern void init_ast(void);
|
|||
extern void init_io(void);
|
||||
extern void _PyWarnings_Init(void);
|
||||
|
||||
extern void init_socket(void);
|
||||
extern void initselect(void);
|
||||
|
||||
/* tools/freeze/makeconfig.py marker for additional "extern" */
|
||||
/* -- ADDMODULE MARKER 1 -- */
|
||||
|
||||
|
@ -90,71 +93,19 @@ struct _inittab _PyImport_Inittab[] = {
|
|||
|
||||
{"array", initarray},
|
||||
{"_ast", init_ast},
|
||||
#ifdef MS_WINDOWS
|
||||
#ifndef MS_WINI64
|
||||
{"audioop", initaudioop},
|
||||
#endif
|
||||
#endif
|
||||
{"binascii", initbinascii},
|
||||
//{"cmath", initcmath},
|
||||
{"errno", initerrno},
|
||||
|
||||
{"future_builtins", initfuture_builtins},
|
||||
{"gc", initgc},
|
||||
{"signal", initsignal},
|
||||
|
||||
#if 0
|
||||
{"future_builtins", initfuture_builtins},
|
||||
#ifndef MS_WINI64
|
||||
{"imageop", initimageop},
|
||||
#endif
|
||||
{"math", initmath},
|
||||
{"_md5", init_md5},
|
||||
//{"nt", initnt}, /* Use the NT os functions, not posix */
|
||||
{"edk2", initedk2},
|
||||
{"operator", initoperator},
|
||||
{"_sha", init_sha},
|
||||
{"_sha256", init_sha256},
|
||||
{"_sha512", init_sha512},
|
||||
{"strop", initstrop},
|
||||
{"_weakref", init_weakref},
|
||||
{"math", initmath},
|
||||
{"time", inittime},
|
||||
#ifdef WITH_THREAD
|
||||
{"thread", initthread},
|
||||
#endif
|
||||
{"cStringIO", initcStringIO},
|
||||
{"cPickle", initcPickle},
|
||||
#ifdef WIN32
|
||||
{"msvcrt", initmsvcrt},
|
||||
{"_locale", init_locale},
|
||||
#endif
|
||||
/* XXX Should _subprocess go in a WIN32 block? not WIN64? */
|
||||
//{"_subprocess", init_subprocess},
|
||||
|
||||
{"_codecs", init_codecs},
|
||||
//{"_weakref", init_weakref},
|
||||
//{"_hotshot", init_hotshot},
|
||||
{"_random", init_random},
|
||||
{"_bisect", init_bisect},
|
||||
{"_heapq", init_heapq},
|
||||
//{"_lsprof", init_lsprof},
|
||||
{"itertools", inititertools},
|
||||
{"_collections", init_collections},
|
||||
{"_symtable", init_symtable},
|
||||
//{"mmap", initmmap},
|
||||
{"_csv", init_csv},
|
||||
{"_sre", init_sre},
|
||||
#endif
|
||||
|
||||
{"parser", initparser},
|
||||
|
||||
#if 0
|
||||
//{"_winreg", init_winreg},
|
||||
{"_struct", init_struct},
|
||||
{"datetime", initdatetime},
|
||||
{"_functools", init_functools},
|
||||
{"_json", init_json},
|
||||
|
||||
{"xxsubtype", initxxsubtype},
|
||||
//{"zipimport", initzipimport},
|
||||
//{"zlib", initzlib},
|
||||
{"cStringIO", initcStringIO},
|
||||
{"_codecs", init_codecs},
|
||||
|
||||
/* CJK codecs */
|
||||
{"_multibytecodec", init_multibytecodec},
|
||||
|
@ -164,6 +115,53 @@ struct _inittab _PyImport_Inittab[] = {
|
|||
{"_codecs_jp", init_codecs_jp},
|
||||
{"_codecs_kr", init_codecs_kr},
|
||||
{"_codecs_tw", init_codecs_tw},
|
||||
|
||||
{"_bisect", init_bisect},
|
||||
{"_md5", init_md5},
|
||||
{"_sha", init_sha},
|
||||
{"_sha256", init_sha256},
|
||||
{"_sha512", init_sha512},
|
||||
{"_random", init_random},
|
||||
{"_heapq", init_heapq},
|
||||
{"itertools", inititertools},
|
||||
{"_collections", init_collections},
|
||||
{"_sre", init_sre},
|
||||
{"parser", initparser},
|
||||
{"_struct", init_struct},
|
||||
{"cPickle", initcPickle},
|
||||
|
||||
{"strop", initstrop},
|
||||
{"_functools", init_functools},
|
||||
{"cmath", initcmath},
|
||||
{"_json", init_json},
|
||||
|
||||
{"_socket", init_socket},
|
||||
{"select", initselect},
|
||||
|
||||
{"xxsubtype", initxxsubtype},
|
||||
|
||||
#if 0
|
||||
#ifndef MS_WINI64
|
||||
{"imageop", initimageop},
|
||||
#endif
|
||||
#ifdef WITH_THREAD
|
||||
{"thread", initthread},
|
||||
#endif
|
||||
#ifdef WIN32
|
||||
{"msvcrt", initmsvcrt},
|
||||
{"_locale", init_locale},
|
||||
#endif
|
||||
/* XXX Should _subprocess go in a WIN32 block? not WIN64? */
|
||||
//{"_subprocess", init_subprocess},
|
||||
|
||||
//{"_hotshot", init_hotshot},
|
||||
//{"_lsprof", init_lsprof},
|
||||
//{"mmap", initmmap},
|
||||
//{"_winreg", init_winreg},
|
||||
{"_symtable", init_symtable},
|
||||
{"_csv", init_csv},
|
||||
{"zipimport", initzipimport},
|
||||
{"zlib", initzlib},
|
||||
#endif
|
||||
|
||||
/* tools/freeze/makeconfig.py marker for additional "_inittab" entries */
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -32,6 +32,7 @@
|
|||
**/
|
||||
#include <Python.h>
|
||||
#include <osdefs.h>
|
||||
#include <ctype.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
|
@ -126,15 +127,12 @@ isfile(char *filename)
|
|||
{
|
||||
struct stat buf;
|
||||
if (stat(filename, &buf) != 0) {
|
||||
//if (Py_VerboseFlag) PySys_WriteStderr("%s[%d] Not Found: file = \"%s\"\n", __func__, __LINE__, filename);
|
||||
return 0;
|
||||
}
|
||||
//if (!S_ISREG(buf.st_mode))
|
||||
if (S_ISDIR(buf.st_mode)) {
|
||||
//if (Py_VerboseFlag) PySys_WriteStderr("%s[%d] Is DIR: file = \"%s\"\n", __func__, __LINE__, filename);
|
||||
return 0;
|
||||
}
|
||||
//if (Py_VerboseFlag) PySys_WriteStderr("%s[%d] SUCCESS: file = \"%s\"\n", __func__, __LINE__, filename);
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
@ -159,11 +157,9 @@ ismodule(char *filename)
|
|||
if (strlen(filename) < MAXPATHLEN) {
|
||||
strcat(filename, Py_OptimizeFlag ? "o" : "c");
|
||||
if (isfile(filename)) {
|
||||
//if (Py_VerboseFlag) PySys_WriteStderr("%s[%d]: file = \"%s\"\n", __func__, __LINE__, filename);
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
//if (Py_VerboseFlag) PySys_WriteStderr("%s[%d] FAIL: file = \"%s\"\n", __func__, __LINE__, filename);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -304,7 +300,6 @@ isxfile(char *filename)
|
|||
char *newbn;
|
||||
int bnlen;
|
||||
|
||||
//if (Py_VerboseFlag) PySys_WriteStderr("%s[%d] ENTER: file = \"%s\"\n", __func__, __LINE__, filename);
|
||||
bn = basename(filename); // Separate off the file name component
|
||||
reduce(filename); // and isolate the path component
|
||||
bnlen = strlen(bn);
|
||||
|
@ -315,22 +310,17 @@ isxfile(char *filename)
|
|||
bnlen += 4;
|
||||
}
|
||||
else if(strcmp(newbn, ".efi") != 0) {
|
||||
//if (Py_VerboseFlag) PySys_WriteStderr("%s[%d]: Bad extension\n", __func__, __LINE__);
|
||||
return 0; // File can not be executable.
|
||||
}
|
||||
joinpath(filename, bn); // Stitch path and file name back together
|
||||
//if (Py_VerboseFlag) PySys_WriteStderr("%s[%d]: file = \"%s\"\n", __func__, __LINE__, filename);
|
||||
|
||||
if (stat(filename, &buf) != 0) { // Now, verify that file exists
|
||||
//if (Py_VerboseFlag) PySys_WriteStderr("%s[%d]: Does not exist\n", __func__, __LINE__);
|
||||
return 0;
|
||||
}
|
||||
if(S_ISDIR(buf.st_mode)) { // And it is not a directory.
|
||||
//if (Py_VerboseFlag) PySys_WriteStderr("%s[%d]: Is a directory\n", __func__, __LINE__);
|
||||
return 0;
|
||||
}
|
||||
|
||||
//if (Py_VerboseFlag) PySys_WriteStderr("%s[%d] EXIT: file = \"%s\"\n", __func__, __LINE__, filename);
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
@ -390,17 +380,12 @@ set_volume(char *Dest, char *path)
|
|||
{
|
||||
size_t VolLen;
|
||||
|
||||
//if (Py_VerboseFlag) PySys_WriteStderr("%s[%d] ENTER: path = \"%s\"\n", __func__, __LINE__, path);
|
||||
if(is_absolute(path)) {
|
||||
VolLen = strcspn(path, "/\\:");
|
||||
//if (Py_VerboseFlag) PySys_WriteStderr("%s[%d]: VolLen = %d\n", __func__, __LINE__, VolLen);
|
||||
if((VolLen != 0) && (path[VolLen] == ':')) {
|
||||
(void) strncpyX(Dest, path, VolLen + 1);
|
||||
//if (Py_VerboseFlag) PySys_WriteStderr("%s[%d]: VolLen = %d, Dest = \"%s\" path = \"%s\"\n",
|
||||
// __func__, __LINE__, VolLen, Dest, path);
|
||||
}
|
||||
}
|
||||
//if (Py_VerboseFlag) PySys_WriteStderr("%s[%d] EXIT: Dest = \"%s\"\n", __func__, __LINE__, Dest);
|
||||
}
|
||||
|
||||
|
||||
|
@ -481,16 +466,10 @@ calculate_path(void)
|
|||
char *prog = Py_GetProgramName();
|
||||
char argv0_path[MAXPATHLEN+1];
|
||||
char zip_path[MAXPATHLEN+1];
|
||||
//int pfound, efound; /* 1 if found; -1 if found build directory */
|
||||
char *buf;
|
||||
size_t bufsz;
|
||||
size_t prefixsz;
|
||||
char *defpath;
|
||||
//uint32_t nsexeclength = MAXPATHLEN;
|
||||
|
||||
//unixify(path);
|
||||
//unixify(rtpypath);
|
||||
//if (Py_VerboseFlag) PySys_WriteStderr("%s[%d]:\nENTER prog=\"%s\"\n path=\"%s\"\n", __func__, __LINE__, prog, path);
|
||||
|
||||
|
||||
/* ###########################################################################
|
||||
|
@ -520,7 +499,6 @@ calculate_path(void)
|
|||
strncpy(progpath, path, MAXPATHLEN);
|
||||
|
||||
joinpath(progpath, prog);
|
||||
//if (Py_VerboseFlag) PySys_WriteStderr("%s[%d]: progpath = \"%s\"\n", __func__, __LINE__, progpath);
|
||||
if (isxfile(progpath))
|
||||
break;
|
||||
|
||||
|
@ -539,10 +517,7 @@ calculate_path(void)
|
|||
argv0_path[MAXPATHLEN] = '\0';
|
||||
set_volume(volume_name, argv0_path);
|
||||
|
||||
//if (Py_VerboseFlag) PySys_WriteStderr("%s[%d]: volume_name = \"%s\"\n", __func__, __LINE__, volume_name);
|
||||
reduce(argv0_path);
|
||||
//if (Py_VerboseFlag) PySys_WriteStderr("%s[%d]: progpath = \"%s\"\n", __func__, __LINE__, progpath);
|
||||
//if (Py_VerboseFlag) PySys_WriteStderr("%s[%d]: argv0_path = \"%s\"\n", __func__, __LINE__, argv0_path);
|
||||
/* At this point, argv0_path is guaranteed to be less than
|
||||
MAXPATHLEN bytes long.
|
||||
*/
|
||||
|
@ -552,17 +527,9 @@ calculate_path(void)
|
|||
This is the full path to the platform independent libraries.
|
||||
########################################################################### */
|
||||
|
||||
//if (!(pfound = search_for_prefix(argv0_path, home))) {
|
||||
// if (!Py_FrozenFlag)
|
||||
// fprintf(stderr,
|
||||
// "Could not find platform independent libraries <prefix>\n");
|
||||
strncpy(prefix, volume_name, MAXPATHLEN);
|
||||
joinpath(prefix, PREFIX);
|
||||
joinpath(prefix, lib_python);
|
||||
//}
|
||||
//else
|
||||
// reduce(prefix);
|
||||
//if (Py_VerboseFlag) PySys_WriteStderr("%s[%d]: V = \"%s\", Prefix = \"%s\"\n", __func__, __LINE__, volume_name, prefix);
|
||||
|
||||
/* ###########################################################################
|
||||
Build the FULL path to the zipped-up Python library.
|
||||
|
@ -570,37 +537,20 @@ calculate_path(void)
|
|||
|
||||
strncpy(zip_path, prefix, MAXPATHLEN);
|
||||
zip_path[MAXPATHLEN] = '\0';
|
||||
//if (pfound > 0) { /* Use the reduced prefix returned by Py_GetPrefix() */
|
||||
reduce(zip_path);
|
||||
//reduce(zip_path);
|
||||
//}
|
||||
//else
|
||||
// strncpy(zip_path, PREFIX, MAXPATHLEN);
|
||||
reduce(zip_path);
|
||||
joinpath(zip_path, "python00.zip");
|
||||
bufsz = strlen(zip_path); /* Replace "00" with version */
|
||||
zip_path[bufsz - 6] = VERSION[0];
|
||||
zip_path[bufsz - 5] = VERSION[1];
|
||||
//if (Py_VerboseFlag) PySys_WriteStderr("%s[%d]: Zip_path = \"%s\"\n", __func__, __LINE__, zip_path);
|
||||
|
||||
/* ###########################################################################
|
||||
Build the FULL path to dynamically loadable libraries.
|
||||
########################################################################### */
|
||||
|
||||
//if (!(efound = search_for_exec_prefix(argv0_path, home))) {
|
||||
// if (!Py_FrozenFlag)
|
||||
// fprintf(stderr,
|
||||
// "Could not find platform dependent libraries <exec_prefix>\n");
|
||||
strncpy(exec_prefix, volume_name, MAXPATHLEN);
|
||||
joinpath(exec_prefix, EXEC_PREFIX);
|
||||
joinpath(exec_prefix, lib_python);
|
||||
joinpath(exec_prefix, "dynaload");
|
||||
//}
|
||||
/* If we found EXEC_PREFIX do *not* reduce it! (Yet.) */
|
||||
//if (Py_VerboseFlag) PySys_WriteStderr("%s[%d]: Exec_prefix = \"%s\"\n", __func__, __LINE__, exec_prefix);
|
||||
|
||||
//if ((!pfound || !efound) && !Py_FrozenFlag)
|
||||
// fprintf(stderr,
|
||||
// "Consider setting $PYTHONHOME to <prefix>[%c<exec_prefix>]\n", DELIM);
|
||||
joinpath(exec_prefix, "lib-dynload");
|
||||
|
||||
/* ###########################################################################
|
||||
Build the module search path.
|
||||
|
@ -611,7 +561,6 @@ calculate_path(void)
|
|||
* If we're loading relative to the build directory,
|
||||
* return the compiled-in defaults instead.
|
||||
*/
|
||||
//if (pfound > 0) {
|
||||
reduce(prefix);
|
||||
reduce(prefix);
|
||||
/* The prefix is the root directory, but reduce() chopped
|
||||
|
@ -624,11 +573,6 @@ calculate_path(void)
|
|||
prefix[bufsz] = SEP;
|
||||
prefix[bufsz+1] = 0;
|
||||
}
|
||||
//}
|
||||
//else
|
||||
// strncpy(prefix, PREFIX, MAXPATHLEN);
|
||||
|
||||
//if (Py_VerboseFlag) PySys_WriteStderr("%s[%d]: prefix = \"%s\"\n", __func__, __LINE__, prefix);
|
||||
|
||||
/* Calculate size of return buffer.
|
||||
*/
|
||||
|
@ -655,7 +599,6 @@ calculate_path(void)
|
|||
}
|
||||
defpath = delim + 1;
|
||||
}
|
||||
//if (Py_VerboseFlag) PySys_WriteStderr("%s[%d]: defpath = \"%s\"\n", __func__, __LINE__, defpath);
|
||||
|
||||
bufsz += strlen(zip_path) + 1;
|
||||
bufsz += strlen(exec_prefix) + 1;
|
||||
|
@ -670,7 +613,6 @@ calculate_path(void)
|
|||
module_search_path = PYTHONPATH;
|
||||
}
|
||||
else {
|
||||
//if (Py_VerboseFlag) PySys_WriteStderr("%s[%d]:\n", __func__, __LINE__);
|
||||
/* Run-time value of $PYTHONPATH goes first */
|
||||
if (rtpypath) {
|
||||
strcpy(buf, rtpypath);
|
||||
|
@ -678,12 +620,10 @@ calculate_path(void)
|
|||
}
|
||||
else
|
||||
buf[0] = '\0';
|
||||
//if (Py_VerboseFlag) PySys_WriteStderr("%s[%d]: RTpath = \"%s\"\n", __func__, __LINE__, buf);
|
||||
|
||||
/* Next is the default zip path */
|
||||
strcat(buf, zip_path);
|
||||
strcat(buf, delimiter);
|
||||
//if (Py_VerboseFlag) PySys_WriteStderr("%s[%d]: +Zip = \"%s\"\n", __func__, __LINE__, buf);
|
||||
|
||||
/* Next goes merge of compile-time $PYTHONPATH with
|
||||
* dynamically located prefix.
|
||||
|
@ -710,17 +650,13 @@ calculate_path(void)
|
|||
defpath = delim + 1;
|
||||
}
|
||||
strcat(buf, delimiter);
|
||||
//if (Py_VerboseFlag) PySys_WriteStderr("%s[%d]: +Merge = \"%s\"\n", __func__, __LINE__, buf);
|
||||
|
||||
/* Finally, on goes the directory for dynamic-load modules */
|
||||
strcat(buf, exec_prefix);
|
||||
|
||||
/* And publish the results */
|
||||
module_search_path = buf;
|
||||
//if (Py_VerboseFlag) PySys_WriteStderr("%s[%d]: module_search_path = \"%s\"\n", __func__, __LINE__, module_search_path);
|
||||
}
|
||||
|
||||
//if (efound > 0) {
|
||||
/* At this point, exec_prefix is set to VOL:/Efi/StdLib/lib/python.27/dynalib.
|
||||
We want to get back to the root value, so we have to remove the final three
|
||||
segments to get VOL:/Efi/StdLib. Because we don't know what VOL is, and
|
||||
|
@ -737,9 +673,6 @@ calculate_path(void)
|
|||
exec_prefix[bufsz] = SEP;
|
||||
exec_prefix[bufsz+1] = 0;
|
||||
}
|
||||
//}
|
||||
//else
|
||||
// strncpy(exec_prefix, EXEC_PREFIX, MAXPATHLEN);
|
||||
if (Py_VerboseFlag) PySys_WriteStderr("%s[%d]: module_search_path = \"%s\"\n", __func__, __LINE__, module_search_path);
|
||||
if (Py_VerboseFlag) PySys_WriteStderr("%s[%d]: prefix = \"%s\"\n", __func__, __LINE__, prefix);
|
||||
if (Py_VerboseFlag) PySys_WriteStderr("%s[%d]: exec_prefix = \"%s\"\n", __func__, __LINE__, exec_prefix);
|
||||
|
|
|
@ -10,16 +10,15 @@
|
|||
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
||||
**/
|
||||
|
||||
|
||||
#ifndef Py_PYCONFIG_H
|
||||
#define Py_PYCONFIG_H
|
||||
|
||||
#define PLATFORM "UEFI 2.3 Ia32"
|
||||
#include <Uefi.h>
|
||||
|
||||
//#ifndef PYTHONPATH
|
||||
//# define PYTHONPATH "/Efi/StdLib/lib/python.27;/Efi/StdLib/lib/python.27/lib-dynload"
|
||||
//#endif
|
||||
/* Define to indicate that code is being built to run in the UEFI Environment. */
|
||||
#define UEFI_ENV EFI_SYSTEM_TABLE_REVISION
|
||||
|
||||
#define PLATFORM "UEFI"
|
||||
|
||||
/* Define if building universal (internal helper macro) */
|
||||
#undef AC_APPLE_UNIVERSAL_BUILD
|
||||
|
@ -185,7 +184,7 @@
|
|||
|
||||
/* Define to 1 if you have the <dirent.h> header file, and it defines `DIR'.
|
||||
*/
|
||||
#undef HAVE_DIRENT_H
|
||||
#define HAVE_DIRENT_H 1
|
||||
|
||||
/* Define to 1 if you have the <dlfcn.h> header file. */
|
||||
#undef HAVE_DLFCN_H
|
||||
|
@ -328,7 +327,7 @@
|
|||
#undef HAVE_GETPAGESIZE
|
||||
|
||||
/* Define to 1 if you have the `getpeername' function. */
|
||||
#undef HAVE_GETPEERNAME
|
||||
#define HAVE_GETPEERNAME 1
|
||||
|
||||
/* Define to 1 if you have the `getpgid' function. */
|
||||
#undef HAVE_GETPGID
|
||||
|
@ -514,10 +513,10 @@
|
|||
#undef HAVE_PLOCK
|
||||
|
||||
/* Define to 1 if you have the `poll' function. */
|
||||
#undef HAVE_POLL
|
||||
#define HAVE_POLL 1
|
||||
|
||||
/* Define to 1 if you have the <poll.h> header file. */
|
||||
#define HAVE_POLL_H 1
|
||||
#undef HAVE_POLL_H
|
||||
|
||||
/* Define to 1 if you have the <process.h> header file. */
|
||||
#undef HAVE_PROCESS_H
|
||||
|
@ -550,7 +549,7 @@
|
|||
#undef HAVE_READLINK
|
||||
|
||||
/* Define to 1 if you have the `realpath' function. */
|
||||
#undef HAVE_REALPATH
|
||||
#define HAVE_REALPATH 1
|
||||
|
||||
/* Define if you have readline 2.1 */
|
||||
#undef HAVE_RL_CALLBACK
|
||||
|
@ -577,7 +576,7 @@
|
|||
#undef HAVE_ROUND
|
||||
|
||||
/* Define to 1 if you have the `select' function. */
|
||||
#undef HAVE_SELECT
|
||||
#define HAVE_SELECT 1
|
||||
|
||||
/* Define to 1 if you have the `sem_getvalue' function. */
|
||||
#undef HAVE_SEM_GETVALUE
|
||||
|
@ -824,7 +823,7 @@
|
|||
#define HAVE_TEMPNAM 1
|
||||
|
||||
/* Define to 1 if you have the <termios.h> header file. */
|
||||
#define HAVE_TERMIOS_H 1
|
||||
#undef HAVE_TERMIOS_H
|
||||
|
||||
/* Define to 1 if you have the <term.h> header file. */
|
||||
#undef HAVE_TERM_H
|
||||
|
@ -888,7 +887,7 @@
|
|||
#undef HAVE_UTIMES
|
||||
|
||||
/* Define to 1 if you have the <utime.h> header file. */
|
||||
#undef HAVE_UTIME_H
|
||||
#define HAVE_UTIME_H 1
|
||||
|
||||
/* Define to 1 if you have the `wait3' function. */
|
||||
#undef HAVE_WAIT3
|
||||
|
|
|
@ -1,9 +1,24 @@
|
|||
/* pyconfig.h.in. Generated from configure.in by autoheader. */
|
||||
/** @file
|
||||
Manually generated Python Configuration file for EDK II.
|
||||
|
||||
Copyright (c) 2011, Intel Corporation. All rights reserved.<BR>
|
||||
This program and the accompanying materials are licensed and made available under
|
||||
the terms and conditions of the BSD License that accompanies this distribution.
|
||||
The full text of the license may be found at
|
||||
http://opensource.org/licenses/bsd-license.
|
||||
|
||||
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
||||
**/
|
||||
#ifndef Py_PYCONFIG_H
|
||||
#define Py_PYCONFIG_H
|
||||
|
||||
#include <Uefi.h>
|
||||
|
||||
/* Define to indicate that code is being built to run in the UEFI Environment. */
|
||||
#define UEFI_ENV EFI_SYSTEM_TABLE_REVISION
|
||||
|
||||
#define PLATFORM "UEFI"
|
||||
|
||||
/* Define if building universal (internal helper macro) */
|
||||
#undef AC_APPLE_UNIVERSAL_BUILD
|
||||
|
@ -89,16 +104,16 @@
|
|||
#undef HAVE_BROKEN_POLL
|
||||
|
||||
/* Define if the Posix semaphores do not work on your system */
|
||||
#define HAVE_BROKEN_POSIX_SEMAPHORES
|
||||
#define HAVE_BROKEN_POSIX_SEMAPHORES 1
|
||||
|
||||
/* Define if pthread_sigmask() does not work on your system. */
|
||||
#define HAVE_BROKEN_PTHREAD_SIGMASK
|
||||
#define HAVE_BROKEN_PTHREAD_SIGMASK 1
|
||||
|
||||
/* define to 1 if your sem_getvalue is broken. */
|
||||
#undef HAVE_BROKEN_SEM_GETVALUE
|
||||
#define HAVE_BROKEN_SEM_GETVALUE 1
|
||||
|
||||
/* Define this if you have the type _Bool. */
|
||||
#define HAVE_C99_BOOL
|
||||
#define HAVE_C99_BOOL 1
|
||||
|
||||
/* Define to 1 if you have the `chflags' function. */
|
||||
#undef HAVE_CHFLAGS
|
||||
|
@ -110,7 +125,7 @@
|
|||
#undef HAVE_CHROOT
|
||||
|
||||
/* Define to 1 if you have the `clock' function. */
|
||||
#define HAVE_CLOCK
|
||||
#define HAVE_CLOCK 1
|
||||
|
||||
/* Define to 1 if you have the `confstr' function. */
|
||||
#undef HAVE_CONFSTR
|
||||
|
@ -119,7 +134,7 @@
|
|||
#undef HAVE_CONIO_H
|
||||
|
||||
/* Define to 1 if you have the `copysign' function. */
|
||||
#define HAVE_COPYSIGN 1
|
||||
#undef HAVE_COPYSIGN
|
||||
|
||||
/* Define to 1 if you have the `ctermid' function. */
|
||||
#undef HAVE_CTERMID
|
||||
|
@ -169,7 +184,7 @@
|
|||
|
||||
/* Define to 1 if you have the <dirent.h> header file, and it defines `DIR'.
|
||||
*/
|
||||
#undef HAVE_DIRENT_H
|
||||
#define HAVE_DIRENT_H 1
|
||||
|
||||
/* Define to 1 if you have the <dlfcn.h> header file. */
|
||||
#undef HAVE_DLFCN_H
|
||||
|
@ -269,10 +284,10 @@
|
|||
#undef HAVE_GETADDRINFO
|
||||
|
||||
/* Define to 1 if you have the `getcwd' function. */
|
||||
#undef HAVE_GETCWD
|
||||
#define HAVE_GETCWD 1
|
||||
|
||||
/* Define this if you have flockfile(), getc_unlocked(), and funlockfile() */
|
||||
#define HAVE_GETC_UNLOCKED
|
||||
#undef HAVE_GETC_UNLOCKED
|
||||
|
||||
/* Define to 1 if you have the `getgroups' function. */
|
||||
#undef HAVE_GETGROUPS
|
||||
|
@ -308,7 +323,7 @@
|
|||
#undef HAVE_GETPAGESIZE
|
||||
|
||||
/* Define to 1 if you have the `getpeername' function. */
|
||||
#undef HAVE_GETPEERNAME
|
||||
#define HAVE_GETPEERNAME 1
|
||||
|
||||
/* Define to 1 if you have the `getpgid' function. */
|
||||
#undef HAVE_GETPGID
|
||||
|
@ -359,10 +374,10 @@
|
|||
#undef HAVE_IEEEFP_H
|
||||
|
||||
/* Define if you have the 'inet_aton' function. */
|
||||
#undef HAVE_INET_ATON
|
||||
#define HAVE_INET_ATON 1
|
||||
|
||||
/* Define if you have the 'inet_pton' function. */
|
||||
#undef HAVE_INET_PTON
|
||||
#define HAVE_INET_PTON 1
|
||||
|
||||
/* Define to 1 if you have the `initgroups' function. */
|
||||
#undef HAVE_INITGROUPS
|
||||
|
@ -383,7 +398,7 @@
|
|||
#undef HAVE_KQUEUE
|
||||
|
||||
/* Define to 1 if you have the <langinfo.h> header file. */
|
||||
#define HAVE_LANGINFO_H 1
|
||||
#undef HAVE_LANGINFO_H /* non-functional in EFI. */
|
||||
|
||||
/* Defined to enable large file support when an off_t is bigger than a long
|
||||
and long long is available and at least as big as an off_t. You may need to
|
||||
|
@ -437,10 +452,10 @@
|
|||
#undef HAVE_LOG1P
|
||||
|
||||
/* Define this if you have the type long double. */
|
||||
#define HAVE_LONG_DOUBLE
|
||||
#undef HAVE_LONG_DOUBLE
|
||||
|
||||
/* Define this if you have the type long long. */
|
||||
#define HAVE_LONG_LONG
|
||||
#define HAVE_LONG_LONG 1
|
||||
|
||||
/* Define to 1 if you have the `lstat' function. */
|
||||
#define HAVE_LSTAT 1
|
||||
|
@ -494,7 +509,7 @@
|
|||
#undef HAVE_PLOCK
|
||||
|
||||
/* Define to 1 if you have the `poll' function. */
|
||||
#undef HAVE_POLL
|
||||
#define HAVE_POLL 1
|
||||
|
||||
/* Define to 1 if you have the <poll.h> header file. */
|
||||
#undef HAVE_POLL_H
|
||||
|
@ -503,7 +518,7 @@
|
|||
#undef HAVE_PROCESS_H
|
||||
|
||||
/* Define if your compiler supports function prototype */
|
||||
#define HAVE_PROTOTYPES
|
||||
#define HAVE_PROTOTYPES 1
|
||||
|
||||
/* Define if you have GNU PTH threads. */
|
||||
#undef HAVE_PTH
|
||||
|
@ -530,7 +545,7 @@
|
|||
#undef HAVE_READLINK
|
||||
|
||||
/* Define to 1 if you have the `realpath' function. */
|
||||
#undef HAVE_REALPATH
|
||||
#define HAVE_REALPATH 1
|
||||
|
||||
/* Define if you have readline 2.1 */
|
||||
#undef HAVE_RL_CALLBACK
|
||||
|
@ -557,7 +572,7 @@
|
|||
#undef HAVE_ROUND
|
||||
|
||||
/* Define to 1 if you have the `select' function. */
|
||||
#undef HAVE_SELECT
|
||||
#define HAVE_SELECT 1
|
||||
|
||||
/* Define to 1 if you have the `sem_getvalue' function. */
|
||||
#undef HAVE_SEM_GETVALUE
|
||||
|
@ -614,7 +629,7 @@
|
|||
#undef HAVE_SETUID
|
||||
|
||||
/* Define to 1 if you have the `setvbuf' function. */
|
||||
#undef HAVE_SETVBUF
|
||||
#define HAVE_SETVBUF 1
|
||||
|
||||
/* Define to 1 if you have the <shadow.h> header file. */
|
||||
#undef HAVE_SHADOW_H
|
||||
|
@ -647,7 +662,7 @@
|
|||
#undef HAVE_SPAWN_H
|
||||
|
||||
/* Define if your compiler provides ssize_t */
|
||||
#undef HAVE_SSIZE_T
|
||||
#define HAVE_SSIZE_T 1
|
||||
|
||||
/* Define to 1 if you have the `statvfs' function. */
|
||||
#undef HAVE_STATVFS
|
||||
|
@ -660,7 +675,7 @@
|
|||
|
||||
/* Define if your compiler supports variable length function prototypes (e.g.
|
||||
void fprintf(FILE *, char *, ...);) *and* <stdarg.h> */
|
||||
#define HAVE_STDARG_PROTOTYPES
|
||||
#define HAVE_STDARG_PROTOTYPES 1
|
||||
|
||||
/* Define to 1 if you have the <stdint.h> header file. */
|
||||
#define HAVE_STDINT_H 1
|
||||
|
@ -756,16 +771,16 @@
|
|||
#define HAVE_SYS_PARAM_H 1
|
||||
|
||||
/* Define to 1 if you have the <sys/poll.h> header file. */
|
||||
#undef HAVE_SYS_POLL_H
|
||||
#define HAVE_SYS_POLL_H 1
|
||||
|
||||
/* Define to 1 if you have the <sys/resource.h> header file. */
|
||||
#define HAVE_SYS_RESOURCE_H 1
|
||||
|
||||
/* Define to 1 if you have the <sys/select.h> header file. */
|
||||
#undef HAVE_SYS_SELECT_H
|
||||
#define HAVE_SYS_SELECT_H 1
|
||||
|
||||
/* Define to 1 if you have the <sys/socket.h> header file. */
|
||||
#undef HAVE_SYS_SOCKET_H
|
||||
#define HAVE_SYS_SOCKET_H 1
|
||||
|
||||
/* Define to 1 if you have the <sys/statvfs.h> header file. */
|
||||
#undef HAVE_SYS_STATVFS_H
|
||||
|
@ -804,7 +819,7 @@
|
|||
#define HAVE_TEMPNAM 1
|
||||
|
||||
/* Define to 1 if you have the <termios.h> header file. */
|
||||
#define HAVE_TERMIOS_H 1
|
||||
#undef HAVE_TERMIOS_H
|
||||
|
||||
/* Define to 1 if you have the <term.h> header file. */
|
||||
#undef HAVE_TERM_H
|
||||
|
@ -851,7 +866,7 @@
|
|||
#undef HAVE_UNAME
|
||||
|
||||
/* Define to 1 if you have the <unistd.h> header file. */
|
||||
#undef HAVE_UNISTD_H
|
||||
#define HAVE_UNISTD_H 1
|
||||
|
||||
/* Define to 1 if you have the `unsetenv' function. */
|
||||
#undef HAVE_UNSETENV
|
||||
|
@ -859,7 +874,7 @@
|
|||
/* Define if you have a useable wchar_t type defined in wchar.h; useable means
|
||||
wchar_t must be an unsigned type with at least 16 bits. (see
|
||||
Include/unicodeobject.h). */
|
||||
#define HAVE_USABLE_WCHAR_T
|
||||
#define HAVE_USABLE_WCHAR_T 1
|
||||
|
||||
/* Define to 1 if you have the <util.h> header file. */
|
||||
#undef HAVE_UTIL_H
|
||||
|
@ -868,7 +883,7 @@
|
|||
#undef HAVE_UTIMES
|
||||
|
||||
/* Define to 1 if you have the <utime.h> header file. */
|
||||
#undef HAVE_UTIME_H
|
||||
#define HAVE_UTIME_H 1
|
||||
|
||||
/* Define to 1 if you have the `wait3' function. */
|
||||
#undef HAVE_WAIT3
|
||||
|
@ -880,14 +895,14 @@
|
|||
#undef HAVE_WAITPID
|
||||
|
||||
/* Define if the compiler provides a wchar.h header file. */
|
||||
#define HAVE_WCHAR_H
|
||||
#define HAVE_WCHAR_H 1
|
||||
|
||||
/* Define to 1 if you have the `wcscoll' function. */
|
||||
#undef HAVE_WCSCOLL
|
||||
#define HAVE_WCSCOLL 1
|
||||
|
||||
/* Define if tzset() actually switches the local timezone in a meaningful way.
|
||||
*/
|
||||
#define HAVE_WORKING_TZSET
|
||||
#undef HAVE_WORKING_TZSET
|
||||
|
||||
/* Define if the zlib library has inflateCopy */
|
||||
#undef HAVE_ZLIB_COPY
|
||||
|
@ -913,25 +928,25 @@
|
|||
#undef MVWDELCH_IS_EXPRESSION
|
||||
|
||||
/* Define to the address where bug reports for this package should be sent. */
|
||||
#undef PACKAGE_BUGREPORT
|
||||
#define PACKAGE_BUGREPORT "edk2-devel@lists.sourceforge.net"
|
||||
|
||||
/* Define to the full name of this package. */
|
||||
#define PACKAGE_NAME EDK II Python Package
|
||||
#define PACKAGE_NAME "EDK II Python Package"
|
||||
|
||||
/* Define to the full name and version of this package. */
|
||||
#define PACKAGE_STRING EDK II Python Package V0.1
|
||||
#define PACKAGE_STRING "EDK II Python Package V0.2"
|
||||
|
||||
/* Define to the one symbol short name of this package. */
|
||||
#define PACKAGE_TARNAME UDK_Python
|
||||
#define PACKAGE_TARNAME "EADK_Python"
|
||||
|
||||
/* Define to the home page for this package. */
|
||||
#define PACKAGE_URL http://edk2.tianocore.org/toolkit/python
|
||||
#define PACKAGE_URL "http://edk2.tianocore.org/toolkit/python"
|
||||
|
||||
/* Define to the version of this package. */
|
||||
#undef PACKAGE_VERSION V0.1
|
||||
#define PACKAGE_VERSION "V0.2"
|
||||
|
||||
/* Define if POSIX semaphores aren't enabled on your system */
|
||||
#define POSIX_SEMAPHORES_NOT_ENABLED
|
||||
#define POSIX_SEMAPHORES_NOT_ENABLED 1
|
||||
|
||||
/* Defined if PTHREAD_SCOPE_SYSTEM supported. */
|
||||
#undef PTHREAD_SYSTEM_SCHED_SUPPORTED
|
||||
|
@ -940,13 +955,13 @@
|
|||
#undef PYLONG_BITS_IN_DIGIT
|
||||
|
||||
/* Define to printf format modifier for long long type */
|
||||
#undef PY_FORMAT_LONG_LONG
|
||||
#define PY_FORMAT_LONG_LONG "ll"
|
||||
|
||||
/* Define to printf format modifier for Py_ssize_t */
|
||||
#undef PY_FORMAT_SIZE_T
|
||||
#define PY_FORMAT_SIZE_T "z"
|
||||
|
||||
/* Define as the integral type used for Unicode representation. */
|
||||
#undef PY_UNICODE_TYPE
|
||||
#define PY_UNICODE_TYPE wchar_t
|
||||
|
||||
/* Define if you want to build an interpreter with many run-time checks. */
|
||||
#undef Py_DEBUG
|
||||
|
@ -973,55 +988,59 @@
|
|||
#undef SIGNED_RIGHT_SHIFT_ZERO_FILLS
|
||||
|
||||
/* The size of `double', as computed by sizeof. */
|
||||
#undef SIZEOF_DOUBLE
|
||||
#define SIZEOF_DOUBLE 8
|
||||
|
||||
/* The size of `float', as computed by sizeof. */
|
||||
#undef SIZEOF_FLOAT
|
||||
#define SIZEOF_FLOAT 4
|
||||
|
||||
/* The size of `fpos_t', as computed by sizeof. */
|
||||
#undef SIZEOF_FPOS_T
|
||||
#define SIZEOF_FPOS_T 8
|
||||
|
||||
/* The size of `int', as computed by sizeof. */
|
||||
#undef SIZEOF_INT
|
||||
#define SIZEOF_INT 4
|
||||
|
||||
/* The size of `long', as computed by sizeof. */
|
||||
#undef SIZEOF_LONG
|
||||
#if defined(_MSC_VER) /* Handle Microsoft VC++ compiler specifics. */
|
||||
#define SIZEOF_LONG 4
|
||||
#else
|
||||
#define SIZEOF_LONG 8
|
||||
#endif
|
||||
|
||||
/* The size of `long double', as computed by sizeof. */
|
||||
#undef SIZEOF_LONG_DOUBLE
|
||||
|
||||
/* The size of `long long', as computed by sizeof. */
|
||||
#undef SIZEOF_LONG_LONG
|
||||
#define SIZEOF_LONG_LONG 8
|
||||
|
||||
/* The size of `off_t', as computed by sizeof. */
|
||||
#undef SIZEOF_OFF_T
|
||||
#define SIZEOF_OFF_T 8
|
||||
|
||||
/* The size of `pid_t', as computed by sizeof. */
|
||||
#undef SIZEOF_PID_T
|
||||
#define SIZEOF_PID_T 4
|
||||
|
||||
/* The size of `pthread_t', as computed by sizeof. */
|
||||
#undef SIZEOF_PTHREAD_T
|
||||
|
||||
/* The size of `short', as computed by sizeof. */
|
||||
#undef SIZEOF_SHORT
|
||||
#define SIZEOF_SHORT 2
|
||||
|
||||
/* The size of `size_t', as computed by sizeof. */
|
||||
#undef SIZEOF_SIZE_T
|
||||
#define SIZEOF_SIZE_T 8
|
||||
|
||||
/* The size of `time_t', as computed by sizeof. */
|
||||
#undef SIZEOF_TIME_T
|
||||
#define SIZEOF_TIME_T 4
|
||||
|
||||
/* The size of `uintptr_t', as computed by sizeof. */
|
||||
#undef SIZEOF_UINTPTR_T
|
||||
#define SIZEOF_UINTPTR_T 8
|
||||
|
||||
/* The size of `void *', as computed by sizeof. */
|
||||
#undef SIZEOF_VOID_P
|
||||
#define SIZEOF_VOID_P 8
|
||||
|
||||
/* The size of `wchar_t', as computed by sizeof. */
|
||||
#undef SIZEOF_WCHAR_T
|
||||
#define SIZEOF_WCHAR_T 2
|
||||
|
||||
/* The size of `_Bool', as computed by sizeof. */
|
||||
#undef SIZEOF__BOOL
|
||||
#define SIZEOF__BOOL 1
|
||||
|
||||
/* Define to 1 if you have the ANSI C header files. */
|
||||
#define STDC_HEADERS 1
|
||||
|
@ -1190,59 +1209,52 @@
|
|||
#undef __EXTENSIONS__
|
||||
|
||||
/* Define to 'long' if <time.h> doesn't define. */
|
||||
#undef clock_t
|
||||
//#undef clock_t
|
||||
|
||||
/* Define to empty if `const' does not conform to ANSI C. */
|
||||
#undef const
|
||||
//#undef const
|
||||
|
||||
/* Define to `int' if <sys/types.h> doesn't define. */
|
||||
#undef gid_t
|
||||
//#undef gid_t
|
||||
|
||||
/* Define to the type of a signed integer type of width exactly 32 bits if
|
||||
such a type exists and the standard includes do not define it. */
|
||||
#undef int32_t
|
||||
//#undef int32_t
|
||||
|
||||
/* Define to the type of a signed integer type of width exactly 64 bits if
|
||||
such a type exists and the standard includes do not define it. */
|
||||
#undef int64_t
|
||||
//#undef int64_t
|
||||
|
||||
/* Define to `int' if <sys/types.h> does not define. */
|
||||
#undef mode_t
|
||||
//#undef mode_t
|
||||
|
||||
/* Define to `long int' if <sys/types.h> does not define. */
|
||||
#undef off_t
|
||||
//#undef off_t
|
||||
|
||||
/* Define to `int' if <sys/types.h> does not define. */
|
||||
#undef pid_t
|
||||
//#undef pid_t
|
||||
|
||||
/* Define to empty if the keyword does not work. */
|
||||
#undef signed
|
||||
//#undef signed
|
||||
|
||||
/* Define to `unsigned int' if <sys/types.h> does not define. */
|
||||
#undef size_t
|
||||
//#undef size_t
|
||||
|
||||
/* Define to `int' if <sys/socket.h> does not define. */
|
||||
#undef socklen_t
|
||||
//#undef socklen_t
|
||||
|
||||
/* Define to `int' if <sys/types.h> doesn't define. */
|
||||
#undef uid_t
|
||||
//#undef uid_t
|
||||
|
||||
/* Define to the type of an unsigned integer type of width exactly 32 bits if
|
||||
such a type exists and the standard includes do not define it. */
|
||||
#undef uint32_t
|
||||
//#undef uint32_t
|
||||
|
||||
/* Define to the type of an unsigned integer type of width exactly 64 bits if
|
||||
such a type exists and the standard includes do not define it. */
|
||||
#undef uint64_t
|
||||
//#undef uint64_t
|
||||
|
||||
/* Define to empty if the keyword does not work. */
|
||||
#undef volatile
|
||||
|
||||
|
||||
/* Define the macros needed if on a UnixWare 7.x system. */
|
||||
#if defined(__USLC__) && defined(__SCO_VERSION__)
|
||||
#define STRICT_SYSV_CURSES /* Don't use ncurses extensions */
|
||||
#endif
|
||||
//#undef volatile
|
||||
|
||||
#endif /*Py_PYCONFIG_H*/
|
||||
|
||||
|
|
|
@ -18,7 +18,7 @@ extern "C" {
|
|||
|
||||
|
||||
/* Mod by chrish: QNX has WATCOM, but isn't DOS */
|
||||
#if !defined(__QNX__) && !defined(EFIAPI)
|
||||
#if !defined(__QNX__) && !defined(UEFI_ENV)
|
||||
#if defined(MS_WINDOWS) || defined(__BORLANDC__) || defined(__WATCOMC__) || defined(__DJGPP__) || defined(PYOS_OS2)
|
||||
#if defined(PYOS_OS2) && defined(PYCC_GCC)
|
||||
#define MAXPATHLEN 260
|
||||
|
@ -57,8 +57,9 @@ extern "C" {
|
|||
|
||||
/* Search path entry delimiter */
|
||||
#ifndef DELIM
|
||||
#ifdef EFIAPI
|
||||
#ifdef UEFI_ENV
|
||||
#define DELIM ';'
|
||||
#define DELIM_STR ";"
|
||||
#else
|
||||
#define DELIM ':'
|
||||
#endif
|
||||
|
|
|
@ -0,0 +1,528 @@
|
|||
# Module 'ntpath' -- common operations on WinNT/Win95 pathnames
|
||||
"""Common pathname manipulations, WindowsNT/95 version.
|
||||
|
||||
Instead of importing this module directly, import os and refer to this
|
||||
module as os.path.
|
||||
"""
|
||||
|
||||
import os
|
||||
import sys
|
||||
import stat
|
||||
import genericpath
|
||||
import warnings
|
||||
|
||||
from genericpath import *
|
||||
|
||||
__all__ = ["normcase","isabs","join","splitdrive","split","splitext",
|
||||
"basename","dirname","commonprefix","getsize","getmtime",
|
||||
"getatime","getctime", "islink","exists","lexists","isdir","isfile",
|
||||
"ismount","walk","expanduser","expandvars","normpath","abspath",
|
||||
"splitunc","curdir","pardir","sep","pathsep","defpath","altsep",
|
||||
"extsep","devnull","realpath","supports_unicode_filenames","relpath"]
|
||||
|
||||
# strings representing various path-related bits and pieces
|
||||
curdir = '.'
|
||||
pardir = '..'
|
||||
extsep = '.'
|
||||
sep = '\\'
|
||||
pathsep = ';'
|
||||
altsep = '/'
|
||||
defpath = '.;C:\\bin'
|
||||
if 'ce' in sys.builtin_module_names:
|
||||
defpath = '\\Windows'
|
||||
elif 'os2' in sys.builtin_module_names:
|
||||
# OS/2 w/ VACPP
|
||||
altsep = '/'
|
||||
devnull = 'nul'
|
||||
|
||||
# Normalize the case of a pathname and map slashes to backslashes.
|
||||
# Other normalizations (such as optimizing '../' away) are not done
|
||||
# (this is done by normpath).
|
||||
|
||||
def normcase(s):
|
||||
"""Normalize case of pathname.
|
||||
|
||||
Makes all characters lowercase and all slashes into backslashes."""
|
||||
return s.replace("/", "\\").lower()
|
||||
|
||||
|
||||
# Return whether a path is absolute.
|
||||
# Trivial in Posix, harder on the Mac or MS-DOS.
|
||||
# For DOS it is absolute if it starts with a slash or backslash (current
|
||||
# volume), or if a pathname after the volume letter and colon / UNC resource
|
||||
# starts with a slash or backslash.
|
||||
|
||||
def isabs(s):
|
||||
"""Test whether a path is absolute"""
|
||||
s = splitdrive(s)[1]
|
||||
return s != '' and s[:1] in '/\\'
|
||||
|
||||
|
||||
# Join two (or more) paths.
|
||||
|
||||
def join(a, *p):
|
||||
"""Join two or more pathname components, inserting "\\" as needed.
|
||||
If any component is an absolute path, all previous path components
|
||||
will be discarded."""
|
||||
path = a
|
||||
for b in p:
|
||||
b_wins = 0 # set to 1 iff b makes path irrelevant
|
||||
if path == "":
|
||||
b_wins = 1
|
||||
|
||||
elif isabs(b):
|
||||
# This probably wipes out path so far. However, it's more
|
||||
# complicated if path begins with a drive letter:
|
||||
# 1. join('c:', '/a') == 'c:/a'
|
||||
# 2. join('c:/', '/a') == 'c:/a'
|
||||
# But
|
||||
# 3. join('c:/a', '/b') == '/b'
|
||||
# 4. join('c:', 'd:/') = 'd:/'
|
||||
# 5. join('c:/', 'd:/') = 'd:/'
|
||||
if path[1:2] != ":" or b[1:2] == ":":
|
||||
# Path doesn't start with a drive letter, or cases 4 and 5.
|
||||
b_wins = 1
|
||||
|
||||
# Else path has a drive letter, and b doesn't but is absolute.
|
||||
elif len(path) > 3 or (len(path) == 3 and
|
||||
path[-1] not in "/\\"):
|
||||
# case 3
|
||||
b_wins = 1
|
||||
|
||||
if b_wins:
|
||||
path = b
|
||||
else:
|
||||
# Join, and ensure there's a separator.
|
||||
assert len(path) > 0
|
||||
if path[-1] in "/\\":
|
||||
if b and b[0] in "/\\":
|
||||
path += b[1:]
|
||||
else:
|
||||
path += b
|
||||
elif path[-1] == ":":
|
||||
path += b
|
||||
elif b:
|
||||
if b[0] in "/\\":
|
||||
path += b
|
||||
else:
|
||||
path += "\\" + b
|
||||
else:
|
||||
# path is not empty and does not end with a backslash,
|
||||
# but b is empty; since, e.g., split('a/') produces
|
||||
# ('a', ''), it's best if join() adds a backslash in
|
||||
# this case.
|
||||
path += '\\'
|
||||
|
||||
return path
|
||||
|
||||
|
||||
# Split a path in a drive specification (a drive letter followed by a
|
||||
# colon) and the path specification.
|
||||
# It is always true that drivespec + pathspec == p
|
||||
def splitdrive(p):
|
||||
"""Split a pathname into drive and path specifiers. Returns a 2-tuple
|
||||
"(drive,path)"; either part may be empty"""
|
||||
pparts = p.split(':', 2)
|
||||
numparts = len(pparts)
|
||||
if numparts == 2:
|
||||
return pparts[0] + ':', pparts[1]
|
||||
else:
|
||||
if numparts == 1:
|
||||
return '', pparts[0]
|
||||
return '', p
|
||||
|
||||
|
||||
# Parse UNC paths
|
||||
def splitunc(p):
|
||||
"""Split a pathname into UNC mount point and relative path specifiers.
|
||||
|
||||
Return a 2-tuple (unc, rest); either part may be empty.
|
||||
If unc is not empty, it has the form '//host/mount' (or similar
|
||||
using backslashes). unc+rest is always the input path.
|
||||
Paths containing drive letters never have an UNC part.
|
||||
"""
|
||||
if len(p.split(':', 2)) > 1:
|
||||
return '', p # Drive letter present
|
||||
firstTwo = p[0:2]
|
||||
if firstTwo == '//' or firstTwo == '\\\\':
|
||||
# is a UNC path:
|
||||
# vvvvvvvvvvvvvvvvvvvv equivalent to drive letter
|
||||
# \\machine\mountpoint\directories...
|
||||
# directory ^^^^^^^^^^^^^^^
|
||||
normp = normcase(p)
|
||||
index = normp.find('\\', 2)
|
||||
if index == -1:
|
||||
##raise RuntimeError, 'illegal UNC path: "' + p + '"'
|
||||
return ("", p)
|
||||
index = normp.find('\\', index + 1)
|
||||
if index == -1:
|
||||
index = len(p)
|
||||
return p[:index], p[index:]
|
||||
return '', p
|
||||
|
||||
|
||||
# Split a path in head (everything up to the last '/') and tail (the
|
||||
# rest). After the trailing '/' is stripped, the invariant
|
||||
# join(head, tail) == p holds.
|
||||
# The resulting head won't end in '/' unless it is the root.
|
||||
|
||||
def split(p):
|
||||
"""Split a pathname.
|
||||
|
||||
Return tuple (head, tail) where tail is everything after the final slash.
|
||||
Either part may be empty."""
|
||||
|
||||
d, p = splitdrive(p)
|
||||
# set i to index beyond p's last slash
|
||||
i = len(p)
|
||||
while i and p[i-1] not in '/\\':
|
||||
i = i - 1
|
||||
head, tail = p[:i], p[i:] # now tail has no slashes
|
||||
# remove trailing slashes from head, unless it's all slashes
|
||||
head2 = head
|
||||
while head2 and head2[-1] in '/\\':
|
||||
head2 = head2[:-1]
|
||||
head = head2 or head
|
||||
return d + head, tail
|
||||
|
||||
|
||||
# Split a path in root and extension.
|
||||
# The extension is everything starting at the last dot in the last
|
||||
# pathname component; the root is everything before that.
|
||||
# It is always true that root + ext == p.
|
||||
|
||||
def splitext(p):
|
||||
return genericpath._splitext(p, sep, altsep, extsep)
|
||||
splitext.__doc__ = genericpath._splitext.__doc__
|
||||
|
||||
|
||||
# Return the tail (basename) part of a path.
|
||||
|
||||
def basename(p):
|
||||
"""Returns the final component of a pathname"""
|
||||
return split(p)[1]
|
||||
|
||||
|
||||
# Return the head (dirname) part of a path.
|
||||
|
||||
def dirname(p):
|
||||
"""Returns the directory component of a pathname"""
|
||||
return split(p)[0]
|
||||
|
||||
# Is a path a symbolic link?
|
||||
# This will always return false on systems where posix.lstat doesn't exist.
|
||||
|
||||
def islink(path):
|
||||
"""Test for symbolic link.
|
||||
On WindowsNT/95 and OS/2 always returns false
|
||||
"""
|
||||
return False
|
||||
|
||||
# alias exists to lexists
|
||||
lexists = exists
|
||||
|
||||
# Is a path a mount point? Either a root (with or without drive letter)
|
||||
# or an UNC path with at most a / or \ after the mount point.
|
||||
|
||||
def ismount(path):
|
||||
"""Test whether a path is a mount point (defined as root of drive)"""
|
||||
unc, rest = splitunc(path)
|
||||
if unc:
|
||||
return rest in ("", "/", "\\")
|
||||
p = splitdrive(path)[1]
|
||||
return len(p) == 1 and p[0] in '/\\'
|
||||
|
||||
|
||||
# Directory tree walk.
|
||||
# For each directory under top (including top itself, but excluding
|
||||
# '.' and '..'), func(arg, dirname, filenames) is called, where
|
||||
# dirname is the name of the directory and filenames is the list
|
||||
# of files (and subdirectories etc.) in the directory.
|
||||
# The func may modify the filenames list, to implement a filter,
|
||||
# or to impose a different order of visiting.
|
||||
|
||||
def walk(top, func, arg):
|
||||
"""Directory tree walk with callback function.
|
||||
|
||||
For each directory in the directory tree rooted at top (including top
|
||||
itself, but excluding '.' and '..'), call func(arg, dirname, fnames).
|
||||
dirname is the name of the directory, and fnames a list of the names of
|
||||
the files and subdirectories in dirname (excluding '.' and '..'). func
|
||||
may modify the fnames list in-place (e.g. via del or slice assignment),
|
||||
and walk will only recurse into the subdirectories whose names remain in
|
||||
fnames; this can be used to implement a filter, or to impose a specific
|
||||
order of visiting. No semantics are defined for, or required of, arg,
|
||||
beyond that arg is always passed to func. It can be used, e.g., to pass
|
||||
a filename pattern, or a mutable object designed to accumulate
|
||||
statistics. Passing None for arg is common."""
|
||||
warnings.warnpy3k("In 3.x, os.path.walk is removed in favor of os.walk.",
|
||||
stacklevel=2)
|
||||
try:
|
||||
names = os.listdir(top)
|
||||
except os.error:
|
||||
return
|
||||
func(arg, top, names)
|
||||
for name in names:
|
||||
name = join(top, name)
|
||||
if isdir(name):
|
||||
walk(name, func, arg)
|
||||
|
||||
|
||||
# Expand paths beginning with '~' or '~user'.
|
||||
# '~' means $HOME; '~user' means that user's home directory.
|
||||
# If the path doesn't begin with '~', or if the user or $HOME is unknown,
|
||||
# the path is returned unchanged (leaving error reporting to whatever
|
||||
# function is called with the expanded path as argument).
|
||||
# See also module 'glob' for expansion of *, ? and [...] in pathnames.
|
||||
# (A function should also be defined to do full *sh-style environment
|
||||
# variable expansion.)
|
||||
|
||||
def expanduser(path):
|
||||
"""Expand ~ and ~user constructs.
|
||||
|
||||
If user or $HOME is unknown, do nothing."""
|
||||
if path[:1] != '~':
|
||||
return path
|
||||
i, n = 1, len(path)
|
||||
while i < n and path[i] not in '/\\':
|
||||
i = i + 1
|
||||
|
||||
if 'HOME' in os.environ:
|
||||
userhome = os.environ['HOME']
|
||||
elif 'USERPROFILE' in os.environ:
|
||||
userhome = os.environ['USERPROFILE']
|
||||
elif not 'HOMEPATH' in os.environ:
|
||||
return path
|
||||
else:
|
||||
try:
|
||||
drive = os.environ['HOMEDRIVE']
|
||||
except KeyError:
|
||||
drive = ''
|
||||
userhome = join(drive, os.environ['HOMEPATH'])
|
||||
|
||||
if i != 1: #~user
|
||||
userhome = join(dirname(userhome), path[1:i])
|
||||
|
||||
return userhome + path[i:]
|
||||
|
||||
|
||||
# Expand paths containing shell variable substitutions.
|
||||
# The following rules apply:
|
||||
# - no expansion within single quotes
|
||||
# - '$$' is translated into '$'
|
||||
# - '%%' is translated into '%' if '%%' are not seen in %var1%%var2%
|
||||
# - ${varname} is accepted.
|
||||
# - $varname is accepted.
|
||||
# - %varname% is accepted.
|
||||
# - varnames can be made out of letters, digits and the characters '_-'
|
||||
# (though is not verified in the ${varname} and %varname% cases)
|
||||
# XXX With COMMAND.COM you can use any characters in a variable name,
|
||||
# XXX except '^|<>='.
|
||||
|
||||
def expandvars(path):
|
||||
"""Expand shell variables of the forms $var, ${var} and %var%.
|
||||
|
||||
Unknown variables are left unchanged."""
|
||||
if '$' not in path and '%' not in path:
|
||||
return path
|
||||
import string
|
||||
varchars = string.ascii_letters + string.digits + '_-'
|
||||
res = ''
|
||||
index = 0
|
||||
pathlen = len(path)
|
||||
while index < pathlen:
|
||||
c = path[index]
|
||||
if c == '\'': # no expansion within single quotes
|
||||
path = path[index + 1:]
|
||||
pathlen = len(path)
|
||||
try:
|
||||
index = path.index('\'')
|
||||
res = res + '\'' + path[:index + 1]
|
||||
except ValueError:
|
||||
res = res + path
|
||||
index = pathlen - 1
|
||||
elif c == '%': # variable or '%'
|
||||
if path[index + 1:index + 2] == '%':
|
||||
res = res + c
|
||||
index = index + 1
|
||||
else:
|
||||
path = path[index+1:]
|
||||
pathlen = len(path)
|
||||
try:
|
||||
index = path.index('%')
|
||||
except ValueError:
|
||||
res = res + '%' + path
|
||||
index = pathlen - 1
|
||||
else:
|
||||
var = path[:index]
|
||||
if var in os.environ:
|
||||
res = res + os.environ[var]
|
||||
else:
|
||||
res = res + '%' + var + '%'
|
||||
elif c == '$': # variable or '$$'
|
||||
if path[index + 1:index + 2] == '$':
|
||||
res = res + c
|
||||
index = index + 1
|
||||
elif path[index + 1:index + 2] == '{':
|
||||
path = path[index+2:]
|
||||
pathlen = len(path)
|
||||
try:
|
||||
index = path.index('}')
|
||||
var = path[:index]
|
||||
if var in os.environ:
|
||||
res = res + os.environ[var]
|
||||
else:
|
||||
res = res + '${' + var + '}'
|
||||
except ValueError:
|
||||
res = res + '${' + path
|
||||
index = pathlen - 1
|
||||
else:
|
||||
var = ''
|
||||
index = index + 1
|
||||
c = path[index:index + 1]
|
||||
while c != '' and c in varchars:
|
||||
var = var + c
|
||||
index = index + 1
|
||||
c = path[index:index + 1]
|
||||
if var in os.environ:
|
||||
res = res + os.environ[var]
|
||||
else:
|
||||
res = res + '$' + var
|
||||
if c != '':
|
||||
index = index - 1
|
||||
else:
|
||||
res = res + c
|
||||
index = index + 1
|
||||
return res
|
||||
|
||||
|
||||
# Normalize a path, e.g. A//B, A/./B and A/foo/../B all become A\B.
|
||||
# Previously, this function also truncated pathnames to 8+3 format,
|
||||
# but as this module is called "ntpath", that's obviously wrong!
|
||||
|
||||
def normpath(path):
|
||||
"""Normalize path, eliminating double slashes, etc."""
|
||||
# Preserve unicode (if path is unicode)
|
||||
backslash, dot = (u'\\', u'.') if isinstance(path, unicode) else ('\\', '.')
|
||||
if path.startswith(('\\\\.\\', '\\\\?\\')):
|
||||
# in the case of paths with these prefixes:
|
||||
# \\.\ -> device names
|
||||
# \\?\ -> literal paths
|
||||
# do not do any normalization, but return the path unchanged
|
||||
return path
|
||||
path = path.replace("/", "\\")
|
||||
prefix, path = splitdrive(path)
|
||||
# We need to be careful here. If the prefix is empty, and the path starts
|
||||
# with a backslash, it could either be an absolute path on the current
|
||||
# drive (\dir1\dir2\file) or a UNC filename (\\server\mount\dir1\file). It
|
||||
# is therefore imperative NOT to collapse multiple backslashes blindly in
|
||||
# that case.
|
||||
# The code below preserves multiple backslashes when there is no drive
|
||||
# letter. This means that the invalid filename \\\a\b is preserved
|
||||
# unchanged, where a\\\b is normalised to a\b. It's not clear that there
|
||||
# is any better behaviour for such edge cases.
|
||||
if prefix == '':
|
||||
# No drive letter - preserve initial backslashes
|
||||
while path[:1] == "\\":
|
||||
prefix = prefix + backslash
|
||||
path = path[1:]
|
||||
else:
|
||||
# We have a drive letter - collapse initial backslashes
|
||||
if path.startswith("\\"):
|
||||
prefix = prefix + backslash
|
||||
path = path.lstrip("\\")
|
||||
comps = path.split("\\")
|
||||
i = 0
|
||||
while i < len(comps):
|
||||
if comps[i] in ('.', ''):
|
||||
del comps[i]
|
||||
elif comps[i] == '..':
|
||||
if i > 0 and comps[i-1] != '..':
|
||||
del comps[i-1:i+1]
|
||||
i -= 1
|
||||
elif i == 0 and prefix.endswith("\\"):
|
||||
del comps[i]
|
||||
else:
|
||||
i += 1
|
||||
else:
|
||||
i += 1
|
||||
# If the path is now empty, substitute '.'
|
||||
if not prefix and not comps:
|
||||
comps.append(dot)
|
||||
return prefix + backslash.join(comps)
|
||||
|
||||
|
||||
# Return an absolute path.
|
||||
try:
|
||||
from nt import _getfullpathname
|
||||
|
||||
except ImportError: # not running on Windows - mock up something sensible
|
||||
def abspath(path):
|
||||
"""Return the absolute version of a path."""
|
||||
if not isabs(path):
|
||||
if isinstance(path, unicode):
|
||||
cwd = os.getcwdu()
|
||||
else:
|
||||
cwd = os.getcwd()
|
||||
path = join(cwd, path)
|
||||
return normpath(path)
|
||||
|
||||
else: # use native Windows method on Windows
|
||||
def abspath(path):
|
||||
"""Return the absolute version of a path."""
|
||||
|
||||
if path: # Empty path must return current working directory.
|
||||
try:
|
||||
path = _getfullpathname(path)
|
||||
except WindowsError:
|
||||
pass # Bad path - return unchanged.
|
||||
elif isinstance(path, unicode):
|
||||
path = os.getcwdu()
|
||||
else:
|
||||
path = os.getcwd()
|
||||
return normpath(path)
|
||||
|
||||
# realpath is a no-op on systems without islink support
|
||||
realpath = abspath
|
||||
# Win9x family and earlier have no Unicode filename support.
|
||||
supports_unicode_filenames = (hasattr(sys, "getwindowsversion") and
|
||||
sys.getwindowsversion()[3] >= 2)
|
||||
|
||||
def _abspath_split(path):
|
||||
abs = abspath(normpath(path))
|
||||
prefix, rest = splitunc(abs)
|
||||
is_unc = bool(prefix)
|
||||
if not is_unc:
|
||||
prefix, rest = splitdrive(abs)
|
||||
return is_unc, prefix, [x for x in rest.split(sep) if x]
|
||||
|
||||
def relpath(path, start=curdir):
|
||||
"""Return a relative version of a path"""
|
||||
|
||||
if not path:
|
||||
raise ValueError("no path specified")
|
||||
|
||||
start_is_unc, start_prefix, start_list = _abspath_split(start)
|
||||
path_is_unc, path_prefix, path_list = _abspath_split(path)
|
||||
|
||||
if path_is_unc ^ start_is_unc:
|
||||
raise ValueError("Cannot mix UNC and non-UNC paths (%s and %s)"
|
||||
% (path, start))
|
||||
if path_prefix.lower() != start_prefix.lower():
|
||||
if path_is_unc:
|
||||
raise ValueError("path is on UNC root %s, start on UNC root %s"
|
||||
% (path_prefix, start_prefix))
|
||||
else:
|
||||
raise ValueError("path is on drive %s, start on drive %s"
|
||||
% (path_prefix, start_prefix))
|
||||
# Work out how much of the filepath is shared by start and path.
|
||||
i = 0
|
||||
for e1, e2 in zip(start_list, path_list):
|
||||
if e1.lower() != e2.lower():
|
||||
break
|
||||
i += 1
|
||||
|
||||
rel_list = [pardir] * (len(start_list)-i) + path_list[i:]
|
||||
if not rel_list:
|
||||
return curdir
|
||||
return join(*rel_list)
|
|
@ -0,0 +1,773 @@
|
|||
"""OS routines for Mac, NT, Posix, or UEFI depending on what system we're on.
|
||||
|
||||
This exports:
|
||||
- all functions from edk2, posix, nt, os2, or ce, e.g. unlink, stat, etc.
|
||||
- os.path is one of the modules uefipath, posixpath, or ntpath
|
||||
- os.name is 'edk2', 'posix', 'nt', 'os2', 'ce' or 'riscos'
|
||||
- os.curdir is a string representing the current directory ('.' or ':')
|
||||
- os.pardir is a string representing the parent directory ('..' or '::')
|
||||
- os.sep is the (or a most common) pathname separator ('/' or ':' or '\\')
|
||||
- os.extsep is the extension separator ('.' or '/')
|
||||
- os.altsep is the alternate pathname separator (None or '/')
|
||||
- os.pathsep is the component separator used in $PATH etc
|
||||
- os.linesep is the line separator in text files ('\r' or '\n' or '\r\n')
|
||||
- os.defpath is the default search path for executables
|
||||
- os.devnull is the file path of the null device ('/dev/null', etc.)
|
||||
|
||||
Programs that import and use 'os' stand a better chance of being
|
||||
portable between different platforms. Of course, they must then
|
||||
only use functions that are defined by all platforms (e.g., unlink
|
||||
and opendir), and leave all pathname manipulation to os.path
|
||||
(e.g., split and join).
|
||||
"""
|
||||
|
||||
#'
|
||||
|
||||
import sys, errno
|
||||
|
||||
_names = sys.builtin_module_names
|
||||
|
||||
# Note: more names are added to __all__ later.
|
||||
__all__ = ["altsep", "curdir", "pardir", "sep", "extsep", "pathsep", "linesep",
|
||||
"defpath", "name", "path", "devnull",
|
||||
"SEEK_SET", "SEEK_CUR", "SEEK_END"]
|
||||
|
||||
def _get_exports_list(module):
|
||||
try:
|
||||
return list(module.__all__)
|
||||
except AttributeError:
|
||||
return [n for n in dir(module) if n[0] != '_']
|
||||
|
||||
if 'posix' in _names:
|
||||
name = 'posix'
|
||||
linesep = '\n'
|
||||
from posix import *
|
||||
try:
|
||||
from posix import _exit
|
||||
except ImportError:
|
||||
pass
|
||||
import posixpath as path
|
||||
|
||||
import posix
|
||||
__all__.extend(_get_exports_list(posix))
|
||||
del posix
|
||||
|
||||
elif 'nt' in _names:
|
||||
name = 'nt'
|
||||
linesep = '\r\n'
|
||||
from nt import *
|
||||
try:
|
||||
from nt import _exit
|
||||
except ImportError:
|
||||
pass
|
||||
import ntpath as path
|
||||
|
||||
import nt
|
||||
__all__.extend(_get_exports_list(nt))
|
||||
del nt
|
||||
|
||||
elif 'os2' in _names:
|
||||
name = 'os2'
|
||||
linesep = '\r\n'
|
||||
from os2 import *
|
||||
try:
|
||||
from os2 import _exit
|
||||
except ImportError:
|
||||
pass
|
||||
if sys.version.find('EMX GCC') == -1:
|
||||
import ntpath as path
|
||||
else:
|
||||
import os2emxpath as path
|
||||
from _emx_link import link
|
||||
|
||||
import os2
|
||||
__all__.extend(_get_exports_list(os2))
|
||||
del os2
|
||||
|
||||
elif 'ce' in _names:
|
||||
name = 'ce'
|
||||
linesep = '\r\n'
|
||||
from ce import *
|
||||
try:
|
||||
from ce import _exit
|
||||
except ImportError:
|
||||
pass
|
||||
# We can use the standard Windows path.
|
||||
import ntpath as path
|
||||
|
||||
import ce
|
||||
__all__.extend(_get_exports_list(ce))
|
||||
del ce
|
||||
|
||||
elif 'riscos' in _names:
|
||||
name = 'riscos'
|
||||
linesep = '\n'
|
||||
from riscos import *
|
||||
try:
|
||||
from riscos import _exit
|
||||
except ImportError:
|
||||
pass
|
||||
import riscospath as path
|
||||
|
||||
import riscos
|
||||
__all__.extend(_get_exports_list(riscos))
|
||||
del riscos
|
||||
|
||||
elif 'edk2' in _names:
|
||||
name = 'edk2'
|
||||
linesep = '\n'
|
||||
from edk2 import *
|
||||
try:
|
||||
from edk2 import _exit
|
||||
except ImportError:
|
||||
pass
|
||||
import ntpath as path
|
||||
|
||||
import edk2
|
||||
__all__.extend(_get_exports_list(edk2))
|
||||
del edk2
|
||||
|
||||
else:
|
||||
raise ImportError, 'no os specific module found'
|
||||
|
||||
sys.modules['os.path'] = path
|
||||
from os.path import (curdir, pardir, sep, pathsep, defpath, extsep, altsep,
|
||||
devnull)
|
||||
|
||||
del _names
|
||||
|
||||
# Python uses fixed values for the SEEK_ constants; they are mapped
|
||||
# to native constants if necessary in posixmodule.c
|
||||
SEEK_SET = 0
|
||||
SEEK_CUR = 1
|
||||
SEEK_END = 2
|
||||
|
||||
#'
|
||||
|
||||
# Super directory utilities.
|
||||
# (Inspired by Eric Raymond; the doc strings are mostly his)
|
||||
|
||||
def makedirs(name, mode=0777):
|
||||
"""makedirs(path [, mode=0777])
|
||||
|
||||
Super-mkdir; create a leaf directory and all intermediate ones.
|
||||
Works like mkdir, except that any intermediate path segment (not
|
||||
just the rightmost) will be created if it does not exist. This is
|
||||
recursive.
|
||||
|
||||
"""
|
||||
head, tail = path.split(name)
|
||||
if not tail:
|
||||
head, tail = path.split(head)
|
||||
if head and tail and not path.exists(head):
|
||||
try:
|
||||
makedirs(head, mode)
|
||||
except OSError, e:
|
||||
# be happy if someone already created the path
|
||||
if e.errno != errno.EEXIST:
|
||||
raise
|
||||
if tail == curdir: # xxx/newdir/. exists if xxx/newdir exists
|
||||
return
|
||||
mkdir(name, mode)
|
||||
|
||||
def removedirs(name):
|
||||
"""removedirs(path)
|
||||
|
||||
Super-rmdir; remove a leaf directory and all empty intermediate
|
||||
ones. Works like rmdir except that, if the leaf directory is
|
||||
successfully removed, directories corresponding to rightmost path
|
||||
segments will be pruned away until either the whole path is
|
||||
consumed or an error occurs. Errors during this latter phase are
|
||||
ignored -- they generally mean that a directory was not empty.
|
||||
|
||||
"""
|
||||
rmdir(name)
|
||||
head, tail = path.split(name)
|
||||
if not tail:
|
||||
head, tail = path.split(head)
|
||||
while head and tail:
|
||||
try:
|
||||
rmdir(head)
|
||||
except error:
|
||||
break
|
||||
head, tail = path.split(head)
|
||||
|
||||
def renames(old, new):
|
||||
"""renames(old, new)
|
||||
|
||||
Super-rename; create directories as necessary and delete any left
|
||||
empty. Works like rename, except creation of any intermediate
|
||||
directories needed to make the new pathname good is attempted
|
||||
first. After the rename, directories corresponding to rightmost
|
||||
path segments of the old name will be pruned way until either the
|
||||
whole path is consumed or a nonempty directory is found.
|
||||
|
||||
Note: this function can fail with the new directory structure made
|
||||
if you lack permissions needed to unlink the leaf directory or
|
||||
file.
|
||||
|
||||
"""
|
||||
head, tail = path.split(new)
|
||||
if head and tail and not path.exists(head):
|
||||
makedirs(head)
|
||||
rename(old, new)
|
||||
head, tail = path.split(old)
|
||||
if head and tail:
|
||||
try:
|
||||
removedirs(head)
|
||||
except error:
|
||||
pass
|
||||
|
||||
__all__.extend(["makedirs", "removedirs", "renames"])
|
||||
|
||||
def walk(top, topdown=True, onerror=None, followlinks=False):
|
||||
"""Directory tree generator.
|
||||
|
||||
For each directory in the directory tree rooted at top (including top
|
||||
itself, but excluding '.' and '..'), yields a 3-tuple
|
||||
|
||||
dirpath, dirnames, filenames
|
||||
|
||||
dirpath is a string, the path to the directory. dirnames is a list of
|
||||
the names of the subdirectories in dirpath (excluding '.' and '..').
|
||||
filenames is a list of the names of the non-directory files in dirpath.
|
||||
Note that the names in the lists are just names, with no path components.
|
||||
To get a full path (which begins with top) to a file or directory in
|
||||
dirpath, do os.path.join(dirpath, name).
|
||||
|
||||
If optional arg 'topdown' is true or not specified, the triple for a
|
||||
directory is generated before the triples for any of its subdirectories
|
||||
(directories are generated top down). If topdown is false, the triple
|
||||
for a directory is generated after the triples for all of its
|
||||
subdirectories (directories are generated bottom up).
|
||||
|
||||
When topdown is true, the caller can modify the dirnames list in-place
|
||||
(e.g., via del or slice assignment), and walk will only recurse into the
|
||||
subdirectories whose names remain in dirnames; this can be used to prune
|
||||
the search, or to impose a specific order of visiting. Modifying
|
||||
dirnames when topdown is false is ineffective, since the directories in
|
||||
dirnames have already been generated by the time dirnames itself is
|
||||
generated.
|
||||
|
||||
By default errors from the os.listdir() call are ignored. If
|
||||
optional arg 'onerror' is specified, it should be a function; it
|
||||
will be called with one argument, an os.error instance. It can
|
||||
report the error to continue with the walk, or raise the exception
|
||||
to abort the walk. Note that the filename is available as the
|
||||
filename attribute of the exception object.
|
||||
|
||||
By default, os.walk does not follow symbolic links to subdirectories on
|
||||
systems that support them. In order to get this functionality, set the
|
||||
optional argument 'followlinks' to true.
|
||||
|
||||
Caution: if you pass a relative pathname for top, don't change the
|
||||
current working directory between resumptions of walk. walk never
|
||||
changes the current directory, and assumes that the client doesn't
|
||||
either.
|
||||
|
||||
Example:
|
||||
|
||||
import os
|
||||
from os.path import join, getsize
|
||||
for root, dirs, files in os.walk('python/Lib/email'):
|
||||
print root, "consumes",
|
||||
print sum([getsize(join(root, name)) for name in files]),
|
||||
print "bytes in", len(files), "non-directory files"
|
||||
if 'CVS' in dirs:
|
||||
dirs.remove('CVS') # don't visit CVS directories
|
||||
"""
|
||||
|
||||
islink, join, isdir = path.islink, path.join, path.isdir
|
||||
|
||||
# We may not have read permission for top, in which case we can't
|
||||
# get a list of the files the directory contains. os.path.walk
|
||||
# always suppressed the exception then, rather than blow up for a
|
||||
# minor reason when (say) a thousand readable directories are still
|
||||
# left to visit. That logic is copied here.
|
||||
try:
|
||||
# Note that listdir and error are globals in this module due
|
||||
# to earlier import-*.
|
||||
names = listdir(top)
|
||||
except error, err:
|
||||
if onerror is not None:
|
||||
onerror(err)
|
||||
return
|
||||
|
||||
dirs, nondirs = [], []
|
||||
for name in names:
|
||||
if isdir(join(top, name)):
|
||||
dirs.append(name)
|
||||
else:
|
||||
nondirs.append(name)
|
||||
|
||||
if topdown:
|
||||
yield top, dirs, nondirs
|
||||
for name in dirs:
|
||||
new_path = join(top, name)
|
||||
if followlinks or not islink(new_path):
|
||||
for x in walk(new_path, topdown, onerror, followlinks):
|
||||
yield x
|
||||
if not topdown:
|
||||
yield top, dirs, nondirs
|
||||
|
||||
__all__.append("walk")
|
||||
|
||||
# Make sure os.environ exists, at least
|
||||
try:
|
||||
environ
|
||||
except NameError:
|
||||
environ = {}
|
||||
|
||||
def execl(file, *args):
|
||||
"""execl(file, *args)
|
||||
|
||||
Execute the executable file with argument list args, replacing the
|
||||
current process. """
|
||||
execv(file, args)
|
||||
|
||||
def execle(file, *args):
|
||||
"""execle(file, *args, env)
|
||||
|
||||
Execute the executable file with argument list args and
|
||||
environment env, replacing the current process. """
|
||||
env = args[-1]
|
||||
execve(file, args[:-1], env)
|
||||
|
||||
def execlp(file, *args):
|
||||
"""execlp(file, *args)
|
||||
|
||||
Execute the executable file (which is searched for along $PATH)
|
||||
with argument list args, replacing the current process. """
|
||||
execvp(file, args)
|
||||
|
||||
def execlpe(file, *args):
|
||||
"""execlpe(file, *args, env)
|
||||
|
||||
Execute the executable file (which is searched for along $PATH)
|
||||
with argument list args and environment env, replacing the current
|
||||
process. """
|
||||
env = args[-1]
|
||||
execvpe(file, args[:-1], env)
|
||||
|
||||
def execvp(file, args):
|
||||
"""execvp(file, args)
|
||||
|
||||
Execute the executable file (which is searched for along $PATH)
|
||||
with argument list args, replacing the current process.
|
||||
args may be a list or tuple of strings. """
|
||||
_execvpe(file, args)
|
||||
|
||||
def execvpe(file, args, env):
|
||||
"""execvpe(file, args, env)
|
||||
|
||||
Execute the executable file (which is searched for along $PATH)
|
||||
with argument list args and environment env , replacing the
|
||||
current process.
|
||||
args may be a list or tuple of strings. """
|
||||
_execvpe(file, args, env)
|
||||
|
||||
__all__.extend(["execl","execle","execlp","execlpe","execvp","execvpe"])
|
||||
|
||||
def _execvpe(file, args, env=None):
|
||||
if env is not None:
|
||||
func = execve
|
||||
argrest = (args, env)
|
||||
else:
|
||||
func = execv
|
||||
argrest = (args,)
|
||||
env = environ
|
||||
|
||||
head, tail = path.split(file)
|
||||
if head:
|
||||
func(file, *argrest)
|
||||
return
|
||||
if 'PATH' in env:
|
||||
envpath = env['PATH']
|
||||
else:
|
||||
envpath = defpath
|
||||
PATH = envpath.split(pathsep)
|
||||
saved_exc = None
|
||||
saved_tb = None
|
||||
for dir in PATH:
|
||||
fullname = path.join(dir, file)
|
||||
try:
|
||||
func(fullname, *argrest)
|
||||
except error, e:
|
||||
tb = sys.exc_info()[2]
|
||||
if (e.errno != errno.ENOENT and e.errno != errno.ENOTDIR
|
||||
and saved_exc is None):
|
||||
saved_exc = e
|
||||
saved_tb = tb
|
||||
if saved_exc:
|
||||
raise error, saved_exc, saved_tb
|
||||
raise error, e, tb
|
||||
|
||||
# Change environ to automatically call putenv() if it exists
|
||||
try:
|
||||
# This will fail if there's no putenv
|
||||
putenv
|
||||
except NameError:
|
||||
pass
|
||||
else:
|
||||
import UserDict
|
||||
|
||||
# Fake unsetenv() for Windows
|
||||
# not sure about os2 here but
|
||||
# I'm guessing they are the same.
|
||||
|
||||
if name in ('os2', 'nt'):
|
||||
def unsetenv(key):
|
||||
putenv(key, "")
|
||||
|
||||
if name == "riscos":
|
||||
# On RISC OS, all env access goes through getenv and putenv
|
||||
from riscosenviron import _Environ
|
||||
elif name in ('os2', 'nt'): # Where Env Var Names Must Be UPPERCASE
|
||||
# But we store them as upper case
|
||||
class _Environ(UserDict.IterableUserDict):
|
||||
def __init__(self, environ):
|
||||
UserDict.UserDict.__init__(self)
|
||||
data = self.data
|
||||
for k, v in environ.items():
|
||||
data[k.upper()] = v
|
||||
def __setitem__(self, key, item):
|
||||
putenv(key, item)
|
||||
self.data[key.upper()] = item
|
||||
def __getitem__(self, key):
|
||||
return self.data[key.upper()]
|
||||
try:
|
||||
unsetenv
|
||||
except NameError:
|
||||
def __delitem__(self, key):
|
||||
del self.data[key.upper()]
|
||||
else:
|
||||
def __delitem__(self, key):
|
||||
unsetenv(key)
|
||||
del self.data[key.upper()]
|
||||
def clear(self):
|
||||
for key in self.data.keys():
|
||||
unsetenv(key)
|
||||
del self.data[key]
|
||||
def pop(self, key, *args):
|
||||
unsetenv(key)
|
||||
return self.data.pop(key.upper(), *args)
|
||||
def has_key(self, key):
|
||||
return key.upper() in self.data
|
||||
def __contains__(self, key):
|
||||
return key.upper() in self.data
|
||||
def get(self, key, failobj=None):
|
||||
return self.data.get(key.upper(), failobj)
|
||||
def update(self, dict=None, **kwargs):
|
||||
if dict:
|
||||
try:
|
||||
keys = dict.keys()
|
||||
except AttributeError:
|
||||
# List of (key, value)
|
||||
for k, v in dict:
|
||||
self[k] = v
|
||||
else:
|
||||
# got keys
|
||||
# cannot use items(), since mappings
|
||||
# may not have them.
|
||||
for k in keys:
|
||||
self[k] = dict[k]
|
||||
if kwargs:
|
||||
self.update(kwargs)
|
||||
def copy(self):
|
||||
return dict(self)
|
||||
|
||||
else: # Where Env Var Names Can Be Mixed Case
|
||||
class _Environ(UserDict.IterableUserDict):
|
||||
def __init__(self, environ):
|
||||
UserDict.UserDict.__init__(self)
|
||||
self.data = environ
|
||||
def __setitem__(self, key, item):
|
||||
putenv(key, item)
|
||||
self.data[key] = item
|
||||
def update(self, dict=None, **kwargs):
|
||||
if dict:
|
||||
try:
|
||||
keys = dict.keys()
|
||||
except AttributeError:
|
||||
# List of (key, value)
|
||||
for k, v in dict:
|
||||
self[k] = v
|
||||
else:
|
||||
# got keys
|
||||
# cannot use items(), since mappings
|
||||
# may not have them.
|
||||
for k in keys:
|
||||
self[k] = dict[k]
|
||||
if kwargs:
|
||||
self.update(kwargs)
|
||||
try:
|
||||
unsetenv
|
||||
except NameError:
|
||||
pass
|
||||
else:
|
||||
def __delitem__(self, key):
|
||||
unsetenv(key)
|
||||
del self.data[key]
|
||||
def clear(self):
|
||||
for key in self.data.keys():
|
||||
unsetenv(key)
|
||||
del self.data[key]
|
||||
def pop(self, key, *args):
|
||||
unsetenv(key)
|
||||
return self.data.pop(key, *args)
|
||||
def copy(self):
|
||||
return dict(self)
|
||||
|
||||
|
||||
environ = _Environ(environ)
|
||||
|
||||
def getenv(key, default=None):
|
||||
"""Get an environment variable, return None if it doesn't exist.
|
||||
The optional second argument can specify an alternate default."""
|
||||
return environ.get(key, default)
|
||||
__all__.append("getenv")
|
||||
|
||||
def _exists(name):
|
||||
return name in globals()
|
||||
|
||||
# Supply spawn*() (probably only for Unix)
|
||||
if _exists("fork") and not _exists("spawnv") and _exists("execv"):
|
||||
|
||||
P_WAIT = 0
|
||||
P_NOWAIT = P_NOWAITO = 1
|
||||
|
||||
# XXX Should we support P_DETACH? I suppose it could fork()**2
|
||||
# and close the std I/O streams. Also, P_OVERLAY is the same
|
||||
# as execv*()?
|
||||
|
||||
def _spawnvef(mode, file, args, env, func):
|
||||
# Internal helper; func is the exec*() function to use
|
||||
pid = fork()
|
||||
if not pid:
|
||||
# Child
|
||||
try:
|
||||
if env is None:
|
||||
func(file, args)
|
||||
else:
|
||||
func(file, args, env)
|
||||
except:
|
||||
_exit(127)
|
||||
else:
|
||||
# Parent
|
||||
if mode == P_NOWAIT:
|
||||
return pid # Caller is responsible for waiting!
|
||||
while 1:
|
||||
wpid, sts = waitpid(pid, 0)
|
||||
if WIFSTOPPED(sts):
|
||||
continue
|
||||
elif WIFSIGNALED(sts):
|
||||
return -WTERMSIG(sts)
|
||||
elif WIFEXITED(sts):
|
||||
return WEXITSTATUS(sts)
|
||||
else:
|
||||
raise error, "Not stopped, signaled or exited???"
|
||||
|
||||
def spawnv(mode, file, args):
|
||||
"""spawnv(mode, file, args) -> integer
|
||||
|
||||
Execute file with arguments from args in a subprocess.
|
||||
If mode == P_NOWAIT return the pid of the process.
|
||||
If mode == P_WAIT return the process's exit code if it exits normally;
|
||||
otherwise return -SIG, where SIG is the signal that killed it. """
|
||||
return _spawnvef(mode, file, args, None, execv)
|
||||
|
||||
def spawnve(mode, file, args, env):
|
||||
"""spawnve(mode, file, args, env) -> integer
|
||||
|
||||
Execute file with arguments from args in a subprocess with the
|
||||
specified environment.
|
||||
If mode == P_NOWAIT return the pid of the process.
|
||||
If mode == P_WAIT return the process's exit code if it exits normally;
|
||||
otherwise return -SIG, where SIG is the signal that killed it. """
|
||||
return _spawnvef(mode, file, args, env, execve)
|
||||
|
||||
# Note: spawnvp[e] is't currently supported on Windows
|
||||
|
||||
def spawnvp(mode, file, args):
|
||||
"""spawnvp(mode, file, args) -> integer
|
||||
|
||||
Execute file (which is looked for along $PATH) with arguments from
|
||||
args in a subprocess.
|
||||
If mode == P_NOWAIT return the pid of the process.
|
||||
If mode == P_WAIT return the process's exit code if it exits normally;
|
||||
otherwise return -SIG, where SIG is the signal that killed it. """
|
||||
return _spawnvef(mode, file, args, None, execvp)
|
||||
|
||||
def spawnvpe(mode, file, args, env):
|
||||
"""spawnvpe(mode, file, args, env) -> integer
|
||||
|
||||
Execute file (which is looked for along $PATH) with arguments from
|
||||
args in a subprocess with the supplied environment.
|
||||
If mode == P_NOWAIT return the pid of the process.
|
||||
If mode == P_WAIT return the process's exit code if it exits normally;
|
||||
otherwise return -SIG, where SIG is the signal that killed it. """
|
||||
return _spawnvef(mode, file, args, env, execvpe)
|
||||
|
||||
if _exists("spawnv"):
|
||||
# These aren't supplied by the basic Windows code
|
||||
# but can be easily implemented in Python
|
||||
|
||||
def spawnl(mode, file, *args):
|
||||
"""spawnl(mode, file, *args) -> integer
|
||||
|
||||
Execute file with arguments from args in a subprocess.
|
||||
If mode == P_NOWAIT return the pid of the process.
|
||||
If mode == P_WAIT return the process's exit code if it exits normally;
|
||||
otherwise return -SIG, where SIG is the signal that killed it. """
|
||||
return spawnv(mode, file, args)
|
||||
|
||||
def spawnle(mode, file, *args):
|
||||
"""spawnle(mode, file, *args, env) -> integer
|
||||
|
||||
Execute file with arguments from args in a subprocess with the
|
||||
supplied environment.
|
||||
If mode == P_NOWAIT return the pid of the process.
|
||||
If mode == P_WAIT return the process's exit code if it exits normally;
|
||||
otherwise return -SIG, where SIG is the signal that killed it. """
|
||||
env = args[-1]
|
||||
return spawnve(mode, file, args[:-1], env)
|
||||
|
||||
|
||||
__all__.extend(["spawnv", "spawnve", "spawnl", "spawnle",])
|
||||
|
||||
|
||||
if _exists("spawnvp"):
|
||||
# At the moment, Windows doesn't implement spawnvp[e],
|
||||
# so it won't have spawnlp[e] either.
|
||||
def spawnlp(mode, file, *args):
|
||||
"""spawnlp(mode, file, *args) -> integer
|
||||
|
||||
Execute file (which is looked for along $PATH) with arguments from
|
||||
args in a subprocess with the supplied environment.
|
||||
If mode == P_NOWAIT return the pid of the process.
|
||||
If mode == P_WAIT return the process's exit code if it exits normally;
|
||||
otherwise return -SIG, where SIG is the signal that killed it. """
|
||||
return spawnvp(mode, file, args)
|
||||
|
||||
def spawnlpe(mode, file, *args):
|
||||
"""spawnlpe(mode, file, *args, env) -> integer
|
||||
|
||||
Execute file (which is looked for along $PATH) with arguments from
|
||||
args in a subprocess with the supplied environment.
|
||||
If mode == P_NOWAIT return the pid of the process.
|
||||
If mode == P_WAIT return the process's exit code if it exits normally;
|
||||
otherwise return -SIG, where SIG is the signal that killed it. """
|
||||
env = args[-1]
|
||||
return spawnvpe(mode, file, args[:-1], env)
|
||||
|
||||
|
||||
__all__.extend(["spawnvp", "spawnvpe", "spawnlp", "spawnlpe",])
|
||||
|
||||
|
||||
# Supply popen2 etc. (for Unix)
|
||||
if _exists("fork"):
|
||||
if not _exists("popen2"):
|
||||
def popen2(cmd, mode="t", bufsize=-1):
|
||||
"""Execute the shell command 'cmd' in a sub-process. On UNIX, 'cmd'
|
||||
may be a sequence, in which case arguments will be passed directly to
|
||||
the program without shell intervention (as with os.spawnv()). If 'cmd'
|
||||
is a string it will be passed to the shell (as with os.system()). If
|
||||
'bufsize' is specified, it sets the buffer size for the I/O pipes. The
|
||||
file objects (child_stdin, child_stdout) are returned."""
|
||||
import warnings
|
||||
msg = "os.popen2 is deprecated. Use the subprocess module."
|
||||
warnings.warn(msg, DeprecationWarning, stacklevel=2)
|
||||
|
||||
import subprocess
|
||||
PIPE = subprocess.PIPE
|
||||
p = subprocess.Popen(cmd, shell=isinstance(cmd, basestring),
|
||||
bufsize=bufsize, stdin=PIPE, stdout=PIPE,
|
||||
close_fds=True)
|
||||
return p.stdin, p.stdout
|
||||
__all__.append("popen2")
|
||||
|
||||
if not _exists("popen3"):
|
||||
def popen3(cmd, mode="t", bufsize=-1):
|
||||
"""Execute the shell command 'cmd' in a sub-process. On UNIX, 'cmd'
|
||||
may be a sequence, in which case arguments will be passed directly to
|
||||
the program without shell intervention (as with os.spawnv()). If 'cmd'
|
||||
is a string it will be passed to the shell (as with os.system()). If
|
||||
'bufsize' is specified, it sets the buffer size for the I/O pipes. The
|
||||
file objects (child_stdin, child_stdout, child_stderr) are returned."""
|
||||
import warnings
|
||||
msg = "os.popen3 is deprecated. Use the subprocess module."
|
||||
warnings.warn(msg, DeprecationWarning, stacklevel=2)
|
||||
|
||||
import subprocess
|
||||
PIPE = subprocess.PIPE
|
||||
p = subprocess.Popen(cmd, shell=isinstance(cmd, basestring),
|
||||
bufsize=bufsize, stdin=PIPE, stdout=PIPE,
|
||||
stderr=PIPE, close_fds=True)
|
||||
return p.stdin, p.stdout, p.stderr
|
||||
__all__.append("popen3")
|
||||
|
||||
if not _exists("popen4"):
|
||||
def popen4(cmd, mode="t", bufsize=-1):
|
||||
"""Execute the shell command 'cmd' in a sub-process. On UNIX, 'cmd'
|
||||
may be a sequence, in which case arguments will be passed directly to
|
||||
the program without shell intervention (as with os.spawnv()). If 'cmd'
|
||||
is a string it will be passed to the shell (as with os.system()). If
|
||||
'bufsize' is specified, it sets the buffer size for the I/O pipes. The
|
||||
file objects (child_stdin, child_stdout_stderr) are returned."""
|
||||
import warnings
|
||||
msg = "os.popen4 is deprecated. Use the subprocess module."
|
||||
warnings.warn(msg, DeprecationWarning, stacklevel=2)
|
||||
|
||||
import subprocess
|
||||
PIPE = subprocess.PIPE
|
||||
p = subprocess.Popen(cmd, shell=isinstance(cmd, basestring),
|
||||
bufsize=bufsize, stdin=PIPE, stdout=PIPE,
|
||||
stderr=subprocess.STDOUT, close_fds=True)
|
||||
return p.stdin, p.stdout
|
||||
__all__.append("popen4")
|
||||
|
||||
import copy_reg as _copy_reg
|
||||
|
||||
def _make_stat_result(tup, dict):
|
||||
return stat_result(tup, dict)
|
||||
|
||||
def _pickle_stat_result(sr):
|
||||
(type, args) = sr.__reduce__()
|
||||
return (_make_stat_result, args)
|
||||
|
||||
try:
|
||||
_copy_reg.pickle(stat_result, _pickle_stat_result, _make_stat_result)
|
||||
except NameError: # stat_result may not exist
|
||||
pass
|
||||
|
||||
def _make_statvfs_result(tup, dict):
|
||||
return statvfs_result(tup, dict)
|
||||
|
||||
def _pickle_statvfs_result(sr):
|
||||
(type, args) = sr.__reduce__()
|
||||
return (_make_statvfs_result, args)
|
||||
|
||||
try:
|
||||
_copy_reg.pickle(statvfs_result, _pickle_statvfs_result,
|
||||
_make_statvfs_result)
|
||||
except NameError: # statvfs_result may not exist
|
||||
pass
|
||||
|
||||
if not _exists("urandom"):
|
||||
def urandom(n):
|
||||
"""urandom(n) -> str
|
||||
|
||||
Return a string of n random bytes suitable for cryptographic use.
|
||||
|
||||
"""
|
||||
try:
|
||||
_urandomfd = open("/dev/urandom", O_RDONLY)
|
||||
except (OSError, IOError):
|
||||
raise NotImplementedError("/dev/urandom (or equivalent) not found")
|
||||
try:
|
||||
bs = b""
|
||||
while n > len(bs):
|
||||
bs += read(_urandomfd, n - len(bs))
|
||||
finally:
|
||||
close(_urandomfd)
|
||||
return bs
|
|
@ -0,0 +1,536 @@
|
|||
"""Append module search paths for third-party packages to sys.path.
|
||||
|
||||
****************************************************************
|
||||
* This module is automatically imported during initialization. *
|
||||
****************************************************************
|
||||
|
||||
This is a UEFI-specific version of site.py.
|
||||
|
||||
In earlier versions of Python (up to 1.5a3), scripts or modules that
|
||||
needed to use site-specific modules would place ``import site''
|
||||
somewhere near the top of their code. Because of the automatic
|
||||
import, this is no longer necessary (but code that does it still
|
||||
works).
|
||||
|
||||
This will append site-specific paths to the module search path. It
|
||||
starts with sys.prefix and sys.exec_prefix (if different) and appends
|
||||
lib/python<version>/site-packages as well as lib/site-python.
|
||||
The resulting directories, if they exist, are appended to sys.path,
|
||||
and also inspected for path configuration files.
|
||||
|
||||
A path configuration file is a file whose name has the form
|
||||
<package>.pth; its contents are additional directories (one per line)
|
||||
to be added to sys.path. Non-existing directories (or
|
||||
non-directories) are never added to sys.path; no directory is added to
|
||||
sys.path more than once. Blank lines and lines beginning with
|
||||
'#' are skipped. Lines starting with 'import' are executed.
|
||||
|
||||
For example, suppose sys.prefix and sys.exec_prefix are set to
|
||||
/Efi/StdLib and there is a directory /Efi/StdLib/lib/python2.7/site-packages
|
||||
with three subdirectories, foo, bar and spam, and two path
|
||||
configuration files, foo.pth and bar.pth. Assume foo.pth contains the
|
||||
following:
|
||||
|
||||
# foo package configuration
|
||||
foo
|
||||
bar
|
||||
bletch
|
||||
|
||||
and bar.pth contains:
|
||||
|
||||
# bar package configuration
|
||||
bar
|
||||
|
||||
Then the following directories are added to sys.path, in this order:
|
||||
|
||||
/Efi/StdLib/lib/python2.7/site-packages/bar
|
||||
/Efi/StdLib/lib/python2.7/site-packages/foo
|
||||
|
||||
Note that bletch is omitted because it doesn't exist; bar precedes foo
|
||||
because bar.pth comes alphabetically before foo.pth; and spam is
|
||||
omitted because it is not mentioned in either path configuration file.
|
||||
|
||||
After these path manipulations, an attempt is made to import a module
|
||||
named sitecustomize, which can perform arbitrary additional
|
||||
site-specific customizations. If this import fails with an
|
||||
ImportError exception, it is silently ignored.
|
||||
|
||||
Copyright (c) 2011 - 2012, Intel Corporation. All rights reserved.<BR>
|
||||
This program and the accompanying materials are licensed and made available under
|
||||
the terms and conditions of the BSD License that accompanies this distribution.
|
||||
The full text of the license may be found at
|
||||
http://opensource.org/licenses/bsd-license.
|
||||
|
||||
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
||||
"""
|
||||
|
||||
import sys
|
||||
import os
|
||||
import __builtin__
|
||||
import traceback
|
||||
|
||||
# Prefixes for site-packages; add additional prefixes like /usr/local here
|
||||
PREFIXES = [sys.prefix, sys.exec_prefix]
|
||||
# Enable per user site-packages directory
|
||||
# set it to False to disable the feature or True to force the feature
|
||||
ENABLE_USER_SITE = False
|
||||
|
||||
# for distutils.commands.install
|
||||
# These values are initialized by the getuserbase() and getusersitepackages()
|
||||
# functions, through the main() function when Python starts.
|
||||
USER_SITE = None
|
||||
USER_BASE = None
|
||||
|
||||
|
||||
def makepath(*paths):
|
||||
dir = os.path.join(*paths)
|
||||
try:
|
||||
dir = os.path.abspath(dir)
|
||||
except OSError:
|
||||
pass
|
||||
return dir, os.path.normcase(dir)
|
||||
|
||||
|
||||
def abs__file__():
|
||||
"""Set all module' __file__ attribute to an absolute path"""
|
||||
for m in sys.modules.values():
|
||||
if hasattr(m, '__loader__'):
|
||||
continue # don't mess with a PEP 302-supplied __file__
|
||||
try:
|
||||
m.__file__ = os.path.abspath(m.__file__)
|
||||
except (AttributeError, OSError):
|
||||
pass
|
||||
|
||||
|
||||
def removeduppaths():
|
||||
""" Remove duplicate entries from sys.path along with making them
|
||||
absolute"""
|
||||
# This ensures that the initial path provided by the interpreter contains
|
||||
# only absolute pathnames, even if we're running from the build directory.
|
||||
L = []
|
||||
known_paths = set()
|
||||
for dir in sys.path:
|
||||
# Filter out duplicate paths (on case-insensitive file systems also
|
||||
# if they only differ in case); turn relative paths into absolute
|
||||
# paths.
|
||||
dir, dircase = makepath(dir)
|
||||
if not dircase in known_paths:
|
||||
L.append(dir)
|
||||
known_paths.add(dircase)
|
||||
sys.path[:] = L
|
||||
return known_paths
|
||||
|
||||
|
||||
def _init_pathinfo():
|
||||
"""Return a set containing all existing directory entries from sys.path"""
|
||||
d = set()
|
||||
for dir in sys.path:
|
||||
try:
|
||||
if os.path.isdir(dir):
|
||||
dir, dircase = makepath(dir)
|
||||
d.add(dircase)
|
||||
except TypeError:
|
||||
continue
|
||||
return d
|
||||
|
||||
|
||||
def addpackage(sitedir, name, known_paths):
|
||||
"""Process a .pth file within the site-packages directory:
|
||||
For each line in the file, either combine it with sitedir to a path
|
||||
and add that to known_paths, or execute it if it starts with 'import '.
|
||||
"""
|
||||
if known_paths is None:
|
||||
_init_pathinfo()
|
||||
reset = 1
|
||||
else:
|
||||
reset = 0
|
||||
fullname = os.path.join(sitedir, name)
|
||||
try:
|
||||
f = open(fullname, "rU")
|
||||
except IOError:
|
||||
return
|
||||
with f:
|
||||
for n, line in enumerate(f):
|
||||
if line.startswith("#"):
|
||||
continue
|
||||
try:
|
||||
if line.startswith(("import ", "import\t")):
|
||||
exec line
|
||||
continue
|
||||
line = line.rstrip()
|
||||
dir, dircase = makepath(sitedir, line)
|
||||
if not dircase in known_paths and os.path.exists(dir):
|
||||
sys.path.append(dir)
|
||||
known_paths.add(dircase)
|
||||
except Exception as err:
|
||||
print >>sys.stderr, "Error processing line {:d} of {}:\n".format(
|
||||
n+1, fullname)
|
||||
for record in traceback.format_exception(*sys.exc_info()):
|
||||
for line in record.splitlines():
|
||||
print >>sys.stderr, ' '+line
|
||||
print >>sys.stderr, "\nRemainder of file ignored"
|
||||
break
|
||||
if reset:
|
||||
known_paths = None
|
||||
return known_paths
|
||||
|
||||
|
||||
def addsitedir(sitedir, known_paths=None):
|
||||
"""Add 'sitedir' argument to sys.path if missing and handle .pth files in
|
||||
'sitedir'"""
|
||||
if known_paths is None:
|
||||
known_paths = _init_pathinfo()
|
||||
reset = 1
|
||||
else:
|
||||
reset = 0
|
||||
sitedir, sitedircase = makepath(sitedir)
|
||||
if not sitedircase in known_paths:
|
||||
sys.path.append(sitedir) # Add path component
|
||||
try:
|
||||
names = os.listdir(sitedir)
|
||||
except os.error:
|
||||
return
|
||||
dotpth = os.extsep + "pth"
|
||||
names = [name for name in names if name.endswith(dotpth)]
|
||||
for name in sorted(names):
|
||||
addpackage(sitedir, name, known_paths)
|
||||
if reset:
|
||||
known_paths = None
|
||||
return known_paths
|
||||
|
||||
|
||||
def check_enableusersite():
|
||||
"""Check if user site directory is safe for inclusion
|
||||
|
||||
The function tests for the command line flag (including environment var),
|
||||
process uid/gid equal to effective uid/gid.
|
||||
|
||||
None: Disabled for security reasons
|
||||
False: Disabled by user (command line option)
|
||||
True: Safe and enabled
|
||||
"""
|
||||
if sys.flags.no_user_site:
|
||||
return False
|
||||
|
||||
if hasattr(os, "getuid") and hasattr(os, "geteuid"):
|
||||
# check process uid == effective uid
|
||||
if os.geteuid() != os.getuid():
|
||||
return None
|
||||
if hasattr(os, "getgid") and hasattr(os, "getegid"):
|
||||
# check process gid == effective gid
|
||||
if os.getegid() != os.getgid():
|
||||
return None
|
||||
|
||||
return True
|
||||
|
||||
def getuserbase():
|
||||
"""Returns the `user base` directory path.
|
||||
|
||||
The `user base` directory can be used to store data. If the global
|
||||
variable ``USER_BASE`` is not initialized yet, this function will also set
|
||||
it.
|
||||
"""
|
||||
global USER_BASE
|
||||
if USER_BASE is not None:
|
||||
return USER_BASE
|
||||
from sysconfig import get_config_var
|
||||
USER_BASE = get_config_var('userbase')
|
||||
return USER_BASE
|
||||
|
||||
def getusersitepackages():
|
||||
"""Returns the user-specific site-packages directory path.
|
||||
|
||||
If the global variable ``USER_SITE`` is not initialized yet, this
|
||||
function will also set it.
|
||||
"""
|
||||
global USER_SITE
|
||||
user_base = getuserbase() # this will also set USER_BASE
|
||||
|
||||
if USER_SITE is not None:
|
||||
return USER_SITE
|
||||
|
||||
from sysconfig import get_path
|
||||
import os
|
||||
|
||||
USER_SITE = get_path('purelib', '%s_user' % os.name)
|
||||
return USER_SITE
|
||||
|
||||
def addusersitepackages(known_paths):
|
||||
"""Add a per user site-package to sys.path
|
||||
|
||||
Each user has its own python directory with site-packages in the
|
||||
home directory.
|
||||
"""
|
||||
# get the per user site-package path
|
||||
# this call will also make sure USER_BASE and USER_SITE are set
|
||||
user_site = getusersitepackages()
|
||||
|
||||
if ENABLE_USER_SITE and os.path.isdir(user_site):
|
||||
addsitedir(user_site, known_paths)
|
||||
return known_paths
|
||||
|
||||
def getsitepackages():
|
||||
"""Returns a list containing all global site-packages directories
|
||||
(and possibly site-python).
|
||||
|
||||
For each directory present in the global ``PREFIXES``, this function
|
||||
will find its `site-packages` subdirectory depending on the system
|
||||
environment, and will return a list of full paths.
|
||||
"""
|
||||
sitepackages = []
|
||||
seen = set()
|
||||
|
||||
for prefix in PREFIXES:
|
||||
if not prefix or prefix in seen:
|
||||
continue
|
||||
seen.add(prefix)
|
||||
|
||||
sitepackages.append(os.path.join(prefix, "lib",
|
||||
"python." + sys.version[0] + sys.version[2],
|
||||
"site-packages"))
|
||||
sitepackages.append(os.path.join(prefix, "lib", "site-python"))
|
||||
return sitepackages
|
||||
|
||||
def addsitepackages(known_paths):
|
||||
"""Add site-packages (and possibly site-python) to sys.path"""
|
||||
for sitedir in getsitepackages():
|
||||
if os.path.isdir(sitedir):
|
||||
addsitedir(sitedir, known_paths)
|
||||
|
||||
return known_paths
|
||||
|
||||
def setBEGINLIBPATH():
|
||||
"""The UEFI port has optional extension modules that do double duty
|
||||
as DLLs (even though they have .efi file extensions) for other extensions.
|
||||
The library search path needs to be amended so these will be found
|
||||
during module import. Use BEGINLIBPATH so that these are at the start
|
||||
of the library search path.
|
||||
|
||||
"""
|
||||
dllpath = os.path.join(sys.prefix, "Lib", "lib-dynload")
|
||||
libpath = os.environ['BEGINLIBPATH'].split(os.path.pathsep)
|
||||
if libpath[-1]:
|
||||
libpath.append(dllpath)
|
||||
else:
|
||||
libpath[-1] = dllpath
|
||||
os.environ['BEGINLIBPATH'] = os.path.pathsep.join(libpath)
|
||||
|
||||
|
||||
def setquit():
|
||||
"""Define new builtins 'quit' and 'exit'.
|
||||
|
||||
These are objects which make the interpreter exit when called.
|
||||
The repr of each object contains a hint at how it works.
|
||||
|
||||
"""
|
||||
eof = 'Ctrl-D (i.e. EOF)'
|
||||
|
||||
class Quitter(object):
|
||||
def __init__(self, name):
|
||||
self.name = name
|
||||
def __repr__(self):
|
||||
return 'Use %s() or %s to exit' % (self.name, eof)
|
||||
def __call__(self, code=None):
|
||||
# Shells like IDLE catch the SystemExit, but listen when their
|
||||
# stdin wrapper is closed.
|
||||
try:
|
||||
sys.stdin.close()
|
||||
except:
|
||||
pass
|
||||
raise SystemExit(code)
|
||||
__builtin__.quit = Quitter('quit')
|
||||
__builtin__.exit = Quitter('exit')
|
||||
|
||||
|
||||
class _Printer(object):
|
||||
"""interactive prompt objects for printing the license text, a list of
|
||||
contributors and the copyright notice."""
|
||||
|
||||
MAXLINES = 23
|
||||
|
||||
def __init__(self, name, data, files=(), dirs=()):
|
||||
self.__name = name
|
||||
self.__data = data
|
||||
self.__files = files
|
||||
self.__dirs = dirs
|
||||
self.__lines = None
|
||||
|
||||
def __setup(self):
|
||||
if self.__lines:
|
||||
return
|
||||
data = None
|
||||
for dir in self.__dirs:
|
||||
for filename in self.__files:
|
||||
filename = os.path.join(dir, filename)
|
||||
try:
|
||||
fp = file(filename, "rU")
|
||||
data = fp.read()
|
||||
fp.close()
|
||||
break
|
||||
except IOError:
|
||||
pass
|
||||
if data:
|
||||
break
|
||||
if not data:
|
||||
data = self.__data
|
||||
self.__lines = data.split('\n')
|
||||
self.__linecnt = len(self.__lines)
|
||||
|
||||
def __repr__(self):
|
||||
self.__setup()
|
||||
if len(self.__lines) <= self.MAXLINES:
|
||||
return "\n".join(self.__lines)
|
||||
else:
|
||||
return "Type %s() to see the full %s text" % ((self.__name,)*2)
|
||||
|
||||
def __call__(self):
|
||||
self.__setup()
|
||||
prompt = 'Hit Return for more, or q (and Return) to quit: '
|
||||
lineno = 0
|
||||
while 1:
|
||||
try:
|
||||
for i in range(lineno, lineno + self.MAXLINES):
|
||||
print self.__lines[i]
|
||||
except IndexError:
|
||||
break
|
||||
else:
|
||||
lineno += self.MAXLINES
|
||||
key = None
|
||||
while key is None:
|
||||
key = raw_input(prompt)
|
||||
if key not in ('', 'q'):
|
||||
key = None
|
||||
if key == 'q':
|
||||
break
|
||||
|
||||
def setcopyright():
|
||||
"""Set 'copyright' and 'credits' in __builtin__"""
|
||||
__builtin__.copyright = _Printer("copyright", sys.copyright)
|
||||
__builtin__.credits = _Printer("credits", """\
|
||||
Thanks to CWI, CNRI, BeOpen.com, Zope Corporation and a cast of thousands
|
||||
for supporting Python development. See www.python.org for more information.""")
|
||||
here = os.path.dirname(os.__file__)
|
||||
__builtin__.license = _Printer(
|
||||
"license", "See http://www.python.org/%.3s/license.html" % sys.version,
|
||||
["LICENSE.txt", "LICENSE"],
|
||||
[os.path.join(here, os.pardir), here, os.curdir])
|
||||
|
||||
|
||||
class _Helper(object):
|
||||
"""Define the builtin 'help'.
|
||||
This is a wrapper around pydoc.help (with a twist).
|
||||
|
||||
"""
|
||||
|
||||
def __repr__(self):
|
||||
return "Type help() for interactive help, " \
|
||||
"or help(object) for help about object."
|
||||
|
||||
def __call__(self, *args, **kwds):
|
||||
import pydoc
|
||||
return pydoc.help(*args, **kwds)
|
||||
|
||||
def sethelper():
|
||||
__builtin__.help = _Helper()
|
||||
|
||||
####
|
||||
# Keep around for future mbcs support.
|
||||
####
|
||||
#def aliasmbcs():
|
||||
# """On Windows, some default encodings are not provided by Python,
|
||||
# while they are always available as "mbcs" in each locale. Make
|
||||
# them usable by aliasing to "mbcs" in such a case."""
|
||||
# if sys.platform == 'win32':
|
||||
# import locale, codecs
|
||||
# enc = locale.getdefaultlocale()[1]
|
||||
# if enc.startswith('cp'): # "cp***" ?
|
||||
# try:
|
||||
# codecs.lookup(enc)
|
||||
# except LookupError:
|
||||
# import encodings
|
||||
# encodings._cache[enc] = encodings._unknown
|
||||
# encodings.aliases.aliases[enc] = 'mbcs'
|
||||
|
||||
def setencoding():
|
||||
"""Set the string encoding used by the Unicode implementation. The
|
||||
default is 'ascii', but if you're willing to experiment, you can
|
||||
change this."""
|
||||
encoding = "ascii" # Default value set by _PyUnicode_Init()
|
||||
if 0:
|
||||
# Enable to support locale aware default string encodings.
|
||||
import locale
|
||||
loc = locale.getdefaultlocale()
|
||||
if loc[1]:
|
||||
encoding = loc[1]
|
||||
if 0:
|
||||
# Enable to switch off string to Unicode coercion and implicit
|
||||
# Unicode to string conversion.
|
||||
encoding = "undefined"
|
||||
if encoding != "ascii":
|
||||
# On Non-Unicode builds this will raise an AttributeError...
|
||||
sys.setdefaultencoding(encoding) # Needs Python Unicode build !
|
||||
|
||||
|
||||
def execsitecustomize():
|
||||
"""Run custom site specific code, if available."""
|
||||
try:
|
||||
import sitecustomize
|
||||
except ImportError:
|
||||
pass
|
||||
except Exception:
|
||||
if sys.flags.verbose:
|
||||
sys.excepthook(*sys.exc_info())
|
||||
else:
|
||||
print >>sys.stderr, \
|
||||
"'import sitecustomize' failed; use -v for traceback"
|
||||
|
||||
|
||||
def execusercustomize():
|
||||
"""Run custom user specific code, if available."""
|
||||
try:
|
||||
import usercustomize
|
||||
except ImportError:
|
||||
pass
|
||||
except Exception:
|
||||
if sys.flags.verbose:
|
||||
sys.excepthook(*sys.exc_info())
|
||||
else:
|
||||
print>>sys.stderr, \
|
||||
"'import usercustomize' failed; use -v for traceback"
|
||||
|
||||
|
||||
def main():
|
||||
abs__file__()
|
||||
known_paths = removeduppaths()
|
||||
setquit()
|
||||
setcopyright()
|
||||
sethelper()
|
||||
# aliasmbcs()
|
||||
setencoding()
|
||||
execsitecustomize()
|
||||
# Remove sys.setdefaultencoding() so that users cannot change the
|
||||
# encoding after initialization. The test for presence is needed when
|
||||
# this module is run as a script, because this code is executed twice.
|
||||
if hasattr(sys, "setdefaultencoding"):
|
||||
del sys.setdefaultencoding
|
||||
|
||||
main()
|
||||
|
||||
def _script():
|
||||
help = """\
|
||||
%s
|
||||
|
||||
Path elements are normally separated by '%s'.
|
||||
"""
|
||||
print "sys.path = ["
|
||||
for dir in sys.path:
|
||||
print " %r," % (dir,)
|
||||
print "]"
|
||||
|
||||
import textwrap
|
||||
print textwrap.dedent(help % (sys.argv[0], os.pathsep))
|
||||
sys.exit(0)
|
||||
|
||||
if __name__ == '__main__':
|
||||
_script()
|
|
@ -0,0 +1,845 @@
|
|||
|
||||
/* Errno module
|
||||
|
||||
Copyright (c) 2011 - 2012, Intel Corporation. All rights reserved.<BR>
|
||||
This program and the accompanying materials are licensed and made available under
|
||||
the terms and conditions of the BSD License that accompanies this distribution.
|
||||
The full text of the license may be found at
|
||||
http://opensource.org/licenses/bsd-license.
|
||||
|
||||
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
||||
*/
|
||||
|
||||
#include "Python.h"
|
||||
|
||||
/* Windows socket errors (WSA*) */
|
||||
#ifdef MS_WINDOWS
|
||||
#include <windows.h>
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Pull in the system error definitions
|
||||
*/
|
||||
|
||||
static PyMethodDef errno_methods[] = {
|
||||
{NULL, NULL}
|
||||
};
|
||||
|
||||
/* Helper function doing the dictionary inserting */
|
||||
|
||||
static void
|
||||
_inscode(PyObject *d, PyObject *de, char *name, int code)
|
||||
{
|
||||
PyObject *u = PyString_FromString(name);
|
||||
PyObject *v = PyInt_FromLong((long) code);
|
||||
|
||||
/* Don't bother checking for errors; they'll be caught at the end
|
||||
* of the module initialization function by the caller of
|
||||
* initerrno().
|
||||
*/
|
||||
if (u && v) {
|
||||
/* insert in modules dict */
|
||||
PyDict_SetItem(d, u, v);
|
||||
/* insert in errorcode dict */
|
||||
PyDict_SetItem(de, v, u);
|
||||
}
|
||||
Py_XDECREF(u);
|
||||
Py_XDECREF(v);
|
||||
}
|
||||
|
||||
PyDoc_STRVAR(errno__doc__,
|
||||
"This module makes available standard errno system symbols.\n\
|
||||
\n\
|
||||
The value of each symbol is the corresponding integer value,\n\
|
||||
e.g., on most systems, errno.ENOENT equals the integer 2.\n\
|
||||
\n\
|
||||
The dictionary errno.errorcode maps numeric codes to symbol names,\n\
|
||||
e.g., errno.errorcode[2] could be the string 'ENOENT'.\n\
|
||||
\n\
|
||||
Symbols that are not relevant to the underlying system are not defined.\n\
|
||||
\n\
|
||||
To map error codes to error messages, use the function os.strerror(),\n\
|
||||
e.g. os.strerror(2) could return 'No such file or directory'.");
|
||||
|
||||
PyMODINIT_FUNC
|
||||
initerrno(void)
|
||||
{
|
||||
PyObject *m, *d, *de;
|
||||
m = Py_InitModule3("errno", errno_methods, errno__doc__);
|
||||
if (m == NULL)
|
||||
return;
|
||||
d = PyModule_GetDict(m);
|
||||
de = PyDict_New();
|
||||
if (!d || !de || PyDict_SetItemString(d, "errorcode", de) < 0)
|
||||
return;
|
||||
|
||||
/* Macro so I don't have to edit each and every line below... */
|
||||
#define inscode(d, ds, de, name, code, comment) _inscode(d, de, name, code)
|
||||
|
||||
/*
|
||||
* The names and comments are borrowed from linux/include/errno.h,
|
||||
* which should be pretty all-inclusive
|
||||
*/
|
||||
|
||||
#ifdef ENODEV
|
||||
inscode(d, ds, de, "ENODEV", ENODEV, "No such device");
|
||||
#endif
|
||||
#ifdef ENOCSI
|
||||
inscode(d, ds, de, "ENOCSI", ENOCSI, "No CSI structure available");
|
||||
#endif
|
||||
#ifdef EHOSTUNREACH
|
||||
inscode(d, ds, de, "EHOSTUNREACH", EHOSTUNREACH, "No route to host");
|
||||
#else
|
||||
#ifdef WSAEHOSTUNREACH
|
||||
inscode(d, ds, de, "EHOSTUNREACH", WSAEHOSTUNREACH, "No route to host");
|
||||
#endif
|
||||
#endif
|
||||
#ifdef ENOMSG
|
||||
inscode(d, ds, de, "ENOMSG", ENOMSG, "No message of desired type");
|
||||
#endif
|
||||
#ifdef EUCLEAN
|
||||
inscode(d, ds, de, "EUCLEAN", EUCLEAN, "Structure needs cleaning");
|
||||
#endif
|
||||
#ifdef EL2NSYNC
|
||||
inscode(d, ds, de, "EL2NSYNC", EL2NSYNC, "Level 2 not synchronized");
|
||||
#endif
|
||||
#ifdef EL2HLT
|
||||
inscode(d, ds, de, "EL2HLT", EL2HLT, "Level 2 halted");
|
||||
#endif
|
||||
#ifdef ENODATA
|
||||
inscode(d, ds, de, "ENODATA", ENODATA, "No data available");
|
||||
#endif
|
||||
#ifdef ENOTBLK
|
||||
inscode(d, ds, de, "ENOTBLK", ENOTBLK, "Block device required");
|
||||
#endif
|
||||
#ifdef ENOSYS
|
||||
inscode(d, ds, de, "ENOSYS", ENOSYS, "Function not implemented");
|
||||
#endif
|
||||
#ifdef EPIPE
|
||||
inscode(d, ds, de, "EPIPE", EPIPE, "Broken pipe");
|
||||
#endif
|
||||
#ifdef EINVAL
|
||||
inscode(d, ds, de, "EINVAL", EINVAL, "Invalid argument");
|
||||
#else
|
||||
#ifdef WSAEINVAL
|
||||
inscode(d, ds, de, "EINVAL", WSAEINVAL, "Invalid argument");
|
||||
#endif
|
||||
#endif
|
||||
#ifdef EOVERFLOW
|
||||
inscode(d, ds, de, "EOVERFLOW", EOVERFLOW, "Value too large for defined data type");
|
||||
#endif
|
||||
#ifdef EADV
|
||||
inscode(d, ds, de, "EADV", EADV, "Advertise error");
|
||||
#endif
|
||||
#ifdef EINTR
|
||||
inscode(d, ds, de, "EINTR", EINTR, "Interrupted system call");
|
||||
#else
|
||||
#ifdef WSAEINTR
|
||||
inscode(d, ds, de, "EINTR", WSAEINTR, "Interrupted system call");
|
||||
#endif
|
||||
#endif
|
||||
#ifdef EUSERS
|
||||
inscode(d, ds, de, "EUSERS", EUSERS, "Too many users");
|
||||
#else
|
||||
#ifdef WSAEUSERS
|
||||
inscode(d, ds, de, "EUSERS", WSAEUSERS, "Too many users");
|
||||
#endif
|
||||
#endif
|
||||
#ifdef ENOTEMPTY
|
||||
inscode(d, ds, de, "ENOTEMPTY", ENOTEMPTY, "Directory not empty");
|
||||
#else
|
||||
#ifdef WSAENOTEMPTY
|
||||
inscode(d, ds, de, "ENOTEMPTY", WSAENOTEMPTY, "Directory not empty");
|
||||
#endif
|
||||
#endif
|
||||
#ifdef ENOBUFS
|
||||
inscode(d, ds, de, "ENOBUFS", ENOBUFS, "No buffer space available");
|
||||
#else
|
||||
#ifdef WSAENOBUFS
|
||||
inscode(d, ds, de, "ENOBUFS", WSAENOBUFS, "No buffer space available");
|
||||
#endif
|
||||
#endif
|
||||
#ifdef EPROTO
|
||||
inscode(d, ds, de, "EPROTO", EPROTO, "Protocol error");
|
||||
#endif
|
||||
#ifdef EREMOTE
|
||||
inscode(d, ds, de, "EREMOTE", EREMOTE, "Object is remote");
|
||||
#else
|
||||
#ifdef WSAEREMOTE
|
||||
inscode(d, ds, de, "EREMOTE", WSAEREMOTE, "Object is remote");
|
||||
#endif
|
||||
#endif
|
||||
#ifdef ENAVAIL
|
||||
inscode(d, ds, de, "ENAVAIL", ENAVAIL, "No XENIX semaphores available");
|
||||
#endif
|
||||
#ifdef ECHILD
|
||||
inscode(d, ds, de, "ECHILD", ECHILD, "No child processes");
|
||||
#endif
|
||||
#ifdef ELOOP
|
||||
inscode(d, ds, de, "ELOOP", ELOOP, "Too many symbolic links encountered");
|
||||
#else
|
||||
#ifdef WSAELOOP
|
||||
inscode(d, ds, de, "ELOOP", WSAELOOP, "Too many symbolic links encountered");
|
||||
#endif
|
||||
#endif
|
||||
#ifdef EXDEV
|
||||
inscode(d, ds, de, "EXDEV", EXDEV, "Cross-device link");
|
||||
#endif
|
||||
#ifdef E2BIG
|
||||
inscode(d, ds, de, "E2BIG", E2BIG, "Arg list too long");
|
||||
#endif
|
||||
#ifdef ESRCH
|
||||
inscode(d, ds, de, "ESRCH", ESRCH, "No such process");
|
||||
#endif
|
||||
#ifdef EMSGSIZE
|
||||
inscode(d, ds, de, "EMSGSIZE", EMSGSIZE, "Message too long");
|
||||
#else
|
||||
#ifdef WSAEMSGSIZE
|
||||
inscode(d, ds, de, "EMSGSIZE", WSAEMSGSIZE, "Message too long");
|
||||
#endif
|
||||
#endif
|
||||
#ifdef EAFNOSUPPORT
|
||||
inscode(d, ds, de, "EAFNOSUPPORT", EAFNOSUPPORT, "Address family not supported by protocol");
|
||||
#else
|
||||
#ifdef WSAEAFNOSUPPORT
|
||||
inscode(d, ds, de, "EAFNOSUPPORT", WSAEAFNOSUPPORT, "Address family not supported by protocol");
|
||||
#endif
|
||||
#endif
|
||||
#ifdef EBADR
|
||||
inscode(d, ds, de, "EBADR", EBADR, "Invalid request descriptor");
|
||||
#endif
|
||||
#ifdef EHOSTDOWN
|
||||
inscode(d, ds, de, "EHOSTDOWN", EHOSTDOWN, "Host is down");
|
||||
#else
|
||||
#ifdef WSAEHOSTDOWN
|
||||
inscode(d, ds, de, "EHOSTDOWN", WSAEHOSTDOWN, "Host is down");
|
||||
#endif
|
||||
#endif
|
||||
#ifdef EPFNOSUPPORT
|
||||
inscode(d, ds, de, "EPFNOSUPPORT", EPFNOSUPPORT, "Protocol family not supported");
|
||||
#else
|
||||
#ifdef WSAEPFNOSUPPORT
|
||||
inscode(d, ds, de, "EPFNOSUPPORT", WSAEPFNOSUPPORT, "Protocol family not supported");
|
||||
#endif
|
||||
#endif
|
||||
#ifdef ENOPROTOOPT
|
||||
inscode(d, ds, de, "ENOPROTOOPT", ENOPROTOOPT, "Protocol not available");
|
||||
#else
|
||||
#ifdef WSAENOPROTOOPT
|
||||
inscode(d, ds, de, "ENOPROTOOPT", WSAENOPROTOOPT, "Protocol not available");
|
||||
#endif
|
||||
#endif
|
||||
#ifdef EBUSY
|
||||
inscode(d, ds, de, "EBUSY", EBUSY, "Device or resource busy");
|
||||
#endif
|
||||
#ifdef EWOULDBLOCK
|
||||
inscode(d, ds, de, "EWOULDBLOCK", EWOULDBLOCK, "Operation would block");
|
||||
#else
|
||||
#ifdef WSAEWOULDBLOCK
|
||||
inscode(d, ds, de, "EWOULDBLOCK", WSAEWOULDBLOCK, "Operation would block");
|
||||
#endif
|
||||
#endif
|
||||
#ifdef EBADFD
|
||||
inscode(d, ds, de, "EBADFD", EBADFD, "File descriptor in bad state");
|
||||
#endif
|
||||
#ifdef EDOTDOT
|
||||
inscode(d, ds, de, "EDOTDOT", EDOTDOT, "RFS specific error");
|
||||
#endif
|
||||
#ifdef EISCONN
|
||||
inscode(d, ds, de, "EISCONN", EISCONN, "Transport endpoint is already connected");
|
||||
#else
|
||||
#ifdef WSAEISCONN
|
||||
inscode(d, ds, de, "EISCONN", WSAEISCONN, "Transport endpoint is already connected");
|
||||
#endif
|
||||
#endif
|
||||
#ifdef ENOANO
|
||||
inscode(d, ds, de, "ENOANO", ENOANO, "No anode");
|
||||
#endif
|
||||
#ifdef ESHUTDOWN
|
||||
inscode(d, ds, de, "ESHUTDOWN", ESHUTDOWN, "Cannot send after transport endpoint shutdown");
|
||||
#else
|
||||
#ifdef WSAESHUTDOWN
|
||||
inscode(d, ds, de, "ESHUTDOWN", WSAESHUTDOWN, "Cannot send after transport endpoint shutdown");
|
||||
#endif
|
||||
#endif
|
||||
#ifdef ECHRNG
|
||||
inscode(d, ds, de, "ECHRNG", ECHRNG, "Channel number out of range");
|
||||
#endif
|
||||
#ifdef ELIBBAD
|
||||
inscode(d, ds, de, "ELIBBAD", ELIBBAD, "Accessing a corrupted shared library");
|
||||
#endif
|
||||
#ifdef ENONET
|
||||
inscode(d, ds, de, "ENONET", ENONET, "Machine is not on the network");
|
||||
#endif
|
||||
#ifdef EBADE
|
||||
inscode(d, ds, de, "EBADE", EBADE, "Invalid exchange");
|
||||
#endif
|
||||
#ifdef EBADF
|
||||
inscode(d, ds, de, "EBADF", EBADF, "Bad file number");
|
||||
#else
|
||||
#ifdef WSAEBADF
|
||||
inscode(d, ds, de, "EBADF", WSAEBADF, "Bad file number");
|
||||
#endif
|
||||
#endif
|
||||
#ifdef EMULTIHOP
|
||||
inscode(d, ds, de, "EMULTIHOP", EMULTIHOP, "Multihop attempted");
|
||||
#endif
|
||||
#ifdef EIO
|
||||
inscode(d, ds, de, "EIO", EIO, "I/O error");
|
||||
#endif
|
||||
#ifdef EUNATCH
|
||||
inscode(d, ds, de, "EUNATCH", EUNATCH, "Protocol driver not attached");
|
||||
#endif
|
||||
#ifdef EPROTOTYPE
|
||||
inscode(d, ds, de, "EPROTOTYPE", EPROTOTYPE, "Protocol wrong type for socket");
|
||||
#else
|
||||
#ifdef WSAEPROTOTYPE
|
||||
inscode(d, ds, de, "EPROTOTYPE", WSAEPROTOTYPE, "Protocol wrong type for socket");
|
||||
#endif
|
||||
#endif
|
||||
#ifdef ENOSPC
|
||||
inscode(d, ds, de, "ENOSPC", ENOSPC, "No space left on device");
|
||||
#endif
|
||||
#ifdef ENOEXEC
|
||||
inscode(d, ds, de, "ENOEXEC", ENOEXEC, "Exec format error");
|
||||
#endif
|
||||
#ifdef EALREADY
|
||||
inscode(d, ds, de, "EALREADY", EALREADY, "Operation already in progress");
|
||||
#else
|
||||
#ifdef WSAEALREADY
|
||||
inscode(d, ds, de, "EALREADY", WSAEALREADY, "Operation already in progress");
|
||||
#endif
|
||||
#endif
|
||||
#ifdef ENETDOWN
|
||||
inscode(d, ds, de, "ENETDOWN", ENETDOWN, "Network is down");
|
||||
#else
|
||||
#ifdef WSAENETDOWN
|
||||
inscode(d, ds, de, "ENETDOWN", WSAENETDOWN, "Network is down");
|
||||
#endif
|
||||
#endif
|
||||
#ifdef ENOTNAM
|
||||
inscode(d, ds, de, "ENOTNAM", ENOTNAM, "Not a XENIX named type file");
|
||||
#endif
|
||||
#ifdef EACCES
|
||||
inscode(d, ds, de, "EACCES", EACCES, "Permission denied");
|
||||
#else
|
||||
#ifdef WSAEACCES
|
||||
inscode(d, ds, de, "EACCES", WSAEACCES, "Permission denied");
|
||||
#endif
|
||||
#endif
|
||||
#ifdef ELNRNG
|
||||
inscode(d, ds, de, "ELNRNG", ELNRNG, "Link number out of range");
|
||||
#endif
|
||||
#ifdef EILSEQ
|
||||
inscode(d, ds, de, "EILSEQ", EILSEQ, "Illegal byte sequence");
|
||||
#endif
|
||||
#ifdef ENOTDIR
|
||||
inscode(d, ds, de, "ENOTDIR", ENOTDIR, "Not a directory");
|
||||
#endif
|
||||
#ifdef ENOTUNIQ
|
||||
inscode(d, ds, de, "ENOTUNIQ", ENOTUNIQ, "Name not unique on network");
|
||||
#endif
|
||||
#ifdef EPERM
|
||||
inscode(d, ds, de, "EPERM", EPERM, "Operation not permitted");
|
||||
#endif
|
||||
#ifdef EDOM
|
||||
inscode(d, ds, de, "EDOM", EDOM, "Math argument out of domain of func");
|
||||
#endif
|
||||
#ifdef EXFULL
|
||||
inscode(d, ds, de, "EXFULL", EXFULL, "Exchange full");
|
||||
#endif
|
||||
#ifdef ECONNREFUSED
|
||||
inscode(d, ds, de, "ECONNREFUSED", ECONNREFUSED, "Connection refused");
|
||||
#else
|
||||
#ifdef WSAECONNREFUSED
|
||||
inscode(d, ds, de, "ECONNREFUSED", WSAECONNREFUSED, "Connection refused");
|
||||
#endif
|
||||
#endif
|
||||
#ifdef EISDIR
|
||||
inscode(d, ds, de, "EISDIR", EISDIR, "Is a directory");
|
||||
#endif
|
||||
#ifdef EPROTONOSUPPORT
|
||||
inscode(d, ds, de, "EPROTONOSUPPORT", EPROTONOSUPPORT, "Protocol not supported");
|
||||
#else
|
||||
#ifdef WSAEPROTONOSUPPORT
|
||||
inscode(d, ds, de, "EPROTONOSUPPORT", WSAEPROTONOSUPPORT, "Protocol not supported");
|
||||
#endif
|
||||
#endif
|
||||
#ifdef EROFS
|
||||
inscode(d, ds, de, "EROFS", EROFS, "Read-only file system");
|
||||
#endif
|
||||
#ifdef EADDRNOTAVAIL
|
||||
inscode(d, ds, de, "EADDRNOTAVAIL", EADDRNOTAVAIL, "Cannot assign requested address");
|
||||
#else
|
||||
#ifdef WSAEADDRNOTAVAIL
|
||||
inscode(d, ds, de, "EADDRNOTAVAIL", WSAEADDRNOTAVAIL, "Cannot assign requested address");
|
||||
#endif
|
||||
#endif
|
||||
#ifdef EIDRM
|
||||
inscode(d, ds, de, "EIDRM", EIDRM, "Identifier removed");
|
||||
#endif
|
||||
#ifdef ECOMM
|
||||
inscode(d, ds, de, "ECOMM", ECOMM, "Communication error on send");
|
||||
#endif
|
||||
#ifdef ESRMNT
|
||||
inscode(d, ds, de, "ESRMNT", ESRMNT, "Srmount error");
|
||||
#endif
|
||||
#ifdef EREMOTEIO
|
||||
inscode(d, ds, de, "EREMOTEIO", EREMOTEIO, "Remote I/O error");
|
||||
#endif
|
||||
#ifdef EL3RST
|
||||
inscode(d, ds, de, "EL3RST", EL3RST, "Level 3 reset");
|
||||
#endif
|
||||
#ifdef EBADMSG
|
||||
inscode(d, ds, de, "EBADMSG", EBADMSG, "Not a data message");
|
||||
#endif
|
||||
#ifdef ENFILE
|
||||
inscode(d, ds, de, "ENFILE", ENFILE, "File table overflow");
|
||||
#endif
|
||||
#ifdef ELIBMAX
|
||||
inscode(d, ds, de, "ELIBMAX", ELIBMAX, "Attempting to link in too many shared libraries");
|
||||
#endif
|
||||
#ifdef ESPIPE
|
||||
inscode(d, ds, de, "ESPIPE", ESPIPE, "Illegal seek");
|
||||
#endif
|
||||
#ifdef ENOLINK
|
||||
inscode(d, ds, de, "ENOLINK", ENOLINK, "Link has been severed");
|
||||
#endif
|
||||
#ifdef ENETRESET
|
||||
inscode(d, ds, de, "ENETRESET", ENETRESET, "Network dropped connection because of reset");
|
||||
#else
|
||||
#ifdef WSAENETRESET
|
||||
inscode(d, ds, de, "ENETRESET", WSAENETRESET, "Network dropped connection because of reset");
|
||||
#endif
|
||||
#endif
|
||||
#ifdef ETIMEDOUT
|
||||
inscode(d, ds, de, "ETIMEDOUT", ETIMEDOUT, "Connection timed out");
|
||||
#else
|
||||
#ifdef WSAETIMEDOUT
|
||||
inscode(d, ds, de, "ETIMEDOUT", WSAETIMEDOUT, "Connection timed out");
|
||||
#endif
|
||||
#endif
|
||||
#ifdef ENOENT
|
||||
inscode(d, ds, de, "ENOENT", ENOENT, "No such file or directory");
|
||||
#endif
|
||||
#ifdef EEXIST
|
||||
inscode(d, ds, de, "EEXIST", EEXIST, "File exists");
|
||||
#endif
|
||||
#ifdef EDQUOT
|
||||
inscode(d, ds, de, "EDQUOT", EDQUOT, "Quota exceeded");
|
||||
#else
|
||||
#ifdef WSAEDQUOT
|
||||
inscode(d, ds, de, "EDQUOT", WSAEDQUOT, "Quota exceeded");
|
||||
#endif
|
||||
#endif
|
||||
#ifdef ENOSTR
|
||||
inscode(d, ds, de, "ENOSTR", ENOSTR, "Device not a stream");
|
||||
#endif
|
||||
#ifdef EBADSLT
|
||||
inscode(d, ds, de, "EBADSLT", EBADSLT, "Invalid slot");
|
||||
#endif
|
||||
#ifdef EBADRQC
|
||||
inscode(d, ds, de, "EBADRQC", EBADRQC, "Invalid request code");
|
||||
#endif
|
||||
#ifdef ELIBACC
|
||||
inscode(d, ds, de, "ELIBACC", ELIBACC, "Can not access a needed shared library");
|
||||
#endif
|
||||
#ifdef EFAULT
|
||||
inscode(d, ds, de, "EFAULT", EFAULT, "Bad address");
|
||||
#else
|
||||
#ifdef WSAEFAULT
|
||||
inscode(d, ds, de, "EFAULT", WSAEFAULT, "Bad address");
|
||||
#endif
|
||||
#endif
|
||||
#ifdef EFBIG
|
||||
inscode(d, ds, de, "EFBIG", EFBIG, "File too large");
|
||||
#endif
|
||||
#ifdef EDEADLK
|
||||
inscode(d, ds, de, "EDEADLK", EDEADLK, "Resource deadlock would occur");
|
||||
#endif
|
||||
#ifdef ENOTCONN
|
||||
inscode(d, ds, de, "ENOTCONN", ENOTCONN, "Transport endpoint is not connected");
|
||||
#else
|
||||
#ifdef WSAENOTCONN
|
||||
inscode(d, ds, de, "ENOTCONN", WSAENOTCONN, "Transport endpoint is not connected");
|
||||
#endif
|
||||
#endif
|
||||
#ifdef EDESTADDRREQ
|
||||
inscode(d, ds, de, "EDESTADDRREQ", EDESTADDRREQ, "Destination address required");
|
||||
#else
|
||||
#ifdef WSAEDESTADDRREQ
|
||||
inscode(d, ds, de, "EDESTADDRREQ", WSAEDESTADDRREQ, "Destination address required");
|
||||
#endif
|
||||
#endif
|
||||
#ifdef ELIBSCN
|
||||
inscode(d, ds, de, "ELIBSCN", ELIBSCN, ".lib section in a.out corrupted");
|
||||
#endif
|
||||
#ifdef ENOLCK
|
||||
inscode(d, ds, de, "ENOLCK", ENOLCK, "No record locks available");
|
||||
#endif
|
||||
#ifdef EISNAM
|
||||
inscode(d, ds, de, "EISNAM", EISNAM, "Is a named type file");
|
||||
#endif
|
||||
#ifdef ECONNABORTED
|
||||
inscode(d, ds, de, "ECONNABORTED", ECONNABORTED, "Software caused connection abort");
|
||||
#else
|
||||
#ifdef WSAECONNABORTED
|
||||
inscode(d, ds, de, "ECONNABORTED", WSAECONNABORTED, "Software caused connection abort");
|
||||
#endif
|
||||
#endif
|
||||
#ifdef ENETUNREACH
|
||||
inscode(d, ds, de, "ENETUNREACH", ENETUNREACH, "Network is unreachable");
|
||||
#else
|
||||
#ifdef WSAENETUNREACH
|
||||
inscode(d, ds, de, "ENETUNREACH", WSAENETUNREACH, "Network is unreachable");
|
||||
#endif
|
||||
#endif
|
||||
#ifdef ESTALE
|
||||
inscode(d, ds, de, "ESTALE", ESTALE, "Stale NFS file handle");
|
||||
#else
|
||||
#ifdef WSAESTALE
|
||||
inscode(d, ds, de, "ESTALE", WSAESTALE, "Stale NFS file handle");
|
||||
#endif
|
||||
#endif
|
||||
#ifdef ENOSR
|
||||
inscode(d, ds, de, "ENOSR", ENOSR, "Out of streams resources");
|
||||
#endif
|
||||
#ifdef ENOMEM
|
||||
inscode(d, ds, de, "ENOMEM", ENOMEM, "Out of memory");
|
||||
#endif
|
||||
#ifdef ENOTSOCK
|
||||
inscode(d, ds, de, "ENOTSOCK", ENOTSOCK, "Socket operation on non-socket");
|
||||
#else
|
||||
#ifdef WSAENOTSOCK
|
||||
inscode(d, ds, de, "ENOTSOCK", WSAENOTSOCK, "Socket operation on non-socket");
|
||||
#endif
|
||||
#endif
|
||||
#ifdef ESTRPIPE
|
||||
inscode(d, ds, de, "ESTRPIPE", ESTRPIPE, "Streams pipe error");
|
||||
#endif
|
||||
#ifdef EMLINK
|
||||
inscode(d, ds, de, "EMLINK", EMLINK, "Too many links");
|
||||
#endif
|
||||
#ifdef ERANGE
|
||||
inscode(d, ds, de, "ERANGE", ERANGE, "Math result not representable");
|
||||
#endif
|
||||
#ifdef ELIBEXEC
|
||||
inscode(d, ds, de, "ELIBEXEC", ELIBEXEC, "Cannot exec a shared library directly");
|
||||
#endif
|
||||
#ifdef EL3HLT
|
||||
inscode(d, ds, de, "EL3HLT", EL3HLT, "Level 3 halted");
|
||||
#endif
|
||||
#ifdef ECONNRESET
|
||||
inscode(d, ds, de, "ECONNRESET", ECONNRESET, "Connection reset by peer");
|
||||
#else
|
||||
#ifdef WSAECONNRESET
|
||||
inscode(d, ds, de, "ECONNRESET", WSAECONNRESET, "Connection reset by peer");
|
||||
#endif
|
||||
#endif
|
||||
#ifdef EADDRINUSE
|
||||
inscode(d, ds, de, "EADDRINUSE", EADDRINUSE, "Address already in use");
|
||||
#else
|
||||
#ifdef WSAEADDRINUSE
|
||||
inscode(d, ds, de, "EADDRINUSE", WSAEADDRINUSE, "Address already in use");
|
||||
#endif
|
||||
#endif
|
||||
#ifdef EOPNOTSUPP
|
||||
inscode(d, ds, de, "EOPNOTSUPP", EOPNOTSUPP, "Operation not supported on transport endpoint");
|
||||
#else
|
||||
#ifdef WSAEOPNOTSUPP
|
||||
inscode(d, ds, de, "EOPNOTSUPP", WSAEOPNOTSUPP, "Operation not supported on transport endpoint");
|
||||
#endif
|
||||
#endif
|
||||
#ifdef EREMCHG
|
||||
inscode(d, ds, de, "EREMCHG", EREMCHG, "Remote address changed");
|
||||
#endif
|
||||
#ifdef EAGAIN
|
||||
inscode(d, ds, de, "EAGAIN", EAGAIN, "Try again");
|
||||
#endif
|
||||
#ifdef ENAMETOOLONG
|
||||
inscode(d, ds, de, "ENAMETOOLONG", ENAMETOOLONG, "File name too long");
|
||||
#else
|
||||
#ifdef WSAENAMETOOLONG
|
||||
inscode(d, ds, de, "ENAMETOOLONG", WSAENAMETOOLONG, "File name too long");
|
||||
#endif
|
||||
#endif
|
||||
#ifdef ENOTTY
|
||||
inscode(d, ds, de, "ENOTTY", ENOTTY, "Not a typewriter");
|
||||
#endif
|
||||
#ifdef ERESTART
|
||||
inscode(d, ds, de, "ERESTART", ERESTART, "Interrupted system call should be restarted");
|
||||
#endif
|
||||
#ifdef ESOCKTNOSUPPORT
|
||||
inscode(d, ds, de, "ESOCKTNOSUPPORT", ESOCKTNOSUPPORT, "Socket type not supported");
|
||||
#else
|
||||
#ifdef WSAESOCKTNOSUPPORT
|
||||
inscode(d, ds, de, "ESOCKTNOSUPPORT", WSAESOCKTNOSUPPORT, "Socket type not supported");
|
||||
#endif
|
||||
#endif
|
||||
#ifdef ETIME
|
||||
inscode(d, ds, de, "ETIME", ETIME, "Timer expired");
|
||||
#endif
|
||||
#ifdef EBFONT
|
||||
inscode(d, ds, de, "EBFONT", EBFONT, "Bad font file format");
|
||||
#endif
|
||||
#ifdef EDEADLOCK
|
||||
inscode(d, ds, de, "EDEADLOCK", EDEADLOCK, "Error EDEADLOCK");
|
||||
#endif
|
||||
#ifdef ETOOMANYREFS
|
||||
inscode(d, ds, de, "ETOOMANYREFS", ETOOMANYREFS, "Too many references: cannot splice");
|
||||
#else
|
||||
#ifdef WSAETOOMANYREFS
|
||||
inscode(d, ds, de, "ETOOMANYREFS", WSAETOOMANYREFS, "Too many references: cannot splice");
|
||||
#endif
|
||||
#endif
|
||||
#ifdef EMFILE
|
||||
inscode(d, ds, de, "EMFILE", EMFILE, "Too many open files");
|
||||
#else
|
||||
#ifdef WSAEMFILE
|
||||
inscode(d, ds, de, "EMFILE", WSAEMFILE, "Too many open files");
|
||||
#endif
|
||||
#endif
|
||||
#ifdef ETXTBSY
|
||||
inscode(d, ds, de, "ETXTBSY", ETXTBSY, "Text file busy");
|
||||
#endif
|
||||
#ifdef EINPROGRESS
|
||||
inscode(d, ds, de, "EINPROGRESS", EINPROGRESS, "Operation now in progress");
|
||||
#else
|
||||
#ifdef WSAEINPROGRESS
|
||||
inscode(d, ds, de, "EINPROGRESS", WSAEINPROGRESS, "Operation now in progress");
|
||||
#endif
|
||||
#endif
|
||||
#ifdef ENXIO
|
||||
inscode(d, ds, de, "ENXIO", ENXIO, "No such device or address");
|
||||
#endif
|
||||
#ifdef ENOPKG
|
||||
inscode(d, ds, de, "ENOPKG", ENOPKG, "Package not installed");
|
||||
#endif
|
||||
#ifdef WSASY
|
||||
inscode(d, ds, de, "WSASY", WSASY, "Error WSASY");
|
||||
#endif
|
||||
#ifdef WSAEHOSTDOWN
|
||||
inscode(d, ds, de, "WSAEHOSTDOWN", WSAEHOSTDOWN, "Host is down");
|
||||
#endif
|
||||
#ifdef WSAENETDOWN
|
||||
inscode(d, ds, de, "WSAENETDOWN", WSAENETDOWN, "Network is down");
|
||||
#endif
|
||||
#ifdef WSAENOTSOCK
|
||||
inscode(d, ds, de, "WSAENOTSOCK", WSAENOTSOCK, "Socket operation on non-socket");
|
||||
#endif
|
||||
#ifdef WSAEHOSTUNREACH
|
||||
inscode(d, ds, de, "WSAEHOSTUNREACH", WSAEHOSTUNREACH, "No route to host");
|
||||
#endif
|
||||
#ifdef WSAELOOP
|
||||
inscode(d, ds, de, "WSAELOOP", WSAELOOP, "Too many symbolic links encountered");
|
||||
#endif
|
||||
#ifdef WSAEMFILE
|
||||
inscode(d, ds, de, "WSAEMFILE", WSAEMFILE, "Too many open files");
|
||||
#endif
|
||||
#ifdef WSAESTALE
|
||||
inscode(d, ds, de, "WSAESTALE", WSAESTALE, "Stale NFS file handle");
|
||||
#endif
|
||||
#ifdef WSAVERNOTSUPPORTED
|
||||
inscode(d, ds, de, "WSAVERNOTSUPPORTED", WSAVERNOTSUPPORTED, "Error WSAVERNOTSUPPORTED");
|
||||
#endif
|
||||
#ifdef WSAENETUNREACH
|
||||
inscode(d, ds, de, "WSAENETUNREACH", WSAENETUNREACH, "Network is unreachable");
|
||||
#endif
|
||||
#ifdef WSAEPROCLIM
|
||||
inscode(d, ds, de, "WSAEPROCLIM", WSAEPROCLIM, "Error WSAEPROCLIM");
|
||||
#endif
|
||||
#ifdef WSAEFAULT
|
||||
inscode(d, ds, de, "WSAEFAULT", WSAEFAULT, "Bad address");
|
||||
#endif
|
||||
#ifdef WSANOTINITIALISED
|
||||
inscode(d, ds, de, "WSANOTINITIALISED", WSANOTINITIALISED, "Error WSANOTINITIALISED");
|
||||
#endif
|
||||
#ifdef WSAEUSERS
|
||||
inscode(d, ds, de, "WSAEUSERS", WSAEUSERS, "Too many users");
|
||||
#endif
|
||||
#ifdef WSAMAKEASYNCREPL
|
||||
inscode(d, ds, de, "WSAMAKEASYNCREPL", WSAMAKEASYNCREPL, "Error WSAMAKEASYNCREPL");
|
||||
#endif
|
||||
#ifdef WSAENOPROTOOPT
|
||||
inscode(d, ds, de, "WSAENOPROTOOPT", WSAENOPROTOOPT, "Protocol not available");
|
||||
#endif
|
||||
#ifdef WSAECONNABORTED
|
||||
inscode(d, ds, de, "WSAECONNABORTED", WSAECONNABORTED, "Software caused connection abort");
|
||||
#endif
|
||||
#ifdef WSAENAMETOOLONG
|
||||
inscode(d, ds, de, "WSAENAMETOOLONG", WSAENAMETOOLONG, "File name too long");
|
||||
#endif
|
||||
#ifdef WSAENOTEMPTY
|
||||
inscode(d, ds, de, "WSAENOTEMPTY", WSAENOTEMPTY, "Directory not empty");
|
||||
#endif
|
||||
#ifdef WSAESHUTDOWN
|
||||
inscode(d, ds, de, "WSAESHUTDOWN", WSAESHUTDOWN, "Cannot send after transport endpoint shutdown");
|
||||
#endif
|
||||
#ifdef WSAEAFNOSUPPORT
|
||||
inscode(d, ds, de, "WSAEAFNOSUPPORT", WSAEAFNOSUPPORT, "Address family not supported by protocol");
|
||||
#endif
|
||||
#ifdef WSAETOOMANYREFS
|
||||
inscode(d, ds, de, "WSAETOOMANYREFS", WSAETOOMANYREFS, "Too many references: cannot splice");
|
||||
#endif
|
||||
#ifdef WSAEACCES
|
||||
inscode(d, ds, de, "WSAEACCES", WSAEACCES, "Permission denied");
|
||||
#endif
|
||||
#ifdef WSATR
|
||||
inscode(d, ds, de, "WSATR", WSATR, "Error WSATR");
|
||||
#endif
|
||||
#ifdef WSABASEERR
|
||||
inscode(d, ds, de, "WSABASEERR", WSABASEERR, "Error WSABASEERR");
|
||||
#endif
|
||||
#ifdef WSADESCRIPTIO
|
||||
inscode(d, ds, de, "WSADESCRIPTIO", WSADESCRIPTIO, "Error WSADESCRIPTIO");
|
||||
#endif
|
||||
#ifdef WSAEMSGSIZE
|
||||
inscode(d, ds, de, "WSAEMSGSIZE", WSAEMSGSIZE, "Message too long");
|
||||
#endif
|
||||
#ifdef WSAEBADF
|
||||
inscode(d, ds, de, "WSAEBADF", WSAEBADF, "Bad file number");
|
||||
#endif
|
||||
#ifdef WSAECONNRESET
|
||||
inscode(d, ds, de, "WSAECONNRESET", WSAECONNRESET, "Connection reset by peer");
|
||||
#endif
|
||||
#ifdef WSAGETSELECTERRO
|
||||
inscode(d, ds, de, "WSAGETSELECTERRO", WSAGETSELECTERRO, "Error WSAGETSELECTERRO");
|
||||
#endif
|
||||
#ifdef WSAETIMEDOUT
|
||||
inscode(d, ds, de, "WSAETIMEDOUT", WSAETIMEDOUT, "Connection timed out");
|
||||
#endif
|
||||
#ifdef WSAENOBUFS
|
||||
inscode(d, ds, de, "WSAENOBUFS", WSAENOBUFS, "No buffer space available");
|
||||
#endif
|
||||
#ifdef WSAEDISCON
|
||||
inscode(d, ds, de, "WSAEDISCON", WSAEDISCON, "Error WSAEDISCON");
|
||||
#endif
|
||||
#ifdef WSAEINTR
|
||||
inscode(d, ds, de, "WSAEINTR", WSAEINTR, "Interrupted system call");
|
||||
#endif
|
||||
#ifdef WSAEPROTOTYPE
|
||||
inscode(d, ds, de, "WSAEPROTOTYPE", WSAEPROTOTYPE, "Protocol wrong type for socket");
|
||||
#endif
|
||||
#ifdef WSAHOS
|
||||
inscode(d, ds, de, "WSAHOS", WSAHOS, "Error WSAHOS");
|
||||
#endif
|
||||
#ifdef WSAEADDRINUSE
|
||||
inscode(d, ds, de, "WSAEADDRINUSE", WSAEADDRINUSE, "Address already in use");
|
||||
#endif
|
||||
#ifdef WSAEADDRNOTAVAIL
|
||||
inscode(d, ds, de, "WSAEADDRNOTAVAIL", WSAEADDRNOTAVAIL, "Cannot assign requested address");
|
||||
#endif
|
||||
#ifdef WSAEALREADY
|
||||
inscode(d, ds, de, "WSAEALREADY", WSAEALREADY, "Operation already in progress");
|
||||
#endif
|
||||
#ifdef WSAEPROTONOSUPPORT
|
||||
inscode(d, ds, de, "WSAEPROTONOSUPPORT", WSAEPROTONOSUPPORT, "Protocol not supported");
|
||||
#endif
|
||||
#ifdef WSASYSNOTREADY
|
||||
inscode(d, ds, de, "WSASYSNOTREADY", WSASYSNOTREADY, "Error WSASYSNOTREADY");
|
||||
#endif
|
||||
#ifdef WSAEWOULDBLOCK
|
||||
inscode(d, ds, de, "WSAEWOULDBLOCK", WSAEWOULDBLOCK, "Operation would block");
|
||||
#endif
|
||||
#ifdef WSAEPFNOSUPPORT
|
||||
inscode(d, ds, de, "WSAEPFNOSUPPORT", WSAEPFNOSUPPORT, "Protocol family not supported");
|
||||
#endif
|
||||
#ifdef WSAEOPNOTSUPP
|
||||
inscode(d, ds, de, "WSAEOPNOTSUPP", WSAEOPNOTSUPP, "Operation not supported on transport endpoint");
|
||||
#endif
|
||||
#ifdef WSAEISCONN
|
||||
inscode(d, ds, de, "WSAEISCONN", WSAEISCONN, "Transport endpoint is already connected");
|
||||
#endif
|
||||
#ifdef WSAEDQUOT
|
||||
inscode(d, ds, de, "WSAEDQUOT", WSAEDQUOT, "Quota exceeded");
|
||||
#endif
|
||||
#ifdef WSAENOTCONN
|
||||
inscode(d, ds, de, "WSAENOTCONN", WSAENOTCONN, "Transport endpoint is not connected");
|
||||
#endif
|
||||
#ifdef WSAEREMOTE
|
||||
inscode(d, ds, de, "WSAEREMOTE", WSAEREMOTE, "Object is remote");
|
||||
#endif
|
||||
#ifdef WSAEINVAL
|
||||
inscode(d, ds, de, "WSAEINVAL", WSAEINVAL, "Invalid argument");
|
||||
#endif
|
||||
#ifdef WSAEINPROGRESS
|
||||
inscode(d, ds, de, "WSAEINPROGRESS", WSAEINPROGRESS, "Operation now in progress");
|
||||
#endif
|
||||
#ifdef WSAGETSELECTEVEN
|
||||
inscode(d, ds, de, "WSAGETSELECTEVEN", WSAGETSELECTEVEN, "Error WSAGETSELECTEVEN");
|
||||
#endif
|
||||
#ifdef WSAESOCKTNOSUPPORT
|
||||
inscode(d, ds, de, "WSAESOCKTNOSUPPORT", WSAESOCKTNOSUPPORT, "Socket type not supported");
|
||||
#endif
|
||||
#ifdef WSAGETASYNCERRO
|
||||
inscode(d, ds, de, "WSAGETASYNCERRO", WSAGETASYNCERRO, "Error WSAGETASYNCERRO");
|
||||
#endif
|
||||
#ifdef WSAMAKESELECTREPL
|
||||
inscode(d, ds, de, "WSAMAKESELECTREPL", WSAMAKESELECTREPL, "Error WSAMAKESELECTREPL");
|
||||
#endif
|
||||
#ifdef WSAGETASYNCBUFLE
|
||||
inscode(d, ds, de, "WSAGETASYNCBUFLE", WSAGETASYNCBUFLE, "Error WSAGETASYNCBUFLE");
|
||||
#endif
|
||||
#ifdef WSAEDESTADDRREQ
|
||||
inscode(d, ds, de, "WSAEDESTADDRREQ", WSAEDESTADDRREQ, "Destination address required");
|
||||
#endif
|
||||
#ifdef WSAECONNREFUSED
|
||||
inscode(d, ds, de, "WSAECONNREFUSED", WSAECONNREFUSED, "Connection refused");
|
||||
#endif
|
||||
#ifdef WSAENETRESET
|
||||
inscode(d, ds, de, "WSAENETRESET", WSAENETRESET, "Network dropped connection because of reset");
|
||||
#endif
|
||||
#ifdef WSAN
|
||||
inscode(d, ds, de, "WSAN", WSAN, "Error WSAN");
|
||||
#endif
|
||||
|
||||
/* These symbols are added for EDK II support. */
|
||||
#ifdef EMINERRORVAL
|
||||
inscode(d, ds, de, "EMINERRORVAL", EMINERRORVAL, "Lowest valid error value");
|
||||
#endif
|
||||
#ifdef ENOTSUP
|
||||
inscode(d, ds, de, "ENOTSUP", ENOTSUP, "Operation not supported");
|
||||
#endif
|
||||
#ifdef EBADRPC
|
||||
inscode(d, ds, de, "EBADRPC", EBADRPC, "RPC struct is bad");
|
||||
#endif
|
||||
#ifdef ERPCMISMATCH
|
||||
inscode(d, ds, de, "ERPCMISMATCH", ERPCMISMATCH, "RPC version wrong");
|
||||
#endif
|
||||
#ifdef EPROGUNAVAIL
|
||||
inscode(d, ds, de, "EPROGUNAVAIL", EPROGUNAVAIL, "RPC prog. not avail");
|
||||
#endif
|
||||
#ifdef EPROGMISMATCH
|
||||
inscode(d, ds, de, "EPROGMISMATCH", EPROGMISMATCH, "Program version wrong");
|
||||
#endif
|
||||
#ifdef EPROCUNAVAIL
|
||||
inscode(d, ds, de, "EPROCUNAVAIL", EPROCUNAVAIL, "Bad procedure for program");
|
||||
#endif
|
||||
#ifdef EFTYPE
|
||||
inscode(d, ds, de, "EFTYPE", EFTYPE, "Inappropriate file type or format");
|
||||
#endif
|
||||
#ifdef EAUTH
|
||||
inscode(d, ds, de, "EAUTH", EAUTH, "Authentication error");
|
||||
#endif
|
||||
#ifdef ENEEDAUTH
|
||||
inscode(d, ds, de, "ENEEDAUTH", ENEEDAUTH, "Need authenticator");
|
||||
#endif
|
||||
#ifdef ECANCELED
|
||||
inscode(d, ds, de, "ECANCELED", ECANCELED, "Operation canceled");
|
||||
#endif
|
||||
#ifdef ENOATTR
|
||||
inscode(d, ds, de, "ENOATTR", ENOATTR, "Attribute not found");
|
||||
#endif
|
||||
#ifdef EDOOFUS
|
||||
inscode(d, ds, de, "EDOOFUS", EDOOFUS, "Programming Error");
|
||||
#endif
|
||||
#ifdef EBUFSIZE
|
||||
inscode(d, ds, de, "EBUFSIZE", EBUFSIZE, "Buffer too small to hold result");
|
||||
#endif
|
||||
#ifdef EMAXERRORVAL
|
||||
inscode(d, ds, de, "EMAXERRORVAL", EMAXERRORVAL, "One more than the highest defined error value");
|
||||
#endif
|
||||
|
||||
Py_DECREF(de);
|
||||
}
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,250 @@
|
|||
/* Socket module header file */
|
||||
|
||||
/* Includes needed for the sockaddr_* symbols below */
|
||||
#ifndef MS_WINDOWS
|
||||
#ifdef __VMS
|
||||
# include <socket.h>
|
||||
# else
|
||||
# include <sys/socket.h>
|
||||
# endif
|
||||
# include <netinet/in.h>
|
||||
# if !(defined(UEFI_ENV) || defined(__BEOS__) || defined(__CYGWIN__) || (defined(PYOS_OS2) && defined(PYCC_VACPP)))
|
||||
# include <netinet/tcp.h>
|
||||
# endif
|
||||
|
||||
#else /* MS_WINDOWS */
|
||||
# include <winsock2.h>
|
||||
# include <ws2tcpip.h>
|
||||
/* VC6 is shipped with old platform headers, and does not have MSTcpIP.h
|
||||
* Separate SDKs have all the functions we want, but older ones don't have
|
||||
* any version information.
|
||||
* I use SIO_GET_MULTICAST_FILTER to detect a decent SDK.
|
||||
*/
|
||||
# ifdef SIO_GET_MULTICAST_FILTER
|
||||
# include <MSTcpIP.h> /* for SIO_RCVALL */
|
||||
# define HAVE_ADDRINFO
|
||||
# define HAVE_SOCKADDR_STORAGE
|
||||
# define HAVE_GETADDRINFO
|
||||
# define HAVE_GETNAMEINFO
|
||||
# define ENABLE_IPV6
|
||||
# else
|
||||
typedef int socklen_t;
|
||||
# endif /* IPPROTO_IPV6 */
|
||||
#endif /* MS_WINDOWS */
|
||||
|
||||
#ifdef HAVE_SYS_UN_H
|
||||
# include <sys/un.h>
|
||||
#else
|
||||
# undef AF_UNIX
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_LINUX_NETLINK_H
|
||||
# ifdef HAVE_ASM_TYPES_H
|
||||
# include <asm/types.h>
|
||||
# endif
|
||||
# include <linux/netlink.h>
|
||||
#else
|
||||
# undef AF_NETLINK
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_BLUETOOTH_BLUETOOTH_H
|
||||
#include <bluetooth/bluetooth.h>
|
||||
#include <bluetooth/rfcomm.h>
|
||||
#include <bluetooth/l2cap.h>
|
||||
#include <bluetooth/sco.h>
|
||||
#include <bluetooth/hci.h>
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_BLUETOOTH_H
|
||||
#include <bluetooth.h>
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_NETPACKET_PACKET_H
|
||||
# include <sys/ioctl.h>
|
||||
# include <net/if.h>
|
||||
# include <netpacket/packet.h>
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_LINUX_TIPC_H
|
||||
# include <linux/tipc.h>
|
||||
#endif
|
||||
|
||||
#ifndef Py__SOCKET_H
|
||||
#define Py__SOCKET_H
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/* Python module and C API name */
|
||||
#define PySocket_MODULE_NAME "_socket"
|
||||
#define PySocket_CAPI_NAME "CAPI"
|
||||
#define PySocket_CAPSULE_NAME (PySocket_MODULE_NAME "." PySocket_CAPI_NAME)
|
||||
|
||||
/* Abstract the socket file descriptor type */
|
||||
#ifdef MS_WINDOWS
|
||||
typedef SOCKET SOCKET_T;
|
||||
# ifdef MS_WIN64
|
||||
# define SIZEOF_SOCKET_T 8
|
||||
# else
|
||||
# define SIZEOF_SOCKET_T 4
|
||||
# endif
|
||||
#else
|
||||
typedef int SOCKET_T;
|
||||
# define SIZEOF_SOCKET_T SIZEOF_INT
|
||||
#endif
|
||||
|
||||
/* Socket address */
|
||||
typedef union sock_addr {
|
||||
struct sockaddr_in in;
|
||||
#ifdef AF_UNIX
|
||||
struct sockaddr_un un;
|
||||
#endif
|
||||
#ifdef AF_NETLINK
|
||||
struct sockaddr_nl nl;
|
||||
#endif
|
||||
#ifdef ENABLE_IPV6
|
||||
struct sockaddr_in6 in6;
|
||||
struct sockaddr_storage storage;
|
||||
#endif
|
||||
#ifdef HAVE_BLUETOOTH_BLUETOOTH_H
|
||||
struct sockaddr_l2 bt_l2;
|
||||
struct sockaddr_rc bt_rc;
|
||||
struct sockaddr_sco bt_sco;
|
||||
struct sockaddr_hci bt_hci;
|
||||
#endif
|
||||
#ifdef HAVE_NETPACKET_PACKET_H
|
||||
struct sockaddr_ll ll;
|
||||
#endif
|
||||
} sock_addr_t;
|
||||
|
||||
/* The object holding a socket. It holds some extra information,
|
||||
like the address family, which is used to decode socket address
|
||||
arguments properly. */
|
||||
|
||||
typedef struct {
|
||||
PyObject_HEAD
|
||||
SOCKET_T sock_fd; /* Socket file descriptor */
|
||||
int sock_family; /* Address family, e.g., AF_INET */
|
||||
int sock_type; /* Socket type, e.g., SOCK_STREAM */
|
||||
int sock_proto; /* Protocol type, usually 0 */
|
||||
PyObject *(*errorhandler)(void); /* Error handler; checks
|
||||
errno, returns NULL and
|
||||
sets a Python exception */
|
||||
double sock_timeout; /* Operation timeout in seconds;
|
||||
0.0 means non-blocking */
|
||||
} PySocketSockObject;
|
||||
|
||||
/* --- C API ----------------------------------------------------*/
|
||||
|
||||
/* Short explanation of what this C API export mechanism does
|
||||
and how it works:
|
||||
|
||||
The _ssl module needs access to the type object defined in
|
||||
the _socket module. Since cross-DLL linking introduces a lot of
|
||||
problems on many platforms, the "trick" is to wrap the
|
||||
C API of a module in a struct which then gets exported to
|
||||
other modules via a PyCapsule.
|
||||
|
||||
The code in socketmodule.c defines this struct (which currently
|
||||
only contains the type object reference, but could very
|
||||
well also include other C APIs needed by other modules)
|
||||
and exports it as PyCapsule via the module dictionary
|
||||
under the name "CAPI".
|
||||
|
||||
Other modules can now include the socketmodule.h file
|
||||
which defines the needed C APIs to import and set up
|
||||
a static copy of this struct in the importing module.
|
||||
|
||||
After initialization, the importing module can then
|
||||
access the C APIs from the _socket module by simply
|
||||
referring to the static struct, e.g.
|
||||
|
||||
Load _socket module and its C API; this sets up the global
|
||||
PySocketModule:
|
||||
|
||||
if (PySocketModule_ImportModuleAndAPI())
|
||||
return;
|
||||
|
||||
|
||||
Now use the C API as if it were defined in the using
|
||||
module:
|
||||
|
||||
if (!PyArg_ParseTuple(args, "O!|zz:ssl",
|
||||
|
||||
PySocketModule.Sock_Type,
|
||||
|
||||
(PyObject*)&Sock,
|
||||
&key_file, &cert_file))
|
||||
return NULL;
|
||||
|
||||
Support could easily be extended to export more C APIs/symbols
|
||||
this way. Currently, only the type object is exported,
|
||||
other candidates would be socket constructors and socket
|
||||
access functions.
|
||||
|
||||
*/
|
||||
|
||||
/* C API for usage by other Python modules */
|
||||
typedef struct {
|
||||
PyTypeObject *Sock_Type;
|
||||
PyObject *error;
|
||||
} PySocketModule_APIObject;
|
||||
|
||||
/* XXX The net effect of the following appears to be to define a function
|
||||
XXX named PySocketModule_APIObject in _ssl.c. It's unclear why it isn't
|
||||
XXX defined there directly.
|
||||
|
||||
>>> It's defined here because other modules might also want to use
|
||||
>>> the C API.
|
||||
|
||||
*/
|
||||
#ifndef PySocket_BUILDING_SOCKET
|
||||
|
||||
/* --- C API ----------------------------------------------------*/
|
||||
|
||||
/* Interfacestructure to C API for other modules.
|
||||
Call PySocketModule_ImportModuleAndAPI() to initialize this
|
||||
structure. After that usage is simple:
|
||||
|
||||
if (!PyArg_ParseTuple(args, "O!|zz:ssl",
|
||||
&PySocketModule.Sock_Type, (PyObject*)&Sock,
|
||||
&key_file, &cert_file))
|
||||
return NULL;
|
||||
...
|
||||
*/
|
||||
|
||||
static
|
||||
PySocketModule_APIObject PySocketModule;
|
||||
|
||||
/* You *must* call this before using any of the functions in
|
||||
PySocketModule and check its outcome; otherwise all accesses will
|
||||
result in a segfault. Returns 0 on success. */
|
||||
|
||||
#ifndef DPRINTF
|
||||
# define DPRINTF if (0) printf
|
||||
#endif
|
||||
|
||||
static
|
||||
int PySocketModule_ImportModuleAndAPI(void)
|
||||
{
|
||||
void *api;
|
||||
|
||||
DPRINTF(" Loading capsule %s\n", PySocket_CAPSULE_NAME);
|
||||
api = PyCapsule_Import(PySocket_CAPSULE_NAME, 1);
|
||||
if (api == NULL)
|
||||
goto onError;
|
||||
memcpy(&PySocketModule, api, sizeof(PySocketModule));
|
||||
DPRINTF(" API object loaded and initialized.\n");
|
||||
return 0;
|
||||
|
||||
onError:
|
||||
DPRINTF(" not found.\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
#endif /* !PySocket_BUILDING_SOCKET */
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif /* !Py__SOCKET_H */
|
|
@ -161,8 +161,8 @@ extern const char * const z_errmsg[10]; /* indexed by 2-zlib_error */
|
|||
# define fdopen(fd,mode) NULL /* No fdopen() */
|
||||
#endif
|
||||
|
||||
#if (defined(_MSC_VER) && (_MSC_VER > 600))
|
||||
# if defined(_WIN32_WCE) || defined(_EFI_STDLIB)
|
||||
#if (defined(_MSC_VER) && (_MSC_VER > 600)) && !defined(UEFI_ENV)
|
||||
# if defined(_WIN32_WCE)
|
||||
# define fdopen(fd,mode) NULL /* No fdopen() */
|
||||
# ifndef _PTRDIFF_T_DEFINED
|
||||
typedef int ptrdiff_t;
|
||||
|
|
|
@ -0,0 +1,36 @@
|
|||
/* Return the copyright string. This is updated manually.
|
||||
|
||||
Copyright (c) 2011 - 2012, Intel Corporation. All rights reserved.<BR>
|
||||
This program and the accompanying materials are licensed and made available under
|
||||
the terms and conditions of the BSD License that accompanies this distribution.
|
||||
The full text of the license may be found at
|
||||
http://opensource.org/licenses/bsd-license.
|
||||
|
||||
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
||||
*/
|
||||
|
||||
#include "Python.h"
|
||||
|
||||
static char cprt[] =
|
||||
"\
|
||||
Copyright (c) 2010-2011 Intel Corporation.\n\
|
||||
All Rights Reserved.\n\
|
||||
\n\
|
||||
Copyright (c) 2001-2011 Python Software Foundation.\n\
|
||||
All Rights Reserved.\n\
|
||||
\n\
|
||||
Copyright (c) 2000 BeOpen.com.\n\
|
||||
All Rights Reserved.\n\
|
||||
\n\
|
||||
Copyright (c) 1995-2001 Corporation for National Research Initiatives.\n\
|
||||
All Rights Reserved.\n\
|
||||
\n\
|
||||
Copyright (c) 1991-1995 Stichting Mathematisch Centrum, Amsterdam.\n\
|
||||
All Rights Reserved.";
|
||||
|
||||
const char *
|
||||
Py_GetCopyright(void)
|
||||
{
|
||||
return cprt;
|
||||
}
|
|
@ -34,19 +34,19 @@
|
|||
LibString
|
||||
LibStdio
|
||||
LibGdtoa
|
||||
LibWchar
|
||||
LibMath
|
||||
LibWchar
|
||||
LibGen
|
||||
LibNetUtil
|
||||
DevShell
|
||||
BsdSocketLib
|
||||
EfiSocketLib
|
||||
DevShell
|
||||
|
||||
[Sources]
|
||||
#EFI -- EFI specific code
|
||||
Efi/config.c
|
||||
Efi/getpath.c
|
||||
Efi/edk2module.c
|
||||
Efi/getpath.c
|
||||
|
||||
#Parser
|
||||
Python-2.7.2/Parser/acceler.c
|
||||
|
@ -63,6 +63,10 @@
|
|||
Python-2.7.2/Parser/tokenizer.c
|
||||
|
||||
#Python
|
||||
PyMod-2.7.2/Python/getcopyright.c
|
||||
PyMod-2.7.2/Python/import.c
|
||||
PyMod-2.7.2/Python/marshal.c
|
||||
|
||||
Python-2.7.2/Python/_warnings.c
|
||||
Python-2.7.2/Python/asdl.c
|
||||
Python-2.7.2/Python/ast.c
|
||||
|
@ -79,14 +83,11 @@
|
|||
Python-2.7.2/Python/future.c
|
||||
Python-2.7.2/Python/getargs.c
|
||||
Python-2.7.2/Python/getcompiler.c
|
||||
Python-2.7.2/Python/getcopyright.c
|
||||
Python-2.7.2/Python/getopt.c
|
||||
Python-2.7.2/Python/getplatform.c
|
||||
Python-2.7.2/Python/getversion.c
|
||||
Python-2.7.2/Python/graminit.c
|
||||
Python-2.7.2/Python/import.c
|
||||
Python-2.7.2/Python/importdl.c
|
||||
Python-2.7.2/Python/marshal.c
|
||||
Python-2.7.2/Python/modsupport.c
|
||||
Python-2.7.2/Python/mysnprintf.c
|
||||
Python-2.7.2/Python/mystrtoul.c
|
||||
|
@ -111,47 +112,42 @@
|
|||
Python-2.7.2/Modules/python.c
|
||||
Python-2.7.2/Modules/getbuildinfo.c
|
||||
|
||||
Python-2.7.2/Modules/arraymodule.c
|
||||
Python-2.7.2/Modules/binascii.c
|
||||
Python-2.7.2/Modules/errnomodule.c
|
||||
Python-2.7.2/Modules/gcmodule.c
|
||||
Python-2.7.2/Modules/signalmodule.c
|
||||
Python-2.7.2/Modules/operator.c
|
||||
Python-2.7.2/Modules/_weakref.c
|
||||
Python-2.7.2/Modules/mathmodule.c
|
||||
Python-2.7.2/Modules/_math.c
|
||||
Python-2.7.2/Modules/timemodule.c
|
||||
Python-2.7.2/Modules/datetimemodule.c
|
||||
Python-2.7.2/Modules/cStringIO.c
|
||||
Python-2.7.2/Modules/_codecsmodule.c
|
||||
Python-2.7.2/Modules/_randommodule.c
|
||||
Python-2.7.2/Modules/xxsubtype.c
|
||||
|
||||
Python-2.7.2/Modules/_heapqmodule.c
|
||||
Python-2.7.2/Modules/itertoolsmodule.c
|
||||
Python-2.7.2/Modules/_collectionsmodule.c
|
||||
Python-2.7.2/Modules/_sre.c
|
||||
Python-2.7.2/Modules/parsermodule.c
|
||||
Python-2.7.2/Modules/_struct.c
|
||||
Python-2.7.2/Modules/cPickle.c
|
||||
Python-2.7.2/Modules/_functoolsmodule.c
|
||||
Python-2.7.2/Modules/cmathmodule.c
|
||||
Python-2.7.2/Modules/_json.c
|
||||
PyMod-2.7.2/Modules/_sre.c
|
||||
PyMod-2.7.2/Modules/errnomodule.c
|
||||
PyMod-2.7.2/Modules/selectmodule.c
|
||||
|
||||
Python-2.7.2/Modules/_bisectmodule.c
|
||||
Python-2.7.2/Modules/_codecsmodule.c
|
||||
Python-2.7.2/Modules/_collectionsmodule.c
|
||||
Python-2.7.2/Modules/_functoolsmodule.c
|
||||
Python-2.7.2/Modules/_heapqmodule.c
|
||||
Python-2.7.2/Modules/_json.c
|
||||
Python-2.7.2/Modules/_math.c
|
||||
Python-2.7.2/Modules/_randommodule.c
|
||||
Python-2.7.2/Modules/_struct.c
|
||||
Python-2.7.2/Modules/_weakref.c
|
||||
Python-2.7.2/Modules/arraymodule.c
|
||||
Python-2.7.2/Modules/binascii.c
|
||||
Python-2.7.2/Modules/cmathmodule.c
|
||||
Python-2.7.2/Modules/cPickle.c
|
||||
Python-2.7.2/Modules/cStringIO.c
|
||||
Python-2.7.2/Modules/datetimemodule.c
|
||||
Python-2.7.2/Modules/future_builtins.c
|
||||
Python-2.7.2/Modules/gcmodule.c
|
||||
Python-2.7.2/Modules/itertoolsmodule.c
|
||||
Python-2.7.2/Modules/mathmodule.c
|
||||
Python-2.7.2/Modules/md5.c
|
||||
Python-2.7.2/Modules/md5module.c
|
||||
Python-2.7.2/Modules/operator.c
|
||||
Python-2.7.2/Modules/parsermodule.c
|
||||
Python-2.7.2/Modules/shamodule.c
|
||||
Python-2.7.2/Modules/sha256module.c
|
||||
Python-2.7.2/Modules/sha512module.c
|
||||
Python-2.7.2/Modules/stropmodule.c
|
||||
|
||||
# Socket related modules
|
||||
# Python-$(PYTHON_VERSION)/Modules/getaddrinfo.c # included by socketmodule.c
|
||||
# Python-$(PYTHON_VERSION)/Modules/getnameinfo.c # included by socketmodule.c
|
||||
Python-2.7.2/Modules/selectmodule.c
|
||||
Python-2.7.2/Modules/signalmodule.c
|
||||
Python-2.7.2/Modules/socketmodule.c
|
||||
Python-2.7.2/Modules/stropmodule.c
|
||||
Python-2.7.2/Modules/timemodule.c
|
||||
Python-2.7.2/Modules/xxsubtype.c
|
||||
|
||||
# Python-$(PYTHON_VERSION)/Modules/imageop.c
|
||||
# Python-$(PYTHON_VERSION)/Modules/_csv.c
|
||||
|
|
|
@ -10,16 +10,15 @@
|
|||
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
||||
**/
|
||||
|
||||
|
||||
#ifndef Py_PYCONFIG_H
|
||||
#define Py_PYCONFIG_H
|
||||
|
||||
#define PLATFORM "UEFI 2.3 X64"
|
||||
#include <Uefi.h>
|
||||
|
||||
//#ifndef PYTHONPATH
|
||||
//# define PYTHONPATH "/Efi/StdLib/lib/python.27;/Efi/StdLib/lib/python.27/lib-dynload"
|
||||
//#endif
|
||||
/* Define to indicate that code is being built to run in the UEFI Environment. */
|
||||
#define UEFI_ENV EFI_SYSTEM_TABLE_REVISION
|
||||
|
||||
#define PLATFORM "UEFI"
|
||||
|
||||
/* Define if building universal (internal helper macro) */
|
||||
#undef AC_APPLE_UNIVERSAL_BUILD
|
||||
|
@ -185,7 +184,7 @@
|
|||
|
||||
/* Define to 1 if you have the <dirent.h> header file, and it defines `DIR'.
|
||||
*/
|
||||
#undef HAVE_DIRENT_H
|
||||
#define HAVE_DIRENT_H 1
|
||||
|
||||
/* Define to 1 if you have the <dlfcn.h> header file. */
|
||||
#undef HAVE_DLFCN_H
|
||||
|
@ -328,7 +327,7 @@
|
|||
#undef HAVE_GETPAGESIZE
|
||||
|
||||
/* Define to 1 if you have the `getpeername' function. */
|
||||
#undef HAVE_GETPEERNAME
|
||||
#define HAVE_GETPEERNAME 1
|
||||
|
||||
/* Define to 1 if you have the `getpgid' function. */
|
||||
#undef HAVE_GETPGID
|
||||
|
@ -514,10 +513,10 @@
|
|||
#undef HAVE_PLOCK
|
||||
|
||||
/* Define to 1 if you have the `poll' function. */
|
||||
#undef HAVE_POLL
|
||||
#define HAVE_POLL 1
|
||||
|
||||
/* Define to 1 if you have the <poll.h> header file. */
|
||||
#define HAVE_POLL_H 1
|
||||
#undef HAVE_POLL_H
|
||||
|
||||
/* Define to 1 if you have the <process.h> header file. */
|
||||
#undef HAVE_PROCESS_H
|
||||
|
@ -550,7 +549,7 @@
|
|||
#undef HAVE_READLINK
|
||||
|
||||
/* Define to 1 if you have the `realpath' function. */
|
||||
#undef HAVE_REALPATH
|
||||
#define HAVE_REALPATH 1
|
||||
|
||||
/* Define if you have readline 2.1 */
|
||||
#undef HAVE_RL_CALLBACK
|
||||
|
@ -577,7 +576,7 @@
|
|||
#undef HAVE_ROUND
|
||||
|
||||
/* Define to 1 if you have the `select' function. */
|
||||
#undef HAVE_SELECT
|
||||
#define HAVE_SELECT 1
|
||||
|
||||
/* Define to 1 if you have the `sem_getvalue' function. */
|
||||
#undef HAVE_SEM_GETVALUE
|
||||
|
@ -824,7 +823,7 @@
|
|||
#define HAVE_TEMPNAM 1
|
||||
|
||||
/* Define to 1 if you have the <termios.h> header file. */
|
||||
#define HAVE_TERMIOS_H 1
|
||||
#undef HAVE_TERMIOS_H
|
||||
|
||||
/* Define to 1 if you have the <term.h> header file. */
|
||||
#undef HAVE_TERM_H
|
||||
|
@ -888,7 +887,7 @@
|
|||
#undef HAVE_UTIMES
|
||||
|
||||
/* Define to 1 if you have the <utime.h> header file. */
|
||||
#undef HAVE_UTIME_H
|
||||
#define HAVE_UTIME_H 1
|
||||
|
||||
/* Define to 1 if you have the `wait3' function. */
|
||||
#undef HAVE_WAIT3
|
||||
|
|
Loading…
Reference in New Issue