]> granicus.if.org Git - python/commitdiff
#3626: On cygwin, starting "python z" would not display any error message:
authorAmaury Forgeot d'Arc <amauryfa@gmail.com>
Thu, 30 Oct 2008 23:03:32 +0000 (23:03 +0000)
committerAmaury Forgeot d'Arc <amauryfa@gmail.com>
Thu, 30 Oct 2008 23:03:32 +0000 (23:03 +0000)
printf("%ls") fails if the wide string is 1 char long :-(

Misc/NEWS
Modules/main.c

index b06e4b6ab00f072763bd7ac0d5a2559ab88e5de2..6d61192fb545e9f8f5cc92bb1819650ee352733f 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -15,10 +15,13 @@ What's New in Python 3.0 beta 5
 Core and Builtins
 -----------------
 
+- Issue #3626: On cygwin, starting python with a non-existent script name
+  would not display anything if the file name is only 1 character long.
+
 - Issue #4176: Fixed a crash when pickling an object which ``__reduce__``
   method does not return iterators for the 4th and 5th items.
 
-- Issue 3723: Fixed initialization of subinterpreters.
+- Issue #3723: Fixed initialization of subinterpreters.
 
 - Issue #4213: The file system encoding is now normalized by the
   codec subsystem, for example UTF-8 is turned into utf-8.
index 5a84cc22bcc5089a837ee8a7dc9d11a60c6b1ac5..6fdc33aa59b31578f77df1a00eb2539873f7b1d6 100644 (file)
@@ -564,8 +564,17 @@ Py_Main(int argc, wchar_t **argv)
 
                if (sts==-1 && filename!=NULL) {
                        if ((fp = _wfopen(filename, L"r")) == NULL) {
-                               fprintf(stderr, "%ls: can't open file '%ls': [Errno %d] %s\n",
-                                       argv[0], filename, errno, strerror(errno));
+                               char cfilename[PATH_MAX];
+                               size_t r = wcstombs(cfilename, filename, PATH_MAX);
+                               if (r == PATH_MAX)
+                                       /* cfilename is not null-terminated;
+                                        * forcefully null-terminating it
+                                        * might break the shift state */
+                                       strcpy(cfilename, "<file name too long>");
+                               if (r == ((size_t)-1))
+                                       strcpy(cfilename, "<unprintable file name>");
+                               fprintf(stderr, "%ls: can't open file '%s': [Errno %d] %s\n",
+                                       argv[0], cfilename, errno, strerror(errno));
 
                                return 2;
                        }