mirror of
https://github.com/ValveSoftware/Proton.git
synced 2025-07-21 20:56:22 +03:00
parent
5ea24c6218
commit
948bcedcad
@ -52,10 +52,6 @@
|
|||||||
|
|
||||||
#include "wine/debug.h"
|
#include "wine/debug.h"
|
||||||
|
|
||||||
#include "wine/unixlib.h"
|
|
||||||
#include "wine/heap.h"
|
|
||||||
#include "wine/vulkan.h"
|
|
||||||
|
|
||||||
#include <msi.h>
|
#include <msi.h>
|
||||||
|
|
||||||
WINE_DEFAULT_DEBUG_CHANNEL(steam);
|
WINE_DEFAULT_DEBUG_CHANNEL(steam);
|
||||||
@ -114,15 +110,15 @@ static char *escape_path_unix_to_dos( const char *path )
|
|||||||
UINT len;
|
UINT len;
|
||||||
|
|
||||||
if (!(dos = wine_get_dos_file_name( path )) || !(len = wcslen( dos ))) goto done;
|
if (!(dos = wine_get_dos_file_name( path )) || !(len = wcslen( dos ))) goto done;
|
||||||
if (!(tmp = heap_alloc( (len * 2 + 1) * sizeof(*tmp) ))) goto done;
|
if (!(tmp = malloc( (len * 2 + 1) * sizeof(*tmp) ))) goto done;
|
||||||
for (src = dos, dst = tmp; *src; src++, dst++) if ((*dst = *src) == '\\') *++dst = '\\';
|
for (src = dos, dst = tmp; *src; src++, dst++) if ((*dst = *src) == '\\') *++dst = '\\';
|
||||||
|
|
||||||
if (!(len = WideCharToMultiByte( CP_UTF8, 0, tmp, (dst - tmp), NULL, 0, NULL, NULL ))) goto done;
|
if (!(len = WideCharToMultiByte( CP_UTF8, 0, tmp, (dst - tmp), NULL, 0, NULL, NULL ))) goto done;
|
||||||
if ((escaped = heap_alloc( len ))) WideCharToMultiByte( CP_UTF8, 0, tmp, (dst - tmp), escaped, len, NULL, NULL );
|
if ((escaped = malloc( len ))) WideCharToMultiByte( CP_UTF8, 0, tmp, (dst - tmp), escaped, len, NULL, NULL );
|
||||||
|
|
||||||
done:
|
done:
|
||||||
heap_free( dos );
|
free( dos );
|
||||||
heap_free( tmp );
|
free( tmp );
|
||||||
return escaped;
|
return escaped;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -363,7 +359,7 @@ static HANDLE run_process(BOOL *should_await, BOOL game_process)
|
|||||||
|
|
||||||
argv0_len = end - start;
|
argv0_len = end - start;
|
||||||
|
|
||||||
scratchW = HeapAlloc(GetProcessHeap(), 0, (argv0_len + 1) * sizeof(WCHAR));
|
scratchW = malloc((argv0_len + 1) * sizeof(WCHAR));
|
||||||
memcpy(scratchW, start, argv0_len * sizeof(WCHAR));
|
memcpy(scratchW, start, argv0_len * sizeof(WCHAR));
|
||||||
scratchW[argv0_len] = '\0';
|
scratchW[argv0_len] = '\0';
|
||||||
|
|
||||||
@ -375,7 +371,7 @@ static HANDLE run_process(BOOL *should_await, BOOL game_process)
|
|||||||
goto run;
|
goto run;
|
||||||
}
|
}
|
||||||
|
|
||||||
scratchA = HeapAlloc(GetProcessHeap(), 0, r);
|
scratchA = malloc(r);
|
||||||
|
|
||||||
r = WideCharToMultiByte(CP_UNIXCP, 0, scratchW, -1,
|
r = WideCharToMultiByte(CP_UNIXCP, 0, scratchW, -1,
|
||||||
scratchA, r, NULL, NULL);
|
scratchA, r, NULL, NULL);
|
||||||
@ -396,8 +392,7 @@ static HANDLE run_process(BOOL *should_await, BOOL game_process)
|
|||||||
flags |= CREATE_NEW_CONSOLE;
|
flags |= CREATE_NEW_CONSOLE;
|
||||||
}
|
}
|
||||||
|
|
||||||
new_cmdline = HeapAlloc(GetProcessHeap(), 0,
|
new_cmdline = malloc((wcslen(dos) + 3 + wcslen(remainder) + 1) * sizeof(WCHAR));
|
||||||
(wcslen(dos) + 3 + wcslen(remainder) + 1) * sizeof(WCHAR));
|
|
||||||
wcscpy(new_cmdline, dquoteW);
|
wcscpy(new_cmdline, dquoteW);
|
||||||
wcscat(new_cmdline, dos);
|
wcscat(new_cmdline, dos);
|
||||||
wcscat(new_cmdline, dquoteW);
|
wcscat(new_cmdline, dquoteW);
|
||||||
@ -652,7 +647,7 @@ static void setup_steam_files(void)
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
pos += strappend( &buf, &len, pos, "\t\"%u\"\n\t{\n\t\t\"path\"\t\t\"%s\"\n\t}\n", index, str );
|
pos += strappend( &buf, &len, pos, "\t\"%u\"\n\t{\n\t\t\"path\"\t\t\"%s\"\n\t}\n", index, str );
|
||||||
heap_free( str );
|
free( str );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -668,16 +663,16 @@ static void setup_steam_files(void)
|
|||||||
if (end != start && end[-1] == '/') --end;
|
if (end != start && end[-1] == '/') --end;
|
||||||
while (end != start && end[-1] != '/') --end;
|
while (end != start && end[-1] != '/') --end;
|
||||||
|
|
||||||
path = heap_alloc( end - start + 1 );
|
path = malloc( end - start + 1 );
|
||||||
lstrcpynA( path, start, end - start );
|
lstrcpynA( path, start, end - start );
|
||||||
if (!(str = escape_path_unix_to_dos( path )))
|
if (!(str = escape_path_unix_to_dos( path )))
|
||||||
ERR( "Could not convert %s to win path.\n", debugstr_a(path) );
|
ERR( "Could not convert %s to win path.\n", debugstr_a(path) );
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
pos += strappend( &buf, &len, pos, "\t\"%u\"\n\t{\n\t\t\"path\"\t\t\"%s\"\n\t}\n", index, str );
|
pos += strappend( &buf, &len, pos, "\t\"%u\"\n\t{\n\t\t\"path\"\t\t\"%s\"\n\t}\n", index, str );
|
||||||
heap_free( str );
|
free( str );
|
||||||
}
|
}
|
||||||
heap_free( path );
|
free( path );
|
||||||
|
|
||||||
if (*next == ':') ++next;
|
if (*next == ':') ++next;
|
||||||
start = next;
|
start = next;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user