diff options
author | Victor Stinner <victor.stinner@haypocalc.com> | 2011-03-14 15:05:12 -0400 |
---|---|---|
committer | Victor Stinner <victor.stinner@haypocalc.com> | 2011-03-14 15:05:12 -0400 |
commit | ccbf475dfde5ef643bf9559b46e97fa9b35ef5d3 (patch) | |
tree | 2c13c21d1c81e089ab5b0467bc8294ecb7a89627 | |
parent | fe19d21815632ba179e32ba1517c1337ac407e97 (diff) | |
download | cpython-git-ccbf475dfde5ef643bf9559b46e97fa9b35ef5d3.tar.gz |
Fix imp.cache_from_source() if the directory name contains a dot
If the directory name contains a dot but not the filename, don't strip at the
dot.
-rw-r--r-- | Lib/test/test_imp.py | 4 | ||||
-rw-r--r-- | Python/import.c | 4 |
2 files changed, 6 insertions, 2 deletions
diff --git a/Lib/test/test_imp.py b/Lib/test/test_imp.py index d745ae9cc3..83e17d3d3e 100644 --- a/Lib/test/test_imp.py +++ b/Lib/test/test_imp.py @@ -210,6 +210,10 @@ class PEP3147Tests(unittest.TestCase): self.assertEqual( imp.cache_from_source('/foo/bar/baz/qux.py', True), '/foo/bar/baz/__pycache__/qux.{}.pyc'.format(self.tag)) + # Directory with a dot, filename without dot + self.assertEqual( + imp.cache_from_source('/foo.bar/file', True), + '/foo.bar/__pycache__/file{}.pyc'.format(self.tag)) def test_cache_from_source_optimized(self): # Given the path to a .py file, return the path to its PEP 3147 diff --git a/Python/import.c b/Python/import.c index 3237ddc84e..e5cb627003 100644 --- a/Python/import.c +++ b/Python/import.c @@ -943,12 +943,12 @@ make_compiled_pathname(Py_UNICODE *pathname, int debug) Py_UNICODE_strcat(buf, CACHEDIR_UNICODE); i += Py_UNICODE_strlen(CACHEDIR_UNICODE) - 1; buf[i++] = sep; - buf[i++] = '\0'; + buf[i] = '\0'; /* Add the base filename, but remove the .py or .pyw extension, since the tag name must go before the extension. */ Py_UNICODE_strcat(buf, pathname + save); - pos = Py_UNICODE_strrchr(buf, '.'); + pos = Py_UNICODE_strrchr(buf + i, '.'); if (pos != NULL) *++pos = '\0'; Py_UNICODE_strcat(buf, PYC_TAG_UNICODE); |