From: Martin v. Löwis Date: Mon, 12 Jan 2009 07:57:11 +0000 (+0000) Subject: Issue #4915: Port sysmodule to Windows CE. X-Git-Tag: v2.7a1~2320 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=1b3bef21b061a1543591d6d67d5501a4469504e9;p=python Issue #4915: Port sysmodule to Windows CE. --- diff --git a/Misc/NEWS b/Misc/NEWS index d5336ff2df..b4055ec5f6 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -12,6 +12,8 @@ What's New in Python 2.7 alpha 1 Core and Builtins ----------------- +- Issue #4915: Port sysmodule to Windows CE. + - Issue #4074: Change the criteria for doing a full garbage collection (i.e. collecting the oldest generation) so that allocating lots of objects without destroying them does not show quadratic performance. Based on a proposal by diff --git a/Python/sysmodule.c b/Python/sysmodule.c index 4bd0e01eb9..ff7157fc65 100644 --- a/Python/sysmodule.c +++ b/Python/sysmodule.c @@ -1296,8 +1296,13 @@ _PySys_Init(void) PyDict_SetItemString(sysdict, key, v); \ Py_XDECREF(v) + /* Check that stdin is not a directory + Using shell redirection, you can redirect stdin to a directory, + crashing the Python interpreter. Catch this common mistake here + and output a useful error message. Note that under MS Windows, + the shell already prevents that. */ +#if !defined(MS_WINDOWS) { - /* XXX: does this work on Win/Win64? (see posix_fstat) */ struct stat sb; if (fstat(fileno(stdin), &sb) == 0 && S_ISDIR(sb.st_mode)) { @@ -1307,6 +1312,7 @@ _PySys_Init(void) exit(EXIT_FAILURE); } } +#endif /* Closing the standard FILE* if sys.std* goes aways causes problems * for embedded Python usages. Closing them when somebody explicitly @@ -1526,7 +1532,7 @@ PySys_SetArgv(int argc, char **argv) { #if defined(HAVE_REALPATH) char fullpath[MAXPATHLEN]; -#elif defined(MS_WINDOWS) +#elif defined(MS_WINDOWS) && !defined(MS_WINCE) char fullpath[MAX_PATH]; #endif PyObject *av = makeargvobject(argc, argv); @@ -1571,7 +1577,10 @@ PySys_SetArgv(int argc, char **argv) #if SEP == '\\' /* Special case for MS filename syntax */ if (argc > 0 && argv0 != NULL && strcmp(argv0, "-c") != 0) { char *q; -#ifdef MS_WINDOWS +#if defined(MS_WINDOWS) && !defined(MS_WINCE) + /* This code here replaces the first element in argv with the full + path that it represents. Under CE, there are no relative paths so + the argument must be the full path anyway. */ char *ptemp; if (GetFullPathName(argv0, sizeof(fullpath),