From 1645cf9ad4b94fc3544799af51df07b0eddee64e Mon Sep 17 00:00:00 2001 From: John Bintz Date: Wed, 17 Apr 2024 19:37:05 -0400 Subject: [PATCH] Use null-terminated IP address for socket addr lookup --- src/BSDSocket.s | 27 +++++++++++++++++++-------- src/Constants.s | 3 +-- 2 files changed, 20 insertions(+), 10 deletions(-) diff --git a/src/BSDSocket.s b/src/BSDSocket.s index 62f69ec..53d9e16 100644 --- a/src/BSDSocket.s +++ b/src/BSDSocket.s @@ -366,14 +366,18 @@ _ToSockaddr_PortOK: MOVE.L sockaddr_ram-MB(A3),A0 ADD.L D3,A0 ; A0 contains our offset in ram - MOVE.B #len_sockaddr_in,sockaddr_in_sin_len(A0) - MOVE.B #AF_INET,sockaddr_in_sin_family(A0) - MOVE.W D2,sockaddr_in_sin_port(A0) + MOVEM.L A1-A3/D3,-(SP) - MOVEM.L A0-A3/D3,-(SP) + MOVE.L D1,A1 ; ip string address + MOVE.W (A1)+,D3 ; string length - MOVE.L D1,A0 ; ip address - ADDQ #2,A0 ; string data starts 2 bytes in + ; temporarily store a null-terminated copy of the ip string in A0 + MOVE.L A0,A2 + SUBQ #1,D3 ; DBRA loop runs D3 + 1 times +_ToSockaddr_CopyIPString: + MOVE.B (A1)+,(A2)+ + DBRA D3,_ToSockaddr_CopyIPString + MOVE.B #0,(A2) ; end of string ; if the string contains "INADDR_ANY", we use that value instead MOVE.L A0,A1 @@ -397,8 +401,15 @@ _ToSockaddr_ParseIPAddress: CALLLIB inet_addr _ToSockaddr_DoneParsing: - MOVEM.L (SP)+,A0-A3/D3 - MOVE.L D0,sockaddr_in_sin_addr(A0) + MOVEM.L (SP)+,A1-A3/D3 + + ; create struct sockaddr_in + MOVE.W #AF_INET,sockaddr_in_sin_family(A0) + MOVE.W D2,sockaddr_in_sin_port(A0) + LEA sockaddr_in_sin_addr(A0),A3 + MOVE.L D0,(A3)+ + CLR.L (A3)+ + CLR.L (A3)+ MOVE.L A0,D0 MOVEM.L (SP)+,A0/A3/D3 diff --git a/src/Constants.s b/src/Constants.s index 331a84d..d9494ab 100644 --- a/src/Constants.s +++ b/src/Constants.s @@ -16,8 +16,7 @@ SO_REUSEADDR EQU $4 MAX_SOCKETS EQU 64 len_sockaddr_in EQU 16 -sockaddr_in_sin_len EQU 0 -sockaddr_in_sin_family EQU 1 +sockaddr_in_sin_family EQU 0 sockaddr_in_sin_port EQU 2 sockaddr_in_sin_addr EQU 4