mirror of
https://github.com/ValveSoftware/Proton.git
synced 2025-05-17 08:58:06 +03:00
steam_helper: Remove now unnecessary OpenVR path conversion.
CW-Bug-Id: #24510
This commit is contained in:
parent
175f5f6aa4
commit
62e8cde35a
@ -5,5 +5,4 @@ EXTRADLLFLAGS = -mwindows -mcygwin -static-libgcc -static-libstdc++ -ldl
|
||||
EXTRADEFS = -DWINE_NO_LONG_TYPES
|
||||
|
||||
SOURCES = \
|
||||
jsoncpp.cpp \
|
||||
steam.cpp \
|
||||
|
@ -1,284 +0,0 @@
|
||||
/// Json-cpp amalgated forward header (http://jsoncpp.sourceforge.net/).
|
||||
/// It is intended to be used with #include "json/json-forwards.h"
|
||||
/// This header provides forward declaration for all JsonCpp types.
|
||||
|
||||
// //////////////////////////////////////////////////////////////////////
|
||||
// Beginning of content of file: LICENSE
|
||||
// //////////////////////////////////////////////////////////////////////
|
||||
|
||||
/*
|
||||
The JsonCpp library's source code, including accompanying documentation,
|
||||
tests and demonstration applications, are licensed under the following
|
||||
conditions...
|
||||
|
||||
The author (Baptiste Lepilleur) explicitly disclaims copyright in all
|
||||
jurisdictions which recognize such a disclaimer. In such jurisdictions,
|
||||
this software is released into the Public Domain.
|
||||
|
||||
In jurisdictions which do not recognize Public Domain property (e.g. Germany as of
|
||||
2010), this software is Copyright (c) 2007-2010 by Baptiste Lepilleur, and is
|
||||
released under the terms of the MIT License (see below).
|
||||
|
||||
In jurisdictions which recognize Public Domain property, the user of this
|
||||
software may choose to accept it either as 1) Public Domain, 2) under the
|
||||
conditions of the MIT License (see below), or 3) under the terms of dual
|
||||
Public Domain/MIT License conditions described here, as they choose.
|
||||
|
||||
The MIT License is about as close to Public Domain as a license can get, and is
|
||||
described in clear, concise terms at:
|
||||
|
||||
http://en.wikipedia.org/wiki/MIT_License
|
||||
|
||||
The full text of the MIT License follows:
|
||||
|
||||
========================================================================
|
||||
Copyright (c) 2007-2010 Baptiste Lepilleur
|
||||
|
||||
Permission is hereby granted, free of charge, to any person
|
||||
obtaining a copy of this software and associated documentation
|
||||
files (the "Software"), to deal in the Software without
|
||||
restriction, including without limitation the rights to use, copy,
|
||||
modify, merge, publish, distribute, sublicense, and/or sell copies
|
||||
of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be
|
||||
included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
|
||||
BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
|
||||
ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
========================================================================
|
||||
(END LICENSE TEXT)
|
||||
|
||||
The MIT license is compatible with both the GPL and commercial
|
||||
software, affording one all of the rights of Public Domain with the
|
||||
minor nuisance of being required to keep the above copyright notice
|
||||
and license text in the source code. Note also that by accepting the
|
||||
Public Domain "license" you can re-license your copy using whatever
|
||||
license you like.
|
||||
|
||||
*/
|
||||
|
||||
// //////////////////////////////////////////////////////////////////////
|
||||
// End of content of file: LICENSE
|
||||
// //////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#ifndef JSON_FORWARD_AMALGATED_H_INCLUDED
|
||||
# define JSON_FORWARD_AMALGATED_H_INCLUDED
|
||||
/// If defined, indicates that the source file is amalgated
|
||||
/// to prevent private header inclusion.
|
||||
#define JSON_IS_AMALGAMATION
|
||||
|
||||
// //////////////////////////////////////////////////////////////////////
|
||||
// Beginning of content of file: include/json/config.h
|
||||
// //////////////////////////////////////////////////////////////////////
|
||||
|
||||
// Copyright 2007-2010 Baptiste Lepilleur
|
||||
// Distributed under MIT license, or public domain if desired and
|
||||
// recognized in your jurisdiction.
|
||||
// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE
|
||||
|
||||
#ifndef JSON_CONFIG_H_INCLUDED
|
||||
#define JSON_CONFIG_H_INCLUDED
|
||||
|
||||
/// If defined, indicates that json library is embedded in CppTL library.
|
||||
//# define JSON_IN_CPPTL 1
|
||||
|
||||
/// If defined, indicates that json may leverage CppTL library
|
||||
//# define JSON_USE_CPPTL 1
|
||||
/// If defined, indicates that cpptl vector based map should be used instead of
|
||||
/// std::map
|
||||
/// as Value container.
|
||||
//# define JSON_USE_CPPTL_SMALLMAP 1
|
||||
|
||||
// If non-zero, the library uses exceptions to report bad input instead of C
|
||||
// assertion macros. The default is to use exceptions.
|
||||
#ifndef JSON_USE_EXCEPTION
|
||||
#define JSON_USE_EXCEPTION 1
|
||||
#endif
|
||||
|
||||
/// If defined, indicates that the source file is amalgated
|
||||
/// to prevent private header inclusion.
|
||||
/// Remarks: it is automatically defined in the generated amalgated header.
|
||||
// #define JSON_IS_AMALGAMATION
|
||||
|
||||
#ifdef JSON_IN_CPPTL
|
||||
#include <cpptl/config.h>
|
||||
#ifndef JSON_USE_CPPTL
|
||||
#define JSON_USE_CPPTL 1
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef JSON_IN_CPPTL
|
||||
#define JSON_API CPPTL_API
|
||||
#elif defined(JSON_DLL_BUILD)
|
||||
#if defined(_MSC_VER)
|
||||
#define JSON_API __declspec(dllexport)
|
||||
#define JSONCPP_DISABLE_DLL_INTERFACE_WARNING
|
||||
#endif // if defined(_MSC_VER)
|
||||
#elif defined(JSON_DLL)
|
||||
#if defined(_MSC_VER)
|
||||
#define JSON_API __declspec(dllimport)
|
||||
#define JSONCPP_DISABLE_DLL_INTERFACE_WARNING
|
||||
#endif // if defined(_MSC_VER)
|
||||
#endif // ifdef JSON_IN_CPPTL
|
||||
#if !defined(JSON_API)
|
||||
#define JSON_API
|
||||
#endif
|
||||
|
||||
// If JSON_NO_INT64 is defined, then Json only support C++ "int" type for
|
||||
// integer
|
||||
// Storages, and 64 bits integer support is disabled.
|
||||
// #define JSON_NO_INT64 1
|
||||
|
||||
#if defined(_MSC_VER) // MSVC
|
||||
# if _MSC_VER <= 1200 // MSVC 6
|
||||
// Microsoft Visual Studio 6 only support conversion from __int64 to double
|
||||
// (no conversion from unsigned __int64).
|
||||
# define JSON_USE_INT64_DOUBLE_CONVERSION 1
|
||||
// Disable warning 4786 for VS6 caused by STL (identifier was truncated to '255'
|
||||
// characters in the debug information)
|
||||
// All projects I've ever seen with VS6 were using this globally (not bothering
|
||||
// with pragma push/pop).
|
||||
# pragma warning(disable : 4786)
|
||||
# endif // MSVC 6
|
||||
|
||||
# if _MSC_VER >= 1500 // MSVC 2008
|
||||
/// Indicates that the following function is deprecated.
|
||||
# define JSONCPP_DEPRECATED(message) __declspec(deprecated(message))
|
||||
# endif
|
||||
|
||||
#endif // defined(_MSC_VER)
|
||||
|
||||
|
||||
#ifndef JSON_HAS_RVALUE_REFERENCES
|
||||
|
||||
#if defined(_MSC_VER) && _MSC_VER >= 1600 // MSVC >= 2010
|
||||
#define JSON_HAS_RVALUE_REFERENCES 1
|
||||
#endif // MSVC >= 2010
|
||||
|
||||
#ifdef __clang__
|
||||
#if __has_feature(cxx_rvalue_references)
|
||||
#define JSON_HAS_RVALUE_REFERENCES 1
|
||||
#endif // has_feature
|
||||
|
||||
#elif defined __GNUC__ // not clang (gcc comes later since clang emulates gcc)
|
||||
#if defined(__GXX_EXPERIMENTAL_CXX0X__) || (__cplusplus >= 201103L)
|
||||
#define JSON_HAS_RVALUE_REFERENCES 1
|
||||
#endif // GXX_EXPERIMENTAL
|
||||
|
||||
#endif // __clang__ || __GNUC__
|
||||
|
||||
#endif // not defined JSON_HAS_RVALUE_REFERENCES
|
||||
|
||||
#ifndef JSON_HAS_RVALUE_REFERENCES
|
||||
#define JSON_HAS_RVALUE_REFERENCES 0
|
||||
#endif
|
||||
|
||||
#ifdef __clang__
|
||||
#elif defined __GNUC__ // not clang (gcc comes later since clang emulates gcc)
|
||||
# if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5))
|
||||
# define JSONCPP_DEPRECATED(message) __attribute__ ((deprecated(message)))
|
||||
# elif (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1))
|
||||
# define JSONCPP_DEPRECATED(message) __attribute__((__deprecated__))
|
||||
# endif // GNUC version
|
||||
#endif // __clang__ || __GNUC__
|
||||
|
||||
#if !defined(JSONCPP_DEPRECATED)
|
||||
#define JSONCPP_DEPRECATED(message)
|
||||
#endif // if !defined(JSONCPP_DEPRECATED)
|
||||
|
||||
namespace Json {
|
||||
typedef int Int;
|
||||
typedef unsigned int UInt;
|
||||
#if defined(JSON_NO_INT64)
|
||||
typedef int LargestInt;
|
||||
typedef unsigned int LargestUInt;
|
||||
#undef JSON_HAS_INT64
|
||||
#else // if defined(JSON_NO_INT64)
|
||||
// For Microsoft Visual use specific types as long long is not supported
|
||||
#if defined(_MSC_VER) // Microsoft Visual Studio
|
||||
typedef __int64 Int64;
|
||||
typedef unsigned __int64 UInt64;
|
||||
#else // if defined(_MSC_VER) // Other platforms, use long long
|
||||
typedef long long int Int64;
|
||||
typedef unsigned long long int UInt64;
|
||||
#endif // if defined(_MSC_VER)
|
||||
typedef Int64 LargestInt;
|
||||
typedef UInt64 LargestUInt;
|
||||
#define JSON_HAS_INT64
|
||||
#endif // if defined(JSON_NO_INT64)
|
||||
} // end namespace Json
|
||||
|
||||
#endif // JSON_CONFIG_H_INCLUDED
|
||||
|
||||
// //////////////////////////////////////////////////////////////////////
|
||||
// End of content of file: include/json/config.h
|
||||
// //////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
// //////////////////////////////////////////////////////////////////////
|
||||
// Beginning of content of file: include/json/forwards.h
|
||||
// //////////////////////////////////////////////////////////////////////
|
||||
|
||||
// Copyright 2007-2010 Baptiste Lepilleur
|
||||
// Distributed under MIT license, or public domain if desired and
|
||||
// recognized in your jurisdiction.
|
||||
// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE
|
||||
|
||||
#ifndef JSON_FORWARDS_H_INCLUDED
|
||||
#define JSON_FORWARDS_H_INCLUDED
|
||||
|
||||
#if !defined(JSON_IS_AMALGAMATION)
|
||||
#include "config.h"
|
||||
#endif // if !defined(JSON_IS_AMALGAMATION)
|
||||
|
||||
namespace Json {
|
||||
|
||||
// writer.h
|
||||
class FastWriter;
|
||||
class StyledWriter;
|
||||
|
||||
// reader.h
|
||||
class Reader;
|
||||
|
||||
// features.h
|
||||
class Features;
|
||||
|
||||
// value.h
|
||||
typedef unsigned int ArrayIndex;
|
||||
class StaticString;
|
||||
class Path;
|
||||
class PathArgument;
|
||||
class Value;
|
||||
class ValueIteratorBase;
|
||||
class ValueIterator;
|
||||
class ValueConstIterator;
|
||||
|
||||
} // namespace Json
|
||||
|
||||
#endif // JSON_FORWARDS_H_INCLUDED
|
||||
|
||||
// //////////////////////////////////////////////////////////////////////
|
||||
// End of content of file: include/json/forwards.h
|
||||
// //////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#endif //ifndef JSON_FORWARD_AMALGATED_H_INCLUDED
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -32,6 +32,12 @@
|
||||
* a small subset of the actual Steam functionality for games that expect
|
||||
* Windows version of Steam running. */
|
||||
|
||||
#include <stddef.h>
|
||||
#include <stdarg.h>
|
||||
|
||||
#include <wchar.h>
|
||||
#include <wctype.h>
|
||||
|
||||
#include "ntstatus.h"
|
||||
#define WIN32_NO_STATUS
|
||||
#include <windows.h>
|
||||
@ -58,11 +64,6 @@
|
||||
|
||||
#include "wine/debug.h"
|
||||
|
||||
#pragma push_macro("wcsncpy")
|
||||
#undef wcsncpy
|
||||
#include "json/json.h"
|
||||
#pragma pop_macro("wcsncpy")
|
||||
|
||||
#include "wine/unixlib.h"
|
||||
#include "wine/heap.h"
|
||||
#include "wine/vulkan.h"
|
||||
@ -73,19 +74,7 @@
|
||||
|
||||
WINE_DEFAULT_DEBUG_CHANNEL(steam);
|
||||
|
||||
/* from shlobj.h, which breaks because of DECLSPEC_IMPORT EXTERN_C in C++ */
|
||||
#define CSIDL_LOCAL_APPDATA 0x001c
|
||||
#define CSIDL_FLAG_CREATE 0x8000
|
||||
|
||||
EXTERN_C WINSHELLAPI HRESULT WINAPI SHGetFolderPathA(HWND hwnd, int nFolder, HANDLE hToken, DWORD dwFlags, LPSTR pszPath);
|
||||
EXTERN_C WINSHELLAPI HRESULT WINAPI SHGetFolderPathW(HWND hwnd, int nFolder, HANDLE hToken, DWORD dwFlags, LPWSTR pszPath);
|
||||
#define SHGetFolderPath WINELIB_NAME_AW(SHGetFolderPath)
|
||||
|
||||
static const WCHAR PROTON_VR_RUNTIME_W[] = {'P','R','O','T','O','N','_','V','R','_','R','U','N','T','I','M','E',0};
|
||||
static const WCHAR VR_PATHREG_OVERRIDE_W[] = {'V','R','_','P','A','T','H','R','E','G','_','O','V','E','R','R','I','D','E',0};
|
||||
static const WCHAR VR_OVERRIDE_W[] = {'V','R','_','O','V','E','R','R','I','D','E',0};
|
||||
static const WCHAR VR_CONFIG_PATH_W[] = {'V','R','_','C','O','N','F','I','G','_','P','A','T','H',0};
|
||||
static const WCHAR VR_LOG_PATH_W[] = {'V','R','_','L','O','G','_','P','A','T','H',0};
|
||||
|
||||
static bool env_nonzero(const char *env)
|
||||
{
|
||||
@ -265,116 +254,6 @@ static void setup_proton_voice_files(void)
|
||||
setenv("PROTON_VOICE_FILES", path, 1);
|
||||
}
|
||||
|
||||
static std::string get_linux_vr_path(void)
|
||||
{
|
||||
const char *e;
|
||||
|
||||
static const char *openvr_path = "/openvr/openvrpaths.vrpath";
|
||||
|
||||
e = getenv("VR_PATHREG_OVERRIDE");
|
||||
if(e && *e)
|
||||
return e;
|
||||
|
||||
e = getenv("XDG_CONFIG_HOME");
|
||||
if(e && *e)
|
||||
return std::string(e) + openvr_path;
|
||||
|
||||
e = getenv("HOME");
|
||||
if(e && *e)
|
||||
return std::string(e) + "/.config" + openvr_path;
|
||||
|
||||
return "";
|
||||
}
|
||||
|
||||
static bool get_windows_vr_path(WCHAR *out_path, bool create)
|
||||
{
|
||||
static const WCHAR openvrpathsW[] = {'\\','o','p','e','n','v','r','p','a','t','h','s','.','v','r','p','a','t','h',0};
|
||||
static const WCHAR openvrW[] = {'\\','o','p','e','n','v','r',0};
|
||||
|
||||
if(FAILED(SHGetFolderPathW(NULL, CSIDL_LOCAL_APPDATA | CSIDL_FLAG_CREATE,
|
||||
NULL, 0, out_path)))
|
||||
return false;
|
||||
|
||||
lstrcatW(out_path, openvrW);
|
||||
|
||||
if(create)
|
||||
CreateDirectoryW(out_path, NULL);
|
||||
|
||||
lstrcatW(out_path, openvrpathsW);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
static WCHAR *str_to_wchar(const std::string &str)
|
||||
{
|
||||
DWORD sz = MultiByteToWideChar(CP_UNIXCP, 0, str.c_str(), -1, NULL, 0);
|
||||
if(!sz)
|
||||
return NULL;
|
||||
|
||||
WCHAR *ret = (WCHAR *)HeapAlloc(GetProcessHeap(), 0, sizeof(WCHAR) * sz);
|
||||
if(!ret)
|
||||
return NULL;
|
||||
|
||||
sz = MultiByteToWideChar(CP_UNIXCP, 0, str.c_str(), -1, ret, sz);
|
||||
if(!sz)
|
||||
{
|
||||
HeapFree(GetProcessHeap(), 0, ret);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static std::string read_text_file(const WCHAR *filename)
|
||||
{
|
||||
HANDLE ifile = CreateFileW(filename, GENERIC_READ,
|
||||
FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, NULL,
|
||||
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
|
||||
if(ifile == INVALID_HANDLE_VALUE)
|
||||
return "";
|
||||
|
||||
LARGE_INTEGER size;
|
||||
|
||||
if(!GetFileSizeEx(ifile, &size))
|
||||
{
|
||||
CloseHandle(ifile);
|
||||
return "";
|
||||
}
|
||||
|
||||
char *buf = (char *)HeapAlloc(GetProcessHeap(), 0, size.u.LowPart);
|
||||
if(!buf)
|
||||
{
|
||||
CloseHandle(ifile);
|
||||
return "";
|
||||
}
|
||||
|
||||
DWORD readed;
|
||||
|
||||
if(!ReadFile(ifile, buf, size.u.LowPart, &readed, NULL))
|
||||
{
|
||||
HeapFree(GetProcessHeap(), 0, buf);
|
||||
CloseHandle(ifile);
|
||||
return "";
|
||||
}
|
||||
|
||||
CloseHandle(ifile);
|
||||
|
||||
DWORD outsize = 1;
|
||||
for(DWORD i = 1; i < readed; ++i)
|
||||
{
|
||||
if(buf[i] == '\n' && buf[i - 1] == '\r') // CRLF
|
||||
buf[outsize - 1] = '\n';
|
||||
else
|
||||
buf[outsize++] = buf[i];
|
||||
}
|
||||
|
||||
std::string ret(buf, outsize);
|
||||
|
||||
HeapFree(GetProcessHeap(), 0, buf);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static bool write_string_to_file(const WCHAR *filename, const std::string &contents)
|
||||
{
|
||||
HANDLE ofile = CreateFileW(filename, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS,
|
||||
@ -431,145 +310,6 @@ static bool convert_path_to_win(std::string &s)
|
||||
return true;
|
||||
}
|
||||
|
||||
static void convert_json_array_paths(Json::Value &arr)
|
||||
{
|
||||
for(uint32_t i = 0; i < arr.size(); ++i)
|
||||
{
|
||||
std::string path(arr[i].asString());
|
||||
if(convert_path_to_win(path))
|
||||
arr[i] = path;
|
||||
}
|
||||
}
|
||||
|
||||
static void convert_environment_path(const char *nameA, const WCHAR *nameW)
|
||||
{
|
||||
/* get linux-side variable */
|
||||
const char *e = getenv(nameA);
|
||||
if(!e || !*e)
|
||||
return;
|
||||
|
||||
/* convert to win and set */
|
||||
WCHAR *path = wine_get_dos_file_name(e);
|
||||
if(!path)
|
||||
return;
|
||||
|
||||
SetEnvironmentVariableW(nameW, path);
|
||||
|
||||
HeapFree(GetProcessHeap(), 0, path);
|
||||
}
|
||||
|
||||
static void set_env_from_unix(const WCHAR *name, const std::string &val)
|
||||
{
|
||||
WCHAR valW[MAX_PATH];
|
||||
DWORD sz;
|
||||
|
||||
sz = MultiByteToWideChar(CP_UTF8, 0, val.c_str(), -1, valW, MAX_PATH);
|
||||
if(!sz)
|
||||
{
|
||||
WINE_WARN("Invalid utf8 seq in vr runtime key\n");
|
||||
return;
|
||||
}
|
||||
|
||||
SetEnvironmentVariableW(name, valW);
|
||||
}
|
||||
|
||||
static bool convert_linux_vrpaths(void)
|
||||
{
|
||||
/* read in linux vrpaths */
|
||||
std::string linux_vrpaths = get_linux_vr_path();
|
||||
if(linux_vrpaths.empty())
|
||||
{
|
||||
WINE_TRACE("Couldn't get openvr vrpaths path\n");
|
||||
return false;
|
||||
}
|
||||
|
||||
WCHAR *linux_vrpathsW = str_to_wchar(linux_vrpaths);
|
||||
if(!linux_vrpathsW)
|
||||
return false;
|
||||
|
||||
std::string contents = read_text_file(linux_vrpathsW);
|
||||
HeapFree(GetProcessHeap(), 0, linux_vrpathsW);
|
||||
if(contents.empty())
|
||||
{
|
||||
WINE_TRACE("openvr vrpaths is empty\n");
|
||||
return false;
|
||||
}
|
||||
|
||||
Json::Value root;
|
||||
Json::Reader reader;
|
||||
|
||||
if(!reader.parse(contents, root))
|
||||
{
|
||||
WINE_WARN("Invalid openvr vrpaths JSON\n");
|
||||
return false;
|
||||
}
|
||||
|
||||
/* pass original runtime path into Wine */
|
||||
const char *vr_override = getenv("VR_OVERRIDE");
|
||||
if(vr_override)
|
||||
{
|
||||
set_env_from_unix(PROTON_VR_RUNTIME_W, vr_override);
|
||||
}
|
||||
else if(root.isMember("runtime") && root["runtime"].isArray() && root["runtime"].size() > 0)
|
||||
{
|
||||
set_env_from_unix(PROTON_VR_RUNTIME_W, root["runtime"][0].asString());
|
||||
}
|
||||
|
||||
/* set hard-coded paths */
|
||||
root["runtime"] = Json::Value(Json::ValueType::arrayValue);
|
||||
root["runtime"][0] = "C:\\vrclient\\";
|
||||
root["runtime"][1] = "C:\\vrclient";
|
||||
|
||||
/* map linux paths into windows filesystem */
|
||||
if(root.isMember("config") && root["config"].isArray())
|
||||
convert_json_array_paths(root["config"]);
|
||||
|
||||
if(root.isMember("log") && root["log"].isArray())
|
||||
convert_json_array_paths(root["log"]);
|
||||
|
||||
/* external_drivers is currently unsupported in Proton */
|
||||
root["external_drivers"] = Json::Value(Json::ValueType::nullValue);
|
||||
|
||||
/* write out windows vrpaths */
|
||||
SetEnvironmentVariableW(VR_PATHREG_OVERRIDE_W, NULL);
|
||||
SetEnvironmentVariableW(VR_OVERRIDE_W, NULL);
|
||||
convert_environment_path("VR_CONFIG_PATH", VR_CONFIG_PATH_W);
|
||||
convert_environment_path("VR_LOG_PATH", VR_LOG_PATH_W);
|
||||
Json::StyledWriter writer;
|
||||
|
||||
WCHAR windows_vrpaths[MAX_PATH];
|
||||
if(!get_windows_vr_path(windows_vrpaths, true))
|
||||
return false;
|
||||
|
||||
contents = writer.write(root);
|
||||
|
||||
write_string_to_file(windows_vrpaths, contents);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
static void setup_vrpaths(void)
|
||||
{
|
||||
bool success = false;
|
||||
|
||||
try{
|
||||
success = convert_linux_vrpaths();
|
||||
}catch(std::exception e){
|
||||
WINE_ERR("got error parsing vrpaths file\n");
|
||||
success = false;
|
||||
}
|
||||
|
||||
if(!success)
|
||||
{
|
||||
/* delete the windows file only if the linux conversion fails */
|
||||
WCHAR windows_vrpaths[MAX_PATH];
|
||||
if(get_windows_vr_path(windows_vrpaths, false))
|
||||
{
|
||||
DeleteFileW(windows_vrpaths);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static BOOL set_vr_status(HKEY key, DWORD value)
|
||||
{
|
||||
LSTATUS status;
|
||||
@ -1763,8 +1503,6 @@ int main(int argc, char *argv[])
|
||||
{
|
||||
BOOL should_await;
|
||||
|
||||
setup_vrpaths();
|
||||
|
||||
if (game_process)
|
||||
setup_vr_registry();
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user