]> granicus.if.org Git - python/commitdiff
Py_Main() uses _Py_wchar2char() to encode the filename in error messages
authorVictor Stinner <victor.stinner@haypocalc.com>
Thu, 14 Oct 2010 10:51:24 +0000 (10:51 +0000)
committerVictor Stinner <victor.stinner@haypocalc.com>
Thu, 14 Oct 2010 10:51:24 +0000 (10:51 +0000)
Modules/main.c

index c9499ac51b3fd3eab22005eb22e739a128351682..bbf695fb4edaaa12c44cd64aec94f8a76ce8a35d 100644 (file)
@@ -637,19 +637,19 @@ Py_Main(int argc, wchar_t **argv)
         }
 
         if (sts==-1 && filename!=NULL) {
-            if ((fp = _Py_wfopen(filename, L"r")) == NULL) {
-                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>");
+            fp = _Py_wfopen(filename, L"r");
+            if (fp == NULL) {
+                char *cfilename_buffer;
+                const char *cfilename;
+                cfilename_buffer = _Py_wchar2char(filename);
+                if (cfilename_buffer != NULL)
+                    cfilename = cfilename_buffer;
+                else
+                    cfilename = "<unprintable file name>";
                 fprintf(stderr, "%ls: can't open file '%s': [Errno %d] %s\n",
                     argv[0], cfilename, errno, strerror(errno));
-
+                if (cfilename_buffer)
+                    PyMem_Free(cfilename_buffer);
                 return 2;
             }
             else if (skipfirstline) {