mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-04-21 03:55:32 +00:00
Draft socketselect, other minor fixes
This commit is contained in:
parent
82733e1943
commit
6beec80b60
6 changed files with 129 additions and 75 deletions
|
@ -528,7 +528,7 @@ s32 cellFontDeleteGlyph()
|
|||
|
||||
s32 cellFontExtend(u32 a1, u32 a2, u32 a3)
|
||||
{
|
||||
cellFont.Warning("cellFontExtend(a1=0x%x, a2=0x%x, a3=0x%x)", a1, a2, a3);
|
||||
cellFont.Todo("cellFontExtend(a1=0x%x, a2=0x%x, a3=0x%x)", a1, a2, a3);
|
||||
//In a test I did: a1=0xcfe00000, a2=0x0, a3=(pointer to something)
|
||||
if (a1 == 0xcfe00000)
|
||||
{
|
||||
|
|
|
@ -620,64 +620,64 @@ union CellSailEvent
|
|||
};
|
||||
};
|
||||
|
||||
typedef u32(CellSailMemAllocatorFuncAlloc)(u32 pArg, u32 boundary, u32 size);
|
||||
typedef u32(CellSailMemAllocatorFuncFree)(u32 pArg, u32 boundary, u32 pMemory);
|
||||
typedef vm::ptr<u32>(CellSailMemAllocatorFuncAlloc)(vm::ptr<u32> pArg, u32 boundary, u32 size);
|
||||
typedef u32(CellSailMemAllocatorFuncFree)(vm::ptr<u32> pArg, u32 boundary, vm::ptr<u32> pMemory);
|
||||
|
||||
typedef int(CellSailSoundAdapterFuncMakeup)(u32 pArg);
|
||||
typedef int(CellSailSoundAdapterFuncCleanup)(u32 pArg);
|
||||
typedef void(CellSailSoundAdapterFuncFormatChanged)(u32 pArg, vm::ptr<CellSailAudioFormat> pFormat, u32 sessionId);
|
||||
typedef s32(CellSailSoundAdapterFuncMakeup)(vm::ptr<u32> pArg);
|
||||
typedef s32(CellSailSoundAdapterFuncCleanup)(vm::ptr<u32> pArg);
|
||||
typedef u32(CellSailSoundAdapterFuncFormatChanged)(vm::ptr<u32> pArg, vm::ptr<CellSailAudioFormat> pFormat, u32 sessionId);
|
||||
|
||||
typedef int(CellSailGraphicsAdapterFuncMakeup)(u32 pArg);
|
||||
typedef int(CellSailGraphicsAdapterFuncCleanup)(u32 pArg);
|
||||
typedef void(CellSailGraphicsAdapterFuncFormatChanged)(u32 pArg, vm::ptr<CellSailVideoFormat> pFormat, u32 sessionId);
|
||||
typedef int(CellSailGraphicsAdapterFuncAllocFrame)(u32 pArg, u32 size, s32 num, u8 ppFrame);
|
||||
typedef int(CellSailGraphicsAdapterFuncFreeFrame)(u32 pArg, s32 num, u8 ppFrame);
|
||||
typedef s32(CellSailGraphicsAdapterFuncMakeup)(vm::ptr<u32> pArg);
|
||||
typedef s32(CellSailGraphicsAdapterFuncCleanup)(vm::ptr<u32> pArg);
|
||||
typedef u32(CellSailGraphicsAdapterFuncFormatChanged)(vm::ptr<u32> pArg, vm::ptr<CellSailVideoFormat> pFormat, u32 sessionId);
|
||||
typedef s32(CellSailGraphicsAdapterFuncAllocFrame)(vm::ptr<u32> pArg, u32 size, s32 num, vm::ptr<u8> ppFrame);
|
||||
typedef s32(CellSailGraphicsAdapterFuncFreeFrame)(vm::ptr<u32> pArg, s32 num, vm::ptr<u8> ppFrame);
|
||||
|
||||
typedef int(CellSailSourceFuncMakeup)(u32 pArg, s8 pProtocolNames);
|
||||
typedef int(CellSailSourceFuncCleanup)(u32 pArg);
|
||||
typedef void(CellSailSourceFuncOpen)(u32 pArg, s32 streamType, u32 pMediaInfo, s8 pUri, vm::ptr<CellSailSourceStreamingProfile> pProfile);
|
||||
typedef void(CellSailSourceFuncClose)(u32 pArg);
|
||||
typedef void(CellSailSourceFuncStart)(u32 pArg, vm::ptr<CellSailSourceStartCommand> pCommand, u32 sessionId);
|
||||
typedef void(CellSailSourceFuncStop)(u32 pArg);
|
||||
typedef void(CellSailSourceFuncCancel)(u32 pArg);
|
||||
typedef int(CellSailSourceFuncCheckout)(u32 pArg, vm::ptr<CellSailSourceBufferItem> ppItem);
|
||||
typedef int(CellSailSourceFuncCheckin)(u32 pArg, vm::ptr<CellSailSourceBufferItem> pItem);
|
||||
typedef int(CellSailSourceFuncClear)(u32 pArg);
|
||||
typedef int(CellSailSourceFuncRead)(u32 pArg, s32 streamType, u32 pMediaInfo, s8 pUri, u64 offset, u8 pBuf, u32 size, u64 pTotalSize);
|
||||
typedef int(CellSailSourceFuncReadSync)(u32 pArg, s32 streamType, u32 pMediaInfo, s8 pUri, u64 offset, u8 pBuf, u32 size, u64 pTotalSize);
|
||||
typedef int(CellSailSourceFuncGetCapabilities)(u32 pArg, s32 streamType, u32 pMediaInfo, s8 pUri, u64 pCapabilities);
|
||||
typedef int(CellSailSourceFuncInquireCapability)(u32 pArg, s32 streamType, u32 pMediaInfo, s8 pUri, vm::ptr<CellSailSourceStartCommand> pCommand);
|
||||
typedef void(CellSailSourceCheckFuncError)(u32 pArg, s8 pMsg, s32 line);
|
||||
typedef s32(CellSailSourceFuncMakeup)(vm::ptr<u32> pArg, vm::cptr<s8> pProtocolNames);
|
||||
typedef s32(CellSailSourceFuncCleanup)(vm::ptr<u32> pArg);
|
||||
typedef u32(CellSailSourceFuncOpen)(vm::ptr<u32> pArg, s32 streamType, vm::ptr<u32> pMediaInfo, vm::cptr<s8> pUri, vm::ptr<CellSailSourceStreamingProfile> pProfile);
|
||||
typedef u32(CellSailSourceFuncClose)(vm::ptr<u32> pArg);
|
||||
typedef u32(CellSailSourceFuncStart)(vm::ptr<u32> pArg, vm::ptr<CellSailSourceStartCommand> pCommand, u32 sessionId);
|
||||
typedef u32(CellSailSourceFuncStop)(vm::ptr<u32> pArg);
|
||||
typedef u32(CellSailSourceFuncCancel)(vm::ptr<u32> pArg);
|
||||
typedef s32(CellSailSourceFuncCheckout)(vm::ptr<u32> pArg, vm::ptr<CellSailSourceBufferItem> ppItem);
|
||||
typedef s32(CellSailSourceFuncCheckin)(vm::ptr<u32> pArg, vm::ptr<CellSailSourceBufferItem> pItem);
|
||||
typedef s32(CellSailSourceFuncClear)(vm::ptr<u32> pArg);
|
||||
typedef s32(CellSailSourceFuncRead)(vm::ptr<u32> pArg, s32 streamType, vm::ptr<u32> pMediaInfo, vm::cptr<s8> pUri, u64 offset, vm::ptr<u8> pBuf, u32 size, vm::ptr<u64> pTotalSize);
|
||||
typedef s32(CellSailSourceFuncReadSync)(vm::ptr<u32> pArg, s32 streamType, vm::ptr<u32> pMediaInfo, vm::cptr<s8> pUri, u64 offset, vm::ptr<u8> pBuf, u32 size, vm::ptr<u64> pTotalSize);
|
||||
typedef s32(CellSailSourceFuncGetCapabilities)(vm::ptr<u32> pArg, s32 streamType, vm::ptr<u32> pMediaInfo, vm::cptr<s8> pUri, vm::ptr<u64> pCapabilities);
|
||||
typedef s32(CellSailSourceFuncInquireCapability)(vm::ptr<u32> pArg, s32 streamType, vm::ptr<u32> pMediaInfo, vm::cptr<s8> pUri, vm::ptr<CellSailSourceStartCommand> pCommand);
|
||||
typedef u32(CellSailSourceCheckFuncError)(vm::ptr<u32> pArg, vm::cptr<s8> pMsg, s32 line);
|
||||
|
||||
typedef int(CellSailFsFuncOpen)(s8 pPath, s32 flag, s32 pFd, u32 pArg, u64 size);
|
||||
typedef int(CellSailFsFuncOpenSecond)(s8 pPath, s32 flag, s32 fd, u32 pArg, u64 size);
|
||||
typedef int(CellSailFsFuncClose)(s32 fd);
|
||||
typedef int(CellSailFsFuncFstat)(s32 fd, u32 pStat_addr);
|
||||
typedef int(CellSailFsFuncRead)(s32 fd, u32 pBuf, u64 numBytes, u64 pNumRead);
|
||||
typedef int(CellSailFsFuncLseek)(s32 fd, s64 offset, s32 whence, u64 pPosition);
|
||||
typedef int(CellSailFsFuncCancel)(s32 fd);
|
||||
typedef s32(CellSailFsFuncOpen)(vm::cptr<s8> pPath, s32 flag, vm::ptr<s32> pFd, vm::ptr<u32> pArg, u64 size);
|
||||
typedef s32(CellSailFsFuncOpenSecond)(vm::cptr<s8> pPath, s32 flag, s32 fd, vm::ptr<u32> pArg, u64 size);
|
||||
typedef s32(CellSailFsFuncClose)(s32 fd);
|
||||
typedef s32(CellSailFsFuncFstat)(s32 fd, vm::ptr<u32> pStat_addr);
|
||||
typedef s32(CellSailFsFuncRead)(s32 fd, vm::ptr<u32> pBuf, u64 numBytes, vm::ptr<u64> pNumRead);
|
||||
typedef s32(CellSailFsFuncLseek)(s32 fd, s64 offset, s32 whence, vm::ptr<u64> pPosition);
|
||||
typedef s32(CellSailFsFuncCancel)(s32 fd);
|
||||
|
||||
typedef int(CellSailRendererAudioFuncMakeup)(u32 pArg);
|
||||
typedef int(CellSailRendererAudioFuncCleanup)(u32 pArg);
|
||||
typedef void(CellSailRendererAudioFuncOpen)(u32 pArg, vm::ptr<CellSailAudioFormat> pInfo, u32 frameNum);
|
||||
typedef void(CellSailRendererAudioFuncClose)(u32 pArg);
|
||||
typedef void(CellSailRendererAudioFuncStart)(u32 pArg, bool buffering);
|
||||
typedef void(CellSailRendererAudioFuncStop)(u32 pArg, bool flush);
|
||||
typedef void(CellSailRendererAudioFuncCancel)(u32 pArg);
|
||||
typedef int(CellSailRendererAudioFuncCheckout)(u32 pArg, vm::ptr<CellSailAudioFrameInfo> ppInfo);
|
||||
typedef int(CellSailRendererAudioFuncCheckin)(u32 pArg, vm::ptr<CellSailAudioFrameInfo> pInfo);
|
||||
typedef s32(CellSailRendererAudioFuncMakeup)(vm::ptr<u32> pArg);
|
||||
typedef s32(CellSailRendererAudioFuncCleanup)(vm::ptr<u32> pArg);
|
||||
typedef u32(CellSailRendererAudioFuncOpen)(vm::ptr<u32> pArg, vm::ptr<CellSailAudioFormat> pInfo, u32 frameNum);
|
||||
typedef u32(CellSailRendererAudioFuncClose)(vm::ptr<u32> pArg);
|
||||
typedef u32(CellSailRendererAudioFuncStart)(vm::ptr<u32> pArg, bool buffering);
|
||||
typedef u32(CellSailRendererAudioFuncStop)(vm::ptr<u32> pArg, bool flush);
|
||||
typedef u32(CellSailRendererAudioFuncCancel)(vm::ptr<u32> pArg);
|
||||
typedef s32(CellSailRendererAudioFuncCheckout)(vm::ptr<u32> pArg, vm::ptr<CellSailAudioFrameInfo> ppInfo);
|
||||
typedef s32(CellSailRendererAudioFuncCheckin)(vm::ptr<u32> pArg, vm::ptr<CellSailAudioFrameInfo> pInfo);
|
||||
|
||||
typedef int(CellSailRendererVideoFuncMakeup)(u32 pArg);
|
||||
typedef int(CellSailRendererVideoFuncCleanup)(u32 pArg);
|
||||
typedef void(CellSailRendererVideoFuncOpen)(u32 pArg, vm::ptr<CellSailVideoFormat> pInfo, u32 frameNum, u32 minFrameNum);
|
||||
typedef void(CellSailRendererVideoFuncClose)(u32 pArg);
|
||||
typedef void(CellSailRendererVideoFuncStart)(u32 pArg, bool buffering);
|
||||
typedef void(CellSailRendererVideoFuncStop)(u32 pArg, bool flush, bool keepRendering);
|
||||
typedef void(CellSailRendererVideoFuncCancel)(u32 pArg);
|
||||
typedef int(CellSailRendererVideoFuncCheckout)(u32 pArg, vm::ptr<CellSailVideoFrameInfo> ppInfo);
|
||||
typedef int(CellSailRendererVideoFuncCheckin)(u32 pArg, vm::ptr<CellSailVideoFrameInfo> pInfo);
|
||||
typedef s32(CellSailRendererVideoFuncMakeup)(vm::ptr<u32> pArg);
|
||||
typedef s32(CellSailRendererVideoFuncCleanup)(vm::ptr<u32> pArg);
|
||||
typedef u32(CellSailRendererVideoFuncOpen)(vm::ptr<u32> pArg, vm::ptr<CellSailVideoFormat> pInfo, u32 frameNum, u32 minFrameNum);
|
||||
typedef u32(CellSailRendererVideoFuncClose)(vm::ptr<u32> pArg);
|
||||
typedef u32(CellSailRendererVideoFuncStart)(vm::ptr<u32> pArg, bool buffering);
|
||||
typedef u32(CellSailRendererVideoFuncStop)(vm::ptr<u32> pArg, bool flush, bool keepRendering);
|
||||
typedef u32(CellSailRendererVideoFuncCancel)(vm::ptr<u32> pArg);
|
||||
typedef s32(CellSailRendererVideoFuncCheckout)(vm::ptr<u32> pArg, vm::ptr<CellSailVideoFrameInfo> ppInfo);
|
||||
typedef s32(CellSailRendererVideoFuncCheckin)(vm::ptr<u32> pArg, vm::ptr<CellSailVideoFrameInfo> pInfo);
|
||||
|
||||
typedef void(CellSailPlayerFuncNotified)(u32 pArg, vm::ptr<CellSailEvent> event, u64 arg0, u64 arg1);
|
||||
typedef void(CellSailPlayerFuncNotified)(vm::ptr<u32> pArg, CellSailEvent event, u64 arg0, u64 arg1);
|
||||
|
||||
struct CellSailMemAllocatorFuncs
|
||||
{
|
||||
|
@ -855,8 +855,8 @@ struct CellSailMp4DateTime
|
|||
be_t<u16> day;
|
||||
be_t<u16> month;
|
||||
be_t<u16> year;
|
||||
//be_t<u16> reserved0;
|
||||
//be_t<u16> reserved1;
|
||||
be_t<u16> reserved0;
|
||||
be_t<u16> reserved1;
|
||||
};
|
||||
|
||||
struct CellSailMp4Movie
|
||||
|
@ -871,7 +871,7 @@ struct CellSailMp4MovieInfo
|
|||
be_t<u32> trackCount;
|
||||
be_t<u32> movieTimeScale;
|
||||
be_t<u32> movieDuration;
|
||||
//be_t<u32> reserved[16];
|
||||
be_t<u32> reserved[16];
|
||||
};
|
||||
|
||||
struct CellSailMp4Track
|
||||
|
@ -893,7 +893,7 @@ struct CellSailMp4TrackInfo
|
|||
be_t<u16> language;
|
||||
be_t<u16> reserved2;
|
||||
be_t<u16> mediaType;
|
||||
//be_t<u32> reserved3[3];
|
||||
be_t<u32> reserved3[3];
|
||||
};
|
||||
|
||||
struct CellSailAviMovie
|
||||
|
@ -913,8 +913,8 @@ struct CellSailAviMovieInfo
|
|||
be_t<u32> scale;
|
||||
be_t<u32> rate;
|
||||
be_t<u32> length;
|
||||
//be_t<u32> reserved1;
|
||||
//be_t<u32> reserved2;
|
||||
be_t<u32> reserved1;
|
||||
be_t<u32> reserved2;
|
||||
};
|
||||
|
||||
struct CellSailAviMainHeader
|
||||
|
@ -929,7 +929,7 @@ struct CellSailAviMainHeader
|
|||
be_t<u32> suggestedBufferSize;
|
||||
be_t<u32> width;
|
||||
be_t<u32> height;
|
||||
//be_t<u32> reserved[4];
|
||||
be_t<u32> reserved[4];
|
||||
};
|
||||
|
||||
struct CellSailAviExtendedHeader
|
||||
|
|
|
@ -231,7 +231,7 @@ s32 sceNpTrophyRegisterContext(PPUThread& CPU, u32 context, u32 handle, vm::ptr<
|
|||
|
||||
s32 sceNpTrophyGetRequiredDiskSpace(u32 context, u32 handle, vm::ptr<u64> reqspace, u64 options)
|
||||
{
|
||||
sceNpTrophy.Error("sceNpTrophyGetRequiredDiskSpace(context=0x%x, handle=0x%x, reqspace*=0x%x, options=0x%llx)", context, handle, reqspace, options);
|
||||
sceNpTrophy.Todo("sceNpTrophyGetRequiredDiskSpace(context=0x%x, handle=0x%x, reqspace*=0x%x, options=0x%llx)", context, handle, reqspace, options);
|
||||
|
||||
const auto ctxt = Emu.GetIdManager().get<trophy_context_t>(context);
|
||||
|
||||
|
|
|
@ -98,6 +98,7 @@ namespace sys_net_func
|
|||
s32 accept(s32 s, vm::ptr<sys_net_sockaddr> addr, vm::ptr<pck_len_t> paddrlen)
|
||||
{
|
||||
sys_net.Warning("accept(s=%d, family=*0x%x, paddrlen=*0x%x)", s, addr, paddrlen);
|
||||
|
||||
if (!addr) {
|
||||
int ret = ::accept(s, nullptr, nullptr);
|
||||
*g_lastError = getLastError();
|
||||
|
@ -108,7 +109,7 @@ namespace sys_net_func
|
|||
memcpy(&_addr, addr.get_ptr(), sizeof(sockaddr));
|
||||
_addr.sa_family = addr->sa_family;
|
||||
pck_len_t _paddrlen;
|
||||
int ret = ::accept(s, &_addr, &_paddrlen);
|
||||
s32 ret = ::accept(s, &_addr, &_paddrlen);
|
||||
*paddrlen = _paddrlen;
|
||||
*g_lastError = getLastError();
|
||||
return ret;
|
||||
|
@ -118,26 +119,30 @@ namespace sys_net_func
|
|||
s32 bind(s32 s, vm::ptr<sys_net_sockaddr_in> addr, u32 addrlen)
|
||||
{
|
||||
sys_net.Warning("bind(s=%d, family=*0x%x, addrlen=%d)", s, addr, addrlen);
|
||||
|
||||
sockaddr_in saddr;
|
||||
memcpy(&saddr, addr.get_ptr(), sizeof(sockaddr_in));
|
||||
saddr.sin_family = addr->sin_family;
|
||||
const char *ipaddr = inet_ntoa(saddr.sin_addr);
|
||||
sys_net.Warning("binding on %s to port %d", ipaddr, ntohs(saddr.sin_port));
|
||||
int ret = ::bind(s, (const sockaddr *)&saddr, addrlen);
|
||||
s32 ret = ::bind(s, (const sockaddr *)&saddr, addrlen);
|
||||
*g_lastError = getLastError();
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
s32 connect(s32 s, vm::ptr<sys_net_sockaddr_in> addr, u32 addrlen)
|
||||
{
|
||||
sys_net.Warning("connect(s=%d, family=*0x%x, addrlen=%d)", s, addr, addrlen);
|
||||
|
||||
sockaddr_in saddr;
|
||||
memcpy(&saddr, addr.get_ptr(), sizeof(sockaddr_in));
|
||||
saddr.sin_family = addr->sin_family;
|
||||
const char *ipaddr = inet_ntoa(saddr.sin_addr);
|
||||
sys_net.Warning("connecting on %s to port %d", ipaddr, ntohs(saddr.sin_port));
|
||||
int ret = ::connect(s, (const sockaddr *)&saddr, addrlen);
|
||||
s32 ret = ::connect(s, (const sockaddr *)&saddr, addrlen);
|
||||
*g_lastError = getLastError();
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -229,8 +234,9 @@ namespace sys_net_func
|
|||
s32 listen(s32 s, s32 backlog)
|
||||
{
|
||||
sys_net.Warning("listen(s=%d, backlog=%d)", s, backlog);
|
||||
int ret = ::listen(s, backlog);
|
||||
s32 ret = ::listen(s, backlog);
|
||||
*g_lastError = getLastError();
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -238,8 +244,9 @@ namespace sys_net_func
|
|||
{
|
||||
sys_net.Warning("recv(s=%d, buf=*0x%x, len=%d, flags=0x%x)", s, buf, len, flags);
|
||||
|
||||
int ret = ::recv(s, buf.get_ptr(), len, flags);
|
||||
s32 ret = ::recv(s, buf.get_ptr(), len, flags);
|
||||
*g_lastError = getLastError();
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -251,24 +258,26 @@ namespace sys_net_func
|
|||
memcpy(&_addr, addr.get_ptr(), sizeof(sockaddr));
|
||||
_addr.sa_family = addr->sa_family;
|
||||
pck_len_t _paddrlen;
|
||||
int ret = ::recvfrom(s, buf.get_ptr(), len, flags, &_addr, &_paddrlen);
|
||||
s32 ret = ::recvfrom(s, buf.get_ptr(), len, flags, &_addr, &_paddrlen);
|
||||
*paddrlen = _paddrlen;
|
||||
*g_lastError = getLastError();
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
s32 recvmsg()
|
||||
{
|
||||
UNIMPLEMENTED_FUNC(sys_net);
|
||||
return CELL_OK;
|
||||
return CELL_OK;
|
||||
}
|
||||
|
||||
s32 send(s32 s, vm::cptr<char> buf, u32 len, s32 flags)
|
||||
{
|
||||
sys_net.Warning("send(s=%d, buf=*0x%x, len=%d, flags=0x%x)", s, buf, len, flags);
|
||||
|
||||
int ret = ::send(s, buf.get_ptr(), len, flags);
|
||||
s32 ret = ::send(s, buf.get_ptr(), len, flags);
|
||||
*g_lastError = getLastError();
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -285,8 +294,9 @@ namespace sys_net_func
|
|||
sockaddr _addr;
|
||||
memcpy(&_addr, addr.get_ptr(), sizeof(sockaddr));
|
||||
_addr.sa_family = addr->sa_family;
|
||||
int ret = ::sendto(s, buf.get_ptr(), len, flags, &_addr, addrlen);
|
||||
s32 ret = ::sendto(s, buf.get_ptr(), len, flags, &_addr, addrlen);
|
||||
*g_lastError = getLastError();
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -294,24 +304,29 @@ namespace sys_net_func
|
|||
{
|
||||
sys_net.Warning("socket(s=%d, level=%d, optname=%d, optval=*0x%x, optlen=%d)", s, level, optname, optval, optlen);
|
||||
|
||||
int ret = ::setsockopt(s, level, optname, optval.get_ptr(), optlen);
|
||||
s32 ret = ::setsockopt(s, level, optname, optval.get_ptr(), optlen);
|
||||
*g_lastError = getLastError();
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
s32 shutdown(s32 s, s32 how)
|
||||
{
|
||||
sys_net.Warning("shutdown(s=%d, how=%d)", s, how);
|
||||
int ret = ::shutdown(s, how);
|
||||
|
||||
s32 ret = ::shutdown(s, how);
|
||||
*g_lastError = getLastError();
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
s32 socket(s32 family, s32 type, s32 protocol)
|
||||
{
|
||||
sys_net.Warning("socket(family=%d, type=%d, protocol=%d)", family, type, protocol);
|
||||
int ret = ::socket(family, type, protocol);
|
||||
|
||||
s32 ret = ::socket(family, type, protocol);
|
||||
*g_lastError = getLastError();
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -333,9 +348,39 @@ namespace sys_net_func
|
|||
return CELL_OK;
|
||||
}
|
||||
|
||||
s32 socketselect()
|
||||
s32 socketselect(s32 nfds, vm::ptr<fd_set> readfds, vm::ptr<sys_net_fd_set> writefds, vm::ptr<sys_net_fd_set> exceptfds, vm::ptr<timeval> timeout)
|
||||
{
|
||||
UNIMPLEMENTED_FUNC(sys_net);
|
||||
sys_net.Todo("socketselect(nfds=%d, readfds_addr=0x%x, writefds_addr=0x%x, exceptfds_addr=0x%x, timeout_addr=0x%x)",
|
||||
nfds, readfds.addr(), writefds.addr(), exceptfds.addr(), timeout.addr());
|
||||
|
||||
fd_set _readfds;
|
||||
fd_set _writefds;
|
||||
fd_set _exceptfds;
|
||||
|
||||
if (readfds)
|
||||
{
|
||||
memcpy(&_readfds, readfds.get_ptr(), sizeof(fd_set));
|
||||
}
|
||||
|
||||
if (writefds)
|
||||
{
|
||||
memcpy(&_writefds, writefds.get_ptr(), sizeof(fd_set));
|
||||
}
|
||||
|
||||
if (exceptfds)
|
||||
{
|
||||
memcpy(&_exceptfds, exceptfds.get_ptr(), sizeof(fd_set));
|
||||
}
|
||||
|
||||
s32 ret = ::select(nfds, readfds.get_ptr(), &_writefds, &_exceptfds, timeout.get_ptr());
|
||||
*g_lastError = getLastError();
|
||||
|
||||
if (getLastError() >= 0)
|
||||
{
|
||||
sys_net.Error("socketselect(): error %d", getLastError());
|
||||
}
|
||||
|
||||
//return ret;
|
||||
return CELL_OK;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -25,3 +25,8 @@ struct sys_net_sockaddr_in
|
|||
be_t<u32> sa_addr; // struct in_addr
|
||||
u8 unused[8];
|
||||
};
|
||||
|
||||
struct sys_net_fd_set
|
||||
{
|
||||
s32 fds_bits[8];
|
||||
};
|
|
@ -22,7 +22,11 @@ bool TRPLoader::Install(std::string dest, bool show)
|
|||
if (!dest.empty() && dest.back() != '/')
|
||||
dest += '/';
|
||||
|
||||
Emu.GetVFS().CreateDir(dest);
|
||||
if (!Emu.GetVFS().ExistsDir(dest))
|
||||
{
|
||||
Emu.GetVFS().CreateDir(dest);
|
||||
}
|
||||
|
||||
for (const TRPEntry& entry : m_entries)
|
||||
{
|
||||
char* buffer = new char [(u32)entry.size];
|
||||
|
|
Loading…
Add table
Reference in a new issue