From afa5bef210c3a8bbed2c5f82de33ffc005e1b47b Mon Sep 17 00:00:00 2001 From: Struma Date: Tue, 3 Mar 2020 05:14:29 -0500 Subject: [PATCH] Try and patch up steamshim_child --- binding/cusl-binding.cpp | 2 ++ steamshim/steamshim_child.c | 23 ++++++++++++++--------- steamshim/steamshim_parent.cpp | 2 ++ 3 files changed, 18 insertions(+), 9 deletions(-) diff --git a/binding/cusl-binding.cpp b/binding/cusl-binding.cpp index 00c1b44a..d0646adf 100644 --- a/binding/cusl-binding.cpp +++ b/binding/cusl-binding.cpp @@ -197,6 +197,8 @@ RB_METHOD(CUSLResetAllStats) { void CUSLBindingInit() { STEAMSHIM_requestStats(); + bool ok; + STEAMSHIM_GET_OK(SHIMEVENT_STATSRECEIVED, ok); VALUE mSteamLite = rb_define_module("SteamLite"); diff --git a/steamshim/steamshim_child.c b/steamshim/steamshim_child.c index 7f9ce6e1..204070bb 100644 --- a/steamshim/steamshim_child.c +++ b/steamshim/steamshim_child.c @@ -2,8 +2,11 @@ #ifdef _WIN32 #define WIN32_LEAN_AND_MEAN 1 #include -typedef HANDLE PipeType; -#define NULLPIPE NULL +#include +#include +#include +typedef int PipeType; +#define NULLPIPE 0 typedef unsigned __int8 uint8; typedef __int32 int32; typedef unsigned __int64 uint64; @@ -50,21 +53,23 @@ static int pipeReady(PipeType fd) static int writePipe(PipeType fd, const void *buf, const unsigned int _len) { - const DWORD len = (DWORD) _len; - DWORD bw = 0; - return ((WriteFile(fd, buf, len, &bw, NULL) != 0) && (bw == len)); + const ssize_t len = (ssize_t) _len; + ssize_t bw; + while (((bw = _write(fd, buf, len)) == -1) && (errno == EINTR)) { /*spin*/ } + return (bw == len); } /* writePipe */ static int readPipe(PipeType fd, void *buf, const unsigned int _len) { - const DWORD len = (DWORD) _len; - DWORD br = 0; - return ReadFile(fd, buf, len, &br, NULL) ? (int) br : -1; + const ssize_t len = (ssize_t) _len; + ssize_t br; + while (((br = _read(fd, buf, len)) == -1) && (errno == EINTR)) { /*spin*/ } + return (int) br; } /* readPipe */ static void closePipe(PipeType fd) { - CloseHandle(fd); + _close(fd); } /* closePipe */ static char *getEnvVar(const char *key, char *buf, const size_t buflen) diff --git a/steamshim/steamshim_parent.cpp b/steamshim/steamshim_parent.cpp index e76486b7..f21da0ca 100644 --- a/steamshim/steamshim_parent.cpp +++ b/steamshim/steamshim_parent.cpp @@ -441,8 +441,10 @@ SteamBridge::SteamBridge(PipeType _fd) void SteamBridge::OnUserStatsReceived(UserStatsReceived_t *pCallback) { if (GAppID != pCallback->m_nGameID) return; +#ifndef _WIN32 //FIXME if (GUserID != pCallback->m_steamIDUser.ConvertToUint64()) return; +#endif writeStatsReceived(fd, pCallback->m_eResult == k_EResultOK); } // SteamBridge::OnUserStatsReceived