diff --git a/src/include/bsdsocket.h b/src/include/bsdsocket.h index 9cdef9f9..baadb04c 100644 --- a/src/include/bsdsocket.h +++ b/src/include/bsdsocket.h @@ -1,4 +1,4 @@ - /* +/* * UAE - The Un*x Amiga Emulator * * bsdsocket.library emulation @@ -13,8 +13,8 @@ #include "uae/types.h" #include "thread.h" -extern int init_socket_layer (void); -extern void deinit_socket_layer (void); +extern int init_socket_layer(void); +extern void deinit_socket_layer(void); /* initial size of per-process descriptor table (currently fixed) */ #define DEFAULT_DTABLE_SIZE 64 @@ -32,40 +32,41 @@ extern void deinit_socket_layer (void); #endif /* allocated and maintained on a per-task basis */ -struct socketbase { - struct socketbase *next; - struct socketbase *nextsig; /* queue for tasks to signal */ +struct socketbase +{ + struct socketbase* next; + struct socketbase* nextsig; /* queue for tasks to signal */ - uaecptr sysbase; - int dosignal; /* signal flag */ - uae_u32 ownertask; /* task that opened the library */ - int signal; /* signal allocated for that task */ - int sb_errno, sb_herrno; /* errno and herrno variables */ - uae_u32 errnoptr, herrnoptr; /* pointers */ - uae_u32 errnosize, herrnosize; /* pinter sizes */ - int dtablesize; /* current descriptor/flag etc. table size */ - SOCKET_TYPE *dtable; /* socket descriptor table */ - int *ftable; /* socket flags */ - int resultval; - uae_u32 hostent; /* pointer to the current hostent structure (Amiga mem) */ - uae_u32 hostentsize; - uae_u32 protoent; /* pointer to the current protoent structure (Amiga mem) */ - uae_u32 protoentsize; - uae_u32 servent; /* pointer to the current servent structure (Amiga mem) */ - uae_u32 serventsize; - uae_u32 sigstosend; - uae_u32 eventsigs; /* EVENT sigmask */ - uae_u32 eintrsigs; /* EINTR sigmask */ - int eintr; /* interrupted by eintrsigs? */ - int eventindex; /* current socket looked at by GetSocketEvents() to prevent starvation */ + uaecptr sysbase; + int dosignal; /* signal flag */ + uae_u32 ownertask; /* task that opened the library */ + int signal; /* signal allocated for that task */ + int sb_errno, sb_herrno; /* errno and herrno variables */ + uae_u32 errnoptr, herrnoptr; /* pointers */ + uae_u32 errnosize, herrnosize; /* pinter sizes */ + int dtablesize; /* current descriptor/flag etc. table size */ + SOCKET_TYPE* dtable; /* socket descriptor table */ + int* ftable; /* socket flags */ + int resultval; + uae_u32 hostent; /* pointer to the current hostent structure (Amiga mem) */ + uae_u32 hostentsize; + uae_u32 protoent; /* pointer to the current protoent structure (Amiga mem) */ + uae_u32 protoentsize; + uae_u32 servent; /* pointer to the current servent structure (Amiga mem) */ + uae_u32 serventsize; + uae_u32 sigstosend; + uae_u32 eventsigs; /* EVENT sigmask */ + uae_u32 eintrsigs; /* EINTR sigmask */ + int eintr; /* interrupted by eintrsigs? */ + int eventindex; /* current socket looked at by GetSocketEvents() to prevent starvation */ uae_u32 logstat; uae_u32 logptr; uae_u32 logmask; uae_u32 logfacility; uaecptr fdcallback; - unsigned int *mtable; /* window messages allocated for asynchronous event notification */ - /* host-specific fields below */ + unsigned int* mtable; /* window messages allocated for asynchronous event notification */ + /* host-specific fields below */ #ifdef _WIN32 SOCKET_TYPE sockAbort; /* for aborting WinSock2 select() (damn Microsoft) */ SOCKET_TYPE sockAsync; /* for aborting WSBAsyncSelect() in window message handler */ @@ -73,32 +74,35 @@ struct socketbase { void *hAsyncTask; /* async task handle */ void *hEvent; /* thread event handle */ #else - uae_sem_t sem; /* semaphore to notify the socket thread of work */ - uae_thread_id thread; /* socket thread */ - int sockabort[2]; /* pipe used to tell the thread to abort a select */ - int action; - int s; /* for accept */ - uae_u32 name; /* For gethostbyname */ - uae_u32 a_addr; /* gethostbyaddr, accept */ - uae_u32 a_addrlen; /* for gethostbyaddr, accept */ - uae_u32 flags; - void *buf; - uae_u32 len; - uae_u32 to, tolen, from, fromlen; - int nfds; - uae_u32 sets [3]; - uae_u32 timeout; - uae_u32 sigmp; + uae_sem_t sem; /* semaphore to notify the socket thread of work */ + uae_thread_id thread; /* socket thread */ + int sockabort[2]; /* pipe used to tell the thread to abort a select */ + int action; + int s; /* for accept */ + uae_u32 name; /* For gethostbyname */ + uae_u32 a_addr; /* gethostbyaddr, accept */ + uae_u32 a_addrlen; /* for gethostbyaddr, accept */ + uae_u32 flags; + void* buf; + uae_u32 len; + uae_u32 to, tolen, from, fromlen; + int nfds; + uae_u32 sets[3]; + uae_u32 timeout; + uae_u32 sigmp; +#endif +#ifdef AMIBERRY + TrapContext* context; #endif - TrapContext *context; }; #define LIBRARY_SIZEOF 36 -struct UAEBSDBase { - uae_u8 dummy[LIBRARY_SIZEOF]; - struct socketbase *sb; - uae_u8 scratchbuf[SCRATCHBUFSIZE]; +struct UAEBSDBase +{ + uae_u8 dummy[LIBRARY_SIZEOF]; + struct socketbase* sb; + uae_u8 scratchbuf[SCRATCHBUFSIZE]; }; /* socket flags */ @@ -129,79 +133,79 @@ struct UAEBSDBase { #define FDCB_ALLOC 1 #define FDCB_CHECK 2 -uae_u32 addstr(TrapContext *ctx, uae_u32 * dst, const TCHAR *src); -uae_u32 addstr_ansi(TrapContext *ctx, uae_u32 * dst, const uae_char *src); -uae_u32 strncpyha(TrapContext *ctx, uae_u32 dst, const uae_char *src, int size); -uae_u32 addmem(TrapContext *ctx, uae_u32 * dst, const uae_char *src, int len); +uae_u32 addstr(TrapContext* ctx, uae_u32* dst, const TCHAR* src); +uae_u32 addstr_ansi(TrapContext* ctx, uae_u32* dst, const uae_char* src); +uae_u32 strncpyha(TrapContext* ctx, uae_u32 dst, const uae_char* src, int size); +uae_u32 addmem(TrapContext* ctx, uae_u32* dst, const uae_char* src, int len); #define SB struct socketbase *sb extern void bsdsocklib_seterrno(TrapContext*, SB, int); extern void bsdsocklib_setherrno(TrapContext*, SB, int); -extern void sockabort (SB); +extern void sockabort(SB); -extern void addtosigqueue (SB, int); -extern void removefromsigqueue (SB); -extern void sigsockettasks (void); -extern void locksigqueue (void); -extern void unlocksigqueue (void); +extern void addtosigqueue(SB, int); +extern void removefromsigqueue(SB); +extern void sigsockettasks(void); +extern void locksigqueue(void); +extern void unlocksigqueue(void); extern bool checksd(TrapContext*, SB, int sd); -extern void setsd(TrapContext*, SB, int , SOCKET_TYPE); -extern int getsd (TrapContext*, SB, SOCKET_TYPE); -extern SOCKET_TYPE getsock (TrapContext*, SB, int); -extern void releasesock (TrapContext*, SB, int); +extern void setsd(TrapContext*, SB, int, SOCKET_TYPE); +extern int getsd(TrapContext*, SB, SOCKET_TYPE); +extern SOCKET_TYPE getsock(TrapContext*, SB, int); +extern void releasesock(TrapContext*, SB, int); -extern void waitsig (TrapContext *context, SB); -extern void cancelsig (TrapContext *context, SB); +extern void waitsig(TrapContext* context, SB); +extern void cancelsig(TrapContext* context, SB); -extern int host_sbinit (TrapContext*, SB); -extern void host_sbcleanup (SB); -extern void host_sbreset (void); -extern void host_closesocketquick (SOCKET_TYPE); +extern int host_sbinit(TrapContext*, SB); +extern void host_sbcleanup(SB); +extern void host_sbreset(void); +extern void host_closesocketquick(SOCKET_TYPE); -extern int host_dup2socket (TrapContext *, SB, int, int); -extern int host_socket (TrapContext *, SB, int, int, int); -extern uae_u32 host_bind (TrapContext *, SB, uae_u32, uae_u32, uae_u32); -extern uae_u32 host_listen (TrapContext *, SB, uae_u32, uae_u32); -extern void host_accept (TrapContext *, SB, uae_u32, uae_u32, uae_u32); -extern void host_sendto (TrapContext *, SB, uae_u32, uae_u32, uae_u8*, uae_u32, uae_u32, uae_u32, uae_u32); -extern void host_recvfrom (TrapContext *, SB, uae_u32, uae_u32, uae_u8*, uae_u32, uae_u32, uae_u32, uae_u32); -extern uae_u32 host_shutdown (SB, uae_u32, uae_u32); -extern void host_setsockopt (SB, uae_u32, uae_u32, uae_u32, uae_u32, uae_u32); -extern uae_u32 host_getsockopt (TrapContext *, SB, uae_u32, uae_u32, uae_u32, uae_u32, uae_u32); -extern uae_u32 host_getsockname (TrapContext *, SB, uae_u32, uae_u32, uae_u32); -extern uae_u32 host_getpeername (TrapContext *, SB, uae_u32, uae_u32, uae_u32); -extern uae_u32 host_IoctlSocket (TrapContext *, SB, uae_u32, uae_u32, uae_u32); -extern int host_CloseSocket (TrapContext *, SB, int); -extern void host_connect (TrapContext *, SB, uae_u32, uae_u32, uae_u32); -extern void host_WaitSelect (TrapContext *, SB, uae_u32, uae_u32, uae_u32, uae_u32, uae_u32, uae_u32); -extern uae_u32 host_SetSocketSignals (void); -extern uae_u32 host_getdtablesize (void); -extern uae_u32 host_ObtainSocket (void); -extern uae_u32 host_ReleaseSocket (void); -extern uae_u32 host_ReleaseCopyOfSocket (void); -extern uae_u32 host_Inet_NtoA(TrapContext *ctx, SB, uae_u32); -extern uae_u32 host_inet_addr(TrapContext *ctx, uae_u32); -extern uae_u32 host_Inet_LnaOf (void); -extern uae_u32 host_Inet_NetOf (void); -extern uae_u32 host_Inet_MakeAddr (void); -extern uae_u32 host_inet_network (void); -extern void host_gethostbynameaddr (TrapContext *, SB, uae_u32, uae_u32, long); -extern uae_u32 host_getnetbyname (void); -extern uae_u32 host_getnetbyaddr (void); -extern void host_getservbynameport (TrapContext *, SB, uae_u32, uae_u32, uae_u32); -extern void host_getprotobyname (TrapContext *, SB, uae_u32); -extern void host_getprotobynumber (TrapContext *, SB, uae_u32); -extern uae_u32 host_vsyslog (void); -extern uae_u32 host_Dup2Socket (void); -extern uae_u32 host_gethostname(TrapContext *ctx, uae_u32, uae_u32); -extern uae_u32 callfdcallback(TrapContext *context, SB, uae_u32 fd, uae_u32 action); +extern int host_dup2socket(TrapContext*, SB, int, int); +extern int host_socket(TrapContext*, SB, int, int, int); +extern uae_u32 host_bind(TrapContext*, SB, uae_u32, uae_u32, uae_u32); +extern uae_u32 host_listen(TrapContext*, SB, uae_u32, uae_u32); +extern void host_accept(TrapContext*, SB, uae_u32, uae_u32, uae_u32); +extern void host_sendto(TrapContext*, SB, uae_u32, uae_u32, uae_u8*, uae_u32, uae_u32, uae_u32, uae_u32); +extern void host_recvfrom(TrapContext*, SB, uae_u32, uae_u32, uae_u8*, uae_u32, uae_u32, uae_u32, uae_u32); +extern uae_u32 host_shutdown(SB, uae_u32, uae_u32); +extern void host_setsockopt(SB, uae_u32, uae_u32, uae_u32, uae_u32, uae_u32); +extern uae_u32 host_getsockopt(TrapContext*, SB, uae_u32, uae_u32, uae_u32, uae_u32, uae_u32); +extern uae_u32 host_getsockname(TrapContext*, SB, uae_u32, uae_u32, uae_u32); +extern uae_u32 host_getpeername(TrapContext*, SB, uae_u32, uae_u32, uae_u32); +extern uae_u32 host_IoctlSocket(TrapContext*, SB, uae_u32, uae_u32, uae_u32); +extern int host_CloseSocket(TrapContext*, SB, int); +extern void host_connect(TrapContext*, SB, uae_u32, uae_u32, uae_u32); +extern void host_WaitSelect(TrapContext*, SB, uae_u32, uae_u32, uae_u32, uae_u32, uae_u32, uae_u32); +extern uae_u32 host_SetSocketSignals(void); +extern uae_u32 host_getdtablesize(void); +extern uae_u32 host_ObtainSocket(void); +extern uae_u32 host_ReleaseSocket(void); +extern uae_u32 host_ReleaseCopyOfSocket(void); +extern uae_u32 host_Inet_NtoA(TrapContext* ctx, SB, uae_u32); +extern uae_u32 host_inet_addr(TrapContext* ctx, uae_u32); +extern uae_u32 host_Inet_LnaOf(void); +extern uae_u32 host_Inet_NetOf(void); +extern uae_u32 host_Inet_MakeAddr(void); +extern uae_u32 host_inet_network(void); +extern void host_gethostbynameaddr(TrapContext*, SB, uae_u32, uae_u32, long); +extern uae_u32 host_getnetbyname(void); +extern uae_u32 host_getnetbyaddr(void); +extern void host_getservbynameport(TrapContext*, SB, uae_u32, uae_u32, uae_u32); +extern void host_getprotobyname(TrapContext*, SB, uae_u32); +extern void host_getprotobynumber(TrapContext*, SB, uae_u32); +extern uae_u32 host_vsyslog(void); +extern uae_u32 host_Dup2Socket(void); +extern uae_u32 host_gethostname(TrapContext* ctx, uae_u32, uae_u32); +extern uae_u32 callfdcallback(TrapContext* context, SB, uae_u32 fd, uae_u32 action); -extern uaecptr bsdlib_startup (TrapContext*, uaecptr); -extern void bsdlib_install (void); -extern void bsdlib_reset (void); +extern uaecptr bsdlib_startup(TrapContext*, uaecptr); +extern void bsdlib_install(void); +extern void bsdlib_reset(void); void bsdsock_fake_int_handler(void); diff --git a/src/include/uae/mman.h b/src/include/uae/mman.h index fd63c469..dfc9db7d 100644 --- a/src/include/uae/mman.h +++ b/src/include/uae/mman.h @@ -3,6 +3,29 @@ #include "uae/types.h" +#define MAX_SHMID 256 + +typedef int uae_key_t; + +/* One shmid data structure for each shared memory segment in the system. */ +struct uae_shmid_ds { + uae_key_t key; + uae_u32 size; + uae_u32 rosize; + void* addr; + TCHAR name[MAX_DPATH]; + void* attached; + int mode; + void* natmembase; + bool fake; + int maprom; +}; + +void* uae_shmat(addrbank* ab, int shmid, void* shmaddr, int shmflg, struct uae_mman_data* md); +int uae_shmdt(const void* shmaddr); +int uae_shmget(uae_key_t key, addrbank* ab, int shmflg); +int uae_shmctl(int shmid, int cmd, struct uae_shmid_ds* buf); + #define UAE_IPC_PRIVATE 0x01 #define UAE_IPC_RMID 0x02 #define UAE_IPC_CREAT 0x04 @@ -14,6 +37,7 @@ struct uae_mman_data uae_u32 size; bool readonly; uae_u32 readonlysize; + bool maprom; bool directsupport; bool hasbarrier; };