diff --git a/fs_defs.h b/fs_defs.h index 6db7fa4..450abfe 100644 --- a/fs_defs.h +++ b/fs_defs.h @@ -31,6 +31,14 @@ extern "C" { #define FS_CLIENT_SIZE 0x1700 #define FS_CMD_BLOCK_SIZE 0xA80 +struct FSClient { + u8 buffer[FS_CLIENT_SIZE]; +}; + +struct FSCmdBlock { + u8 buffer[FS_CMD_BLOCK_SIZE]; +}; + typedef struct { uint32_t flag; diff --git a/fs_functions.c b/fs_functions.c index 1da25f3..e4629a0 100644 --- a/fs_functions.c +++ b/fs_functions.c @@ -76,6 +76,8 @@ EXPORT_DECL(s32, FSBindUnmount, void *pClient, void *pCmd, char *target, s32 err EXPORT_DECL(s32, FSMakeQuota, void *pClient, void *pCmd, const char *path,u32 mode, u64 size, s32 errHandling); EXPORT_DECL(s32, FSMakeQuotaAsync ,void *pClient, void *pCmd, const char *path,u32 mode, u64 size, s32 errHandling,const void *asyncParams); +EXPORT_DECL(s32, FSGetCwd,void * client,void * block,char * buffer,u32 bufferSize,u32 flags); + void InitFSFunctionPointers(void) { u32 *funcPointer = 0; @@ -132,4 +134,6 @@ void InitFSFunctionPointers(void) OS_FIND_EXPORT(coreinit_handle, FSMakeQuota); OS_FIND_EXPORT(coreinit_handle, FSMakeQuotaAsync); + + OS_FIND_EXPORT(coreinit_handle, FSGetCwd); } diff --git a/fs_functions.h b/fs_functions.h index 24e7403..325bf5c 100644 --- a/fs_functions.h +++ b/fs_functions.h @@ -89,6 +89,8 @@ extern s32 (* FSBindUnmount)(void *pClient, void *pCmd, char *target, s32 error) extern s32 (* FSMakeQuota)( void *pClient, void *pCmd, const char *path,u32 mode, u64 size, s32 errHandling); extern s32 (* FSMakeQuotaAsync)(void *pClient, void *pCmd, const char *path,u32 mode, u64 size, s32 errHandling,const void *asyncParams); +extern s32 (* FSGetCwd)(void * client,void * block,char * buffer,u32 bufferSize,u32 flags); + #ifdef __cplusplus } diff --git a/nn_act_functions.c b/nn_act_functions.c new file mode 100644 index 0000000..5c2a959 --- /dev/null +++ b/nn_act_functions.c @@ -0,0 +1,48 @@ +/**************************************************************************** + * Copyright (C) 2015 + * by Dimok + * + * This software is provided 'as-is', without any express or implied + * warranty. In no event will the authors be held liable for any + * damages arising from the use of this software. + * + * Permission is granted to anyone to use this software for any + * purpose, including commercial applications, and to alter it and + * redistribute it freely, subject to the following restrictions: + * + * 1. The origin of this software must not be misrepresented; you + * must not claim that you wrote the original software. If you use + * this software in a product, an acknowledgment in the product + * documentation would be appreciated but is not required. + * + * 2. Altered source versions must be plainly marked as such, and + * must not be misrepresented as being the original software. + * + * 3. This notice may not be removed or altered from any source + * distribution. + ***************************************************************************/ +#include "os_functions.h" +#include "nn_act_functions.h" + +u32 nn_act_handle __attribute__((section(".data"))) = 0; + +EXPORT_DECL(void, nn_act_Initialize, void); +EXPORT_DECL(void, nn_act_Finalize, void); +EXPORT_DECL(u8, nn_act_GetSlotNo, void); +EXPORT_DECL(u32, nn_act_GetPersistentIdEx, u8 slot); + +void InitAcquireACT(void) +{ + OSDynLoad_Acquire("nn_act.rpl", &nn_act_handle); +} + +void InitACTFunctionPointers(void) +{ + u32 *funcPointer = 0; + InitAcquireACT(); + + OS_FIND_EXPORT_EX(nn_act_handle, Initialize__Q2_2nn3actFv, nn_act_Initialize) + OS_FIND_EXPORT_EX(nn_act_handle, Finalize__Q2_2nn3actFv, nn_act_Finalize) + OS_FIND_EXPORT_EX(nn_act_handle, GetSlotNo__Q2_2nn3actFv, nn_act_GetSlotNo) + OS_FIND_EXPORT_EX(nn_act_handle, GetPersistentIdEx__Q2_2nn3actFUc, nn_act_GetPersistentIdEx) +} diff --git a/nn_act_functions.h b/nn_act_functions.h new file mode 100644 index 0000000..9567bf7 --- /dev/null +++ b/nn_act_functions.h @@ -0,0 +1,47 @@ +/**************************************************************************** + * Copyright (C) 2015 + * by Dimok + * + * This software is provided 'as-is', without any express or implied + * warranty. In no event will the authors be held liable for any + * damages arising from the use of this software. + * + * Permission is granted to anyone to use this software for any + * purpose, including commercial applications, and to alter it and + * redistribute it freely, subject to the following restrictions: + * + * 1. The origin of this software must not be misrepresented; you + * must not claim that you wrote the original software. If you use + * this software in a product, an acknowledgment in the product + * documentation would be appreciated but is not required. + * + * 2. Altered source versions must be plainly marked as such, and + * must not be misrepresented as being the original software. + * + * 3. This notice may not be removed or altered from any source + * distribution. + ***************************************************************************/ +#ifndef __NN_ACT_FUNCTIONS_H_ +#define __NN_ACT_FUNCTIONS_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +extern u32 nn_act_handle; + +extern void(* nn_act_Initialize)(void); +extern void(* nn_act_Finalize)(void); +extern u8(* nn_act_GetSlotNo)(void); +extern u32(*nn_act_GetPersistentIdEx)(u8 slot); + +void InitACTFunctionPointers(void); +void InitAcquireACT(void); + +#ifdef __cplusplus +} +#endif + +#endif // __NN_ACT_FUNCTIONS_H_ diff --git a/nn_save_functions.c b/nn_save_functions.c new file mode 100644 index 0000000..e07173b --- /dev/null +++ b/nn_save_functions.c @@ -0,0 +1,44 @@ +/**************************************************************************** + * Copyright (C) 2015 + * by Dimok + * + * This software is provided 'as-is', without any express or implied + * warranty. In no event will the authors be held liable for any + * damages arising from the use of this software. + * + * Permission is granted to anyone to use this software for any + * purpose, including commercial applications, and to alter it and + * redistribute it freely, subject to the following restrictions: + * + * 1. The origin of this software must not be misrepresented; you + * must not claim that you wrote the original software. If you use + * this software in a product, an acknowledgment in the product + * documentation would be appreciated but is not required. + * + * 2. Altered source versions must be plainly marked as such, and + * must not be misrepresented as being the original software. + * + * 3. This notice may not be removed or altered from any source + * distribution. + ***************************************************************************/ +#include "os_functions.h" +#include "nn_save_functions.h" + +u32 nn_save_handle __attribute__((section(".data"))) = 0; + + +EXPORT_DECL(void, SAVEInit, void); +EXPORT_DECL(int, SAVEOpenFile, void *pClient, void *pCmd, unsigned char user, const char *path, const char *mode, int *fd, int errHandling); + +void InitAcquireSave(void) +{ + OSDynLoad_Acquire("nn_save.rpl", &nn_save_handle); +} + +void InitSaveFunctionPointers(void) +{ + u32 *funcPointer = 0; + InitAcquireSave(); + OS_FIND_EXPORT(nn_save_handle, SAVEInit); + OS_FIND_EXPORT(nn_save_handle, SAVEOpenFile); +} diff --git a/nn_save_functions.h b/nn_save_functions.h new file mode 100644 index 0000000..81c153e --- /dev/null +++ b/nn_save_functions.h @@ -0,0 +1,45 @@ +/**************************************************************************** + * Copyright (C) 2015 + * by Dimok + * + * This software is provided 'as-is', without any express or implied + * warranty. In no event will the authors be held liable for any + * damages arising from the use of this software. + * + * Permission is granted to anyone to use this software for any + * purpose, including commercial applications, and to alter it and + * redistribute it freely, subject to the following restrictions: + * + * 1. The origin of this software must not be misrepresented; you + * must not claim that you wrote the original software. If you use + * this software in a product, an acknowledgment in the product + * documentation would be appreciated but is not required. + * + * 2. Altered source versions must be plainly marked as such, and + * must not be misrepresented as being the original software. + * + * 3. This notice may not be removed or altered from any source + * distribution. + ***************************************************************************/ +#ifndef __NN_SAVE_FUNCTIONS_H_ +#define __NN_SAVE_FUNCTIONS_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +extern u32 nn_save_handle; + +extern void(*SAVEInit)(void); +extern int(*SAVEOpenFile)(void *pClient, void *pCmd, unsigned char user, const char *path, const char *mode, int *fd, int errHandling); + +void InitSaveFunctionPointers(void); +void InitAcquireSave(void); + +#ifdef __cplusplus +} +#endif + +#endif // __NN_SAVE_FUNCTIONS_H_ diff --git a/os_functions.c b/os_functions.c index 36d50ab..c993486 100644 --- a/os_functions.c +++ b/os_functions.c @@ -40,21 +40,31 @@ EXPORT_DECL(s32, OSGetSecurityLevel, void); //!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- //! Thread functions //!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -EXPORT_DECL(s32, OSCreateThread, void *thread, s32 (*callback)(s32, void*), s32 argc, void *args, u32 stack, u32 stack_size, s32 priority, u32 attr); -EXPORT_DECL(s32, OSResumeThread, void *thread); -EXPORT_DECL(s32, OSSuspendThread, void *thread); -EXPORT_DECL(s32, OSIsThreadTerminated, void *thread); -EXPORT_DECL(s32, OSIsThreadSuspended, void *thread); -EXPORT_DECL(s32, OSSetThreadPriority, void * thread, s32 priority); -EXPORT_DECL(s32, OSJoinThread, void * thread, s32 * ret_val); -EXPORT_DECL(void, OSDetachThread, void * thread); -EXPORT_DECL(void *,OSGetCurrentThread,void); -EXPORT_DECL(const char *,OSGetThreadName,void * thread); +EXPORT_DECL(s32, OSCreateThread, OSThread *thread, s32 (*callback)(s32, void*), s32 argc, void *args, u32 stack, u32 stack_size, s32 priority, u32 attr); +EXPORT_DECL(s32, OSResumeThread, OSThread *thread); +EXPORT_DECL(s32, OSSuspendThread, OSThread *thread); +EXPORT_DECL(s32, OSIsThreadTerminated, OSThread *thread); +EXPORT_DECL(s32, OSIsThreadSuspended, OSThread *thread); +EXPORT_DECL(s32, OSSetThreadPriority, OSThread * thread, s32 priority); +EXPORT_DECL(s32, OSJoinThread, OSThread * thread, s32 * ret_val); +EXPORT_DECL(void, OSDetachThread, OSThread * thread); +EXPORT_DECL(OSThread *,OSGetCurrentThread,void); +EXPORT_DECL(const char *,OSGetThreadName,OSThread * thread); +EXPORT_DECL(void ,OSGetActiveThreadLink,OSThread * thread, void* link); +EXPORT_DECL(u32 ,OSGetThreadAffinity,OSThread * thread); +EXPORT_DECL(s32 ,OSGetThreadPriority,OSThread * thread); +EXPORT_DECL(void ,OSSetThreadName,OSThread * thread, const char *name); EXPORT_DECL(void, OSSleepTicks, u64 ticks); EXPORT_DECL(u64, OSGetTick, void); EXPORT_DECL(u64, OSGetTime, void); EXPORT_DECL(void, OSTicksToCalendarTime, u64 time, OSCalendarTime * calendarTime); +//!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +//! Message functions +//!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +EXPORT_DECL(void,OSInitMessageQueue,OSMessageQueue *queue, OSMessage *messages, s32 size); +EXPORT_DECL(u32,OSSendMessage,OSMessageQueue *queue, OSMessage *message, s32 flags); +EXPORT_DECL(u32,OSReceiveMessage,OSMessageQueue *queue, OSMessage *message, s32 flags); //!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- //! Mutex functions @@ -71,7 +81,9 @@ EXPORT_DECL(u64, OSGetTitleID, void); EXPORT_DECL(void, OSGetArgcArgv, s32* argc, char*** argv); EXPORT_DECL(void, __Exit, void); EXPORT_DECL(void, OSFatal, const char* msg); -EXPORT_DECL(void, OSSetExceptionCallback, u8 exceptionType, exception_callback newCallback); +EXPORT_DECL(void *, OSSetExceptionCallback, u8 exceptionType, exception_callback newCallback); +EXPORT_DECL(void *, OSSetExceptionCallbackEx, s32 unkwn, u8 exceptionType, exception_callback newCallback); +EXPORT_DECL(void , OSLoadContext, OSContext * context); EXPORT_DECL(void, DCFlushRange, const void *addr, u32 length); EXPORT_DECL(void, ICInvalidateRange, const void *addr, u32 length); EXPORT_DECL(void*, OSEffectiveToPhysical, const void*); @@ -131,6 +143,7 @@ EXPORT_DECL(void, addr_PrepareTitle_hook, void); //! Other function addresses //!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- EXPORT_DECL(void, DCInvalidateRange, void *buffer, u32 length); +EXPORT_DECL(s32, OSDynLoad_GetModuleName, s32 handle, char *name_buffer, s32 *name_buffer_size); //!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- //! Energy Saver functions @@ -214,6 +227,8 @@ void InitOSFunctionPointers(void) OS_FIND_EXPORT(coreinit_handle, OSGetTitleID); OS_FIND_EXPORT(coreinit_handle, OSGetArgcArgv); OS_FIND_EXPORT(coreinit_handle, OSSetExceptionCallback); + OS_FIND_EXPORT(coreinit_handle, OSSetExceptionCallbackEx); + OS_FIND_EXPORT(coreinit_handle, OSLoadContext); OS_FIND_EXPORT(coreinit_handle, DCFlushRange); OS_FIND_EXPORT(coreinit_handle, ICInvalidateRange); OS_FIND_EXPORT(coreinit_handle, OSEffectiveToPhysical); @@ -243,11 +258,23 @@ void InitOSFunctionPointers(void) OS_FIND_EXPORT(coreinit_handle, OSDetachThread); OS_FIND_EXPORT(coreinit_handle, OSGetCurrentThread); OS_FIND_EXPORT(coreinit_handle, OSGetThreadName); + OS_FIND_EXPORT(coreinit_handle, OSGetActiveThreadLink); + OS_FIND_EXPORT(coreinit_handle, OSGetThreadAffinity); + OS_FIND_EXPORT(coreinit_handle, OSGetThreadPriority); + OS_FIND_EXPORT(coreinit_handle, OSSetThreadName); + OS_FIND_EXPORT(coreinit_handle, OSSleepTicks); OS_FIND_EXPORT(coreinit_handle, OSGetTick); OS_FIND_EXPORT(coreinit_handle, OSGetTime); OS_FIND_EXPORT(coreinit_handle, OSTicksToCalendarTime); + //!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + //! Message functions + //!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + OS_FIND_EXPORT(coreinit_handle, OSInitMessageQueue); + OS_FIND_EXPORT(coreinit_handle, OSSendMessage); + OS_FIND_EXPORT(coreinit_handle, OSReceiveMessage); + //!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- //! Mutex functions //!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- @@ -285,6 +312,7 @@ void InitOSFunctionPointers(void) //! Other function addresses //!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- OS_FIND_EXPORT(coreinit_handle, DCInvalidateRange); + OS_FIND_EXPORT(coreinit_handle, OSDynLoad_GetModuleName); //!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- //! Energy Saver functions diff --git a/os_functions.h b/os_functions.h index 13b10c4..e1888cf 100644 --- a/os_functions.h +++ b/os_functions.h @@ -79,22 +79,34 @@ extern s32 (* OSGetSecurityLevel)(void); //!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- //! Thread functions //!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -extern s32 (* OSCreateThread)(void *thread, s32 (*callback)(s32, void*), s32 argc, void *args, u32 stack, u32 stack_size, s32 priority, u32 attr); -extern s32 (* OSResumeThread)(void *thread); -extern s32 (* OSSuspendThread)(void *thread); -extern s32 (* OSIsThreadTerminated)(void *thread); -extern s32 (* OSIsThreadSuspended)(void *thread); -extern s32 (* OSJoinThread)(void * thread, s32 * ret_val); -extern s32 (* OSSetThreadPriority)(void * thread, s32 priority); -extern void (* OSDetachThread)(void * thread); +extern s32 (* OSCreateThread)(OSThread *thread, s32 (*callback)(s32, void*), s32 argc, void *args, u32 stack, u32 stack_size, s32 priority, u32 attr); +extern s32 (* OSResumeThread)(OSThread *thread); +extern s32 (* OSSuspendThread)(OSThread *thread); +extern s32 (* OSIsThreadTerminated)(OSThread *thread); +extern s32 (* OSIsThreadSuspended)(OSThread *thread); +extern s32 (* OSJoinThread)(OSThread * thread, s32 * ret_val); +extern s32 (* OSSetThreadPriority)(OSThread * thread, s32 priority); +extern void (* OSDetachThread)(OSThread * thread); +extern OSThread * (* OSGetCurrentThread)(void); +extern const char * (* OSGetThreadName)(OSThread * thread); + +extern void (* OSGetActiveThreadLink)(OSThread * thread, void* link); +extern u32 (* OSGetThreadAffinity)(OSThread * thread); +extern s32 (* OSGetThreadPriority)(OSThread * thread); +extern void (* OSSetThreadName)(OSThread * thread, const char *name); -extern void * (* OSGetCurrentThread)(void); -extern const char * (* OSGetThreadName)(void * thread); extern void (* OSSleepTicks)(u64 ticks); extern u64 (* OSGetTick)(void); extern u64 (* OSGetTime)(void); extern void (*OSTicksToCalendarTime)(u64 time, OSCalendarTime *calendarTime); +//!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +//! Message functions +//!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +extern void(* OSInitMessageQueue)(OSMessageQueue *queue, OSMessage *messages, s32 size); +extern u32(* OSSendMessage)(OSMessageQueue *queue, OSMessage *message, s32 flags); +extern u32(* OSReceiveMessage)(OSMessageQueue *queue, OSMessage *message, s32 flags); + //!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- //! Mutex functions //!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- @@ -125,8 +137,10 @@ extern s32 (*OSScreenPutFontEx)(u32 bufferNum, u32 posX, u32 posY, const char * extern s32 (*OSScreenEnableEx)(u32 bufferNum, s32 enable); extern u32 (*OSScreenPutPixelEx)(u32 bufferNum, u32 posX, u32 posY, u32 color); -typedef unsigned char (*exception_callback)(void * interruptedContext); -extern void (* OSSetExceptionCallback)(u8 exceptionType, exception_callback newCallback); +typedef unsigned char (*exception_callback)(OSContext * interruptedContext); +extern void * (* OSSetExceptionCallback)(u8 exceptionType, exception_callback newCallback); +extern void * (* OSSetExceptionCallbackEx)(s32 unknwn,u8 exceptionType, exception_callback newCallback); +extern void (* OSLoadContext)(OSContext * context); //!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- //! Memory functions @@ -172,6 +186,7 @@ extern void (* addr_PrepareTitle_hook)(void); //! Other function addresses //!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- extern void (*DCInvalidateRange)(void *buffer, u32 length); +extern s32 (*OSDynLoad_GetModuleName)(s32 handle, char *name_buffer, s32 *name_buffer_size); //!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- //! Energy Saver functions diff --git a/os_types.h b/os_types.h index aaa18fe..0440c4b 100644 --- a/os_types.h +++ b/os_types.h @@ -7,6 +7,116 @@ extern "C" { #include + +#define OS_MESSAGE_NOBLOCK 0 +#define OS_MESSAGE_BLOCK 1 + +#define OS_EXCEPTION_DSI 2 +#define OS_EXCEPTION_ISI 3 +#define OS_EXCEPTION_PROGRAM 6 +#define OS_EXCEPTION_MODE_THREAD 1 +#define OS_EXCEPTION_MODE_GLOBAL_ALL_CORES 4 + +typedef struct OSThread_ OSThread; + +struct OSThreadLink { + OSThread *next; + OSThread *prev; +}; + +typedef struct OSThreadQueue_ { + OSThread *head; + OSThread *tail; + void *parentStruct; + u32 reserved; +} OSThreadQueue; + +typedef struct OSMessage_ { + u32 message; + u32 data0; + u32 data1; + u32 data2; +}OSMessage; + +typedef struct OSMessageQueue_ { + u32 tag; + char *name; + u32 reserved; + + OSThreadQueue sendQueue; + OSThreadQueue recvQueue; + OSMessage *messages; + int msgCount; + int firstIndex; + int usedCount; +} OSMessageQueue; + +typedef struct OSContext_ { + char tag[8]; + + u32 gpr[32]; + + u32 cr; + u32 lr; + u32 ctr; + u32 xer; + + u32 srr0; + u32 srr1; + + u32 ex0; + u32 ex1; + + u32 exception_type; + u32 reserved; + + double fpscr; + double fpr[32]; + + u16 spinLockCount; + u16 state; + + u32 gqr[8]; + u32 pir; + double psf[32]; + + u64 coretime[3]; + u64 starttime; + + u32 error; + u32 attributes; + + u32 pmc1; + u32 pmc2; + u32 pmc3; + u32 pmc4; + u32 mmcr0; + u32 mmcr1; +} OSContext; + +typedef int (*ThreadFunc)(int argc, void *argv); + +struct OSThread_ { + OSContext context; + + u32 txtTag; + u8 state; + u8 attr; + + short threadId; + int suspend; + int priority; + + char _[0x394 - 0x330]; + + void *stackBase; + void *stackEnd; + + ThreadFunc entryPoint; + + char _3A0[0x6A0 - 0x3A0]; +}; + typedef struct _OSCalendarTime { int sec; int min; @@ -20,6 +130,7 @@ typedef struct _OSCalendarTime { int usec; } OSCalendarTime; + #ifdef __cplusplus } #endif diff --git a/socket_functions.c b/socket_functions.c index 06aa769..e9dbb44 100644 --- a/socket_functions.c +++ b/socket_functions.c @@ -28,7 +28,8 @@ u32 hostIpAddress = 0; u32 nsysnet_handle __attribute__((section(".data"))) = 0; -EXPORT_DECL(void, socket_lib_init, void); +EXPORT_DECL(s32, socket_lib_init, void); +EXPORT_DECL(s32, socket_lib_finish, void); EXPORT_DECL(s32, socket, s32 domain, s32 type, s32 protocol); EXPORT_DECL(s32, socketclose, s32 s); EXPORT_DECL(s32, connect, s32 s, void *addr, s32 addrlen); @@ -42,6 +43,7 @@ EXPORT_DECL(s32, sendto, s32 s, const void *buffer, s32 size, s32 flags, const s EXPORT_DECL(s32, setsockopt, s32 s, s32 level, s32 optname, void *optval, s32 optlen); EXPORT_DECL(char *, inet_ntoa, struct in_addr in); EXPORT_DECL(s32, inet_aton, const char *cp, struct in_addr *inp); +EXPORT_DECL(s32, socketlasterr, void); EXPORT_DECL(s32, NSSLWrite, s32 connection, const void* buf, s32 len,s32 * written); EXPORT_DECL(s32, NSSLRead, s32 connection, const void* buf, s32 len,s32 * read); @@ -70,6 +72,8 @@ void InitSocketFunctionPointers(void) OSDynLoad_FindExport(nn_ac_handle, 0, "ACGetAssignedAddress",&ACGetAssignedAddress); OS_FIND_EXPORT(nsysnet_handle, socket_lib_init); + OS_FIND_EXPORT(nsysnet_handle, socket_lib_finish); + OS_FIND_EXPORT(nsysnet_handle, socketlasterr); OS_FIND_EXPORT(nsysnet_handle, socket); OS_FIND_EXPORT(nsysnet_handle, socketclose); OS_FIND_EXPORT(nsysnet_handle, connect); diff --git a/socket_functions.h b/socket_functions.h index 0ab78f7..f2c4405 100644 --- a/socket_functions.h +++ b/socket_functions.h @@ -80,7 +80,8 @@ struct sockaddr void InitSocketFunctionPointers(void); void InitAcquireSocket(void); -extern void (*socket_lib_init)(void); +extern s32 (*socket_lib_init)(void); +extern s32 (*socket_lib_finish)(void); extern s32 (*socket)(s32 domain, s32 type, s32 protocol); extern s32 (*socketclose)(s32 s); extern s32 (*connect)(s32 s, void *addr, s32 addrlen); @@ -90,6 +91,7 @@ extern s32 (*accept)(s32 s,struct sockaddr *addr,s32 *addrlen); extern s32 (*send)(s32 s, const void *buffer, s32 size, s32 flags); extern s32 (*recv)(s32 s, void *buffer, s32 size, s32 flags); extern s32 (*recvfrom)(s32 sockfd, void *buf, s32 len, s32 flags,struct sockaddr *src_addr, s32 *addrlen); +extern s32 (*socketlasterr)(void); extern s32 (*sendto)(s32 s, const void *buffer, s32 size, s32 flags, const struct sockaddr *dest, s32 dest_len); extern s32 (*setsockopt)(s32 s, s32 level, s32 optname, void *optval, s32 optlen);