Eryk Sun <[email protected]> added the comment:
The venv launcher can quote the executable path either always or only when it
contains spaces. The following is a suggestion for implementing the latter.
Before allocating `executable`, use memchr() (include <memory.h>) to search the
UTF-8 source for a space. If found, increment the character count by two. After
allocating `executable`, add the initial quote character, and increment the
pointer.
BOOL add_quotes = FALSE;
if (memchr(start, ' ', (size_t)len) != NULL) {
add_quotes = TRUE;
cch += 2;
}
executable = (wchar_t *)malloc(cch * sizeof(wchar_t));
if (executable == NULL) {
error(RC_NO_MEMORY, L"A memory allocation failed");
}
if (add_quotes) {
*executable++ = L'\"';
}
Later, after checking the existence via GetFileAttributesW(), add the trailing
quote and null, and decrement the pointer:
if (GetFileAttributesW(executable) == INVALID_FILE_ATTRIBUTES) {
error(RC_NO_PYTHON, L"No Python at '%ls'", executable);
}
if (add_quotes) {
size_t n = wcslen(executable);
executable[n] = L'\"';
executable[n + 1] = L'\0';
executable--;
}
----------
_______________________________________
Python tracker <[email protected]>
<https://bugs.python.org/issue46686>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe:
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com