static s32 TranslateErrorCode(s32 native_error, bool isRW) { switch (native_error) { case ERRORCODE(EMSGSIZE): ERROR_LOG(WII_IPC_NET, "Find out why this happened, looks like PEEK failure?"); return -1; // Should be -SO_EMSGSIZE case EITHER(WSAENOTSOCK, EBADF): return -SO_EBADF; case ERRORCODE(EADDRINUSE): return -SO_EADDRINUSE; case ERRORCODE(ECONNRESET): return -SO_ECONNRESET; case ERRORCODE(EISCONN): return -SO_EISCONN; case ERRORCODE(ENOTCONN): return -SO_EAGAIN; // After proper blocking SO_EAGAIN shouldn't be needed... case ERRORCODE(EINPROGRESS): return -SO_EINPROGRESS; case ERRORCODE(EALREADY): return -SO_EALREADY; case ERRORCODE(EACCES): return -SO_EACCES; case ERRORCODE(ECONNREFUSED): return -SO_ECONNREFUSED; case ERRORCODE(ENETUNREACH): return -SO_ENETUNREACH; case ERRORCODE(EHOSTUNREACH): return -SO_EHOSTUNREACH; case EITHER(WSAEWOULDBLOCK, EAGAIN): if (isRW) { return -SO_EAGAIN; // EAGAIN } else { return -SO_EINPROGRESS; // EINPROGRESS } default: return -1; } }
/* --rpw fix: maruEncryptBlock was broken for block != to */ EXPORT void maruEncryptBlock(maruAspect *a, u_char *block, u_char *to, int len, m_u32 blockno, int flags) { maruKey key; m_u64 *block8 = (m_u64*)block, *iv8 = (m_u64*)a->whitener, *to8 = (m_u64*)to; int keysize; assert((a->blockCipher->blocksize == 0) || ((len%a->blockCipher->blocksize) == 0)); keysize = MIN(sizeof key, EITHER(a->blockCipher->keylen, sizeof key)); /* XXX careful */ assert((keysize&7) == 0); maruGenBlockKey(a, &key, keysize, blockno); a->blockCipher->setkey(a->blockOpaque, key.data, keysize, flags); if (flags & MCD_ENCRYPT) { int n; m_u64 sum = 0; for (n=len/8; --n>0; ) { block8[n] ^= iv8[n]; sum ^= block8[n]; } block8[0] ^= sum ^ hton64(blockno); } a->blockCipher->crypt(a->blockOpaque, NULL /* do the iv's by hand */, block, to, len, flags); /* --rpw restore contents of original block */ if (flags & MCD_ENCRYPT && block != to) { int n; m_u64 sum = 0; for (n=len/8; --n>0; ) { sum ^= block8[n]; block8[n] ^= iv8[n]; } block8[0] ^= sum ^ hton64(blockno); } if (flags & MCD_DECRYPT) { int n; m_u64 sum = 0; for (n=len/8; --n>0; ) { sum ^= to8[n]; to8[n] ^= iv8[n]; } to8[0] ^= sum ^ hton64(blockno); } bzero(&key, sizeof key); }
s32 WiiSocket::CloseFd() { s32 ReturnValue = 0; if (fd >= 0) { #ifdef _WIN32 s32 ret = closesocket(fd); #else s32 ret = close(fd); #endif ReturnValue = WiiSockMan::GetNetErrorCode(ret, "CloseFd", false); } else { ReturnValue = WiiSockMan::GetNetErrorCode(EITHER(WSAENOTSOCK, EBADF), "CloseFd", false); } fd = -1; return ReturnValue; }