git.ucc.asn.au
/
tpg
/
acess2.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Usermode/libunicode - Add C++ wrappers
[tpg/acess2.git]
/
Usermode
/
Libraries
/
libaxwin4.so_src
/
wm.cpp
diff --git
a/Usermode/Libraries/libaxwin4.so_src/wm.cpp
b/Usermode/Libraries/libaxwin4.so_src/wm.cpp
index
ee1895e
..
cae79c7
100644
(file)
--- a/
Usermode/Libraries/libaxwin4.so_src/wm.cpp
+++ b/
Usermode/Libraries/libaxwin4.so_src/wm.cpp
@@
-11,6
+11,7
@@
#include <vector>
#include <algorithm>
#include <mutex>
#include <vector>
#include <algorithm>
#include <mutex>
+#include <cassert>
namespace AxWin {
namespace AxWin {
@@
-22,7
+23,7
@@
extern "C" tAxWin4_Window *AxWin4_CreateWindow(const char *Name)
{
// Allocate a window ID
::std::lock_guard<std::mutex> lock(glWindowList);
{
// Allocate a window ID
::std::lock_guard<std::mutex> lock(glWindowList);
- int id = ::std::find(gWindowList.begin(), gWindowList.end(), nullptr) - gWindowList.
end
();
+ int id = ::std::find(gWindowList.begin(), gWindowList.end(), nullptr) - gWindowList.
begin
();
if( id >= MAX_WINDOW_ID ) {
throw ::std::runtime_error("AxWin4_CreateWindow - Out of IDs (TODO: Better exception)");
}
if( id >= MAX_WINDOW_ID ) {
throw ::std::runtime_error("AxWin4_CreateWindow - Out of IDs (TODO: Better exception)");
}
@@
-30,6
+31,7
@@
extern "C" tAxWin4_Window *AxWin4_CreateWindow(const char *Name)
{
gWindowList.push_back(nullptr);
}
{
gWindowList.push_back(nullptr);
}
+ assert(gWindowList[id] == nullptr);
// Create window structure locally
tAxWin4_Window *ret = new tAxWin4_Window();
// Create window structure locally
tAxWin4_Window *ret = new tAxWin4_Window();
@@
-118,13
+120,19
@@
extern "C" void *AxWin4_GetWindowBuffer(tAxWin4_Window *Window)
req.WriteU16(Window->m_id);
CDeserialiser response = GetSyncReply(req, IPCMSG_GETWINBUF);
req.WriteU16(Window->m_id);
CDeserialiser response = GetSyncReply(req, IPCMSG_GETWINBUF);
- if( response.ReadU16() != Window->m_id )
+ unsigned int rspwin = response.ReadU16();
+ if( rspwin != Window->m_id )
{
{
-
+ _SysDebug("AxWin4_GetWindowBuffer: GETWINBUF reply for different window (%u != %u)", rspwin, Window->m_id);
+ return NULL;
}
uint64_t handle = response.ReadU64();
Window->m_fd = _SysUnMarshalFD(handle);
}
uint64_t handle = response.ReadU64();
Window->m_fd = _SysUnMarshalFD(handle);
+ if( Window->m_fd == -1 ) {
+ _SysDebug("AxWin4_GetWindowBuffer: Unable to unmarshal resultant FD (0x%llx)", handle);
+ return NULL;
+ }
_SysDebug("AxWin4_GetWindowBuffer: %llx = %i", handle, Window->m_fd);
}
_SysDebug("AxWin4_GetWindowBuffer: %llx = %i", handle, Window->m_fd);
}
UCC
git Repository :: git.ucc.asn.au