Extensions: improve automatic repo names for file:// repos on WIN32

- Skip leading slash from drive letters.
- Use back-slashes.

While these weren't exactly bugs, it seemed like an error when the
path name wasn't what users would expect. Relates to #123994.
This commit is contained in:
Campbell Barton
2024-07-02 11:45:39 +10:00
parent 603b833fe3
commit e8a3537ffb

View File

@@ -437,11 +437,26 @@ int BKE_preferences_extension_repo_remote_scheme_end(const char *url)
void BKE_preferences_extension_remote_to_name(const char *remote_url,
char name[sizeof(bUserExtensionRepo::name)])
{
#ifdef _WIN32
const bool is_win32 = true;
#else
const bool is_win32 = false;
#endif
const bool is_file = STRPREFIX(remote_url, "file://");
name[0] = '\0';
if (int offset = BKE_preferences_extension_repo_remote_scheme_end(remote_url)) {
/* Skip the `://`. */
remote_url += (offset + 3);
if (is_win32) {
if (is_file) {
/* Skip the slash prefix for: `/C:/`,
* not *required* but seems like a bug if it's not done. */
if (remote_url[0] == '/' && isalpha(remote_url[1]) && (remote_url[2] == ':')) {
remote_url += 1;
}
}
}
}
if (UNLIKELY(remote_url[0] == '\0')) {
return;
@@ -475,6 +490,12 @@ void BKE_preferences_extension_remote_to_name(const char *remote_url,
BLI_strncpy_utf8(
name, remote_url, std::min(size_t(c - remote_url) + 1, sizeof(bUserExtensionRepo::name)));
if (is_win32) {
if (is_file) {
BLI_path_slash_native(name);
}
}
}
int BKE_preferences_extension_repo_get_index(const UserDef *userdef,