bpo-45616: Let py.exe distinguish between v3.1 and v3.10 (GH-29731)

This commit is contained in:
Zachary Ware 2021-11-23 22:41:04 -06:00 committed by GitHub
parent 9cf5646bb4
commit f9de97aae5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 14 additions and 1 deletions

View File

@ -0,0 +1,4 @@
Fix Python Launcher's ability to distinguish between versions 3.1 and 3.10
when either one is explicitly requested. Previously, 3.1 would be used if
3.10 was requested but not installed, and 3.10 would be used if 3.1 was
requested but 3.10 was installed.

View File

@ -542,8 +542,17 @@ find_python_by_version(wchar_t const * wanted_ver)
} }
for (i = 0; i < num_installed_pythons; i++, ip++) { for (i = 0; i < num_installed_pythons; i++, ip++) {
n = wcslen(ip->version); n = wcslen(ip->version);
if (n > wlen) /*
* If wlen is greater than 1, we're probably trying to find a specific
* version and thus want an exact match: 3.1 != 3.10. Otherwise, we
* just want a prefix match.
*/
if ((wlen > 1) && (n != wlen)) {
continue;
}
if (n > wlen) {
n = wlen; n = wlen;
}
if ((wcsncmp(ip->version, wanted_ver, n) == 0) && if ((wcsncmp(ip->version, wanted_ver, n) == 0) &&
/* bits == 0 => don't care */ /* bits == 0 => don't care */
((bits == 0) || (ip->bits == bits))) { ((bits == 0) || (ip->bits == bits))) {