Compute scrcpy directory manually

The function dirname() does not work correctly everywhere with non-ASCII
characters.

Fixes #2619 <https://github.com/Genymobile/scrcpy/issues/2619>
fix2619.2
Romain Vimont 3 years ago
parent b5e98db635
commit 4d6dd9d281

@ -60,7 +60,20 @@ get_server_path(void) {
// not found, use current directory
return strdup(SERVER_FILENAME);
}
char *dir = dirname(executable_path);
// dirname() does not work correctly everywhere, so get the parent
// directory manually.
// See <https://github.com/Genymobile/scrcpy/issues/2619>
char *p = strrchr(executable_path, PATH_SEPARATOR);
if (!p) {
LOGE("Unexpected executable path: \"%s\" (it should contain a '%c')",
executable_path, PATH_SEPARATOR);
free(executable_path);
return strdup(SERVER_FILENAME);
}
*p = '\0'; // modify executable_path in place
char *dir = executable_path;
size_t dirlen = strlen(dir);
// sizeof(SERVER_FILENAME) gives statically the size including the null byte

Loading…
Cancel
Save