SDL_net: SDLNet_RefAddress should return the address, for convenience.

From 7f5e542faef946632950300f3ab6f94d1017ead9 Mon Sep 17 00:00:00 2001
From: "Ryan C. Gordon" <[EMAIL REDACTED]>
Date: Sun, 13 Aug 2023 19:07:17 -0400
Subject: [PATCH] SDLNet_RefAddress should return the address, for convenience.

---
 SDL_net.c | 12 +++++-------
 SDL_net.h |  2 +-
 2 files changed, 6 insertions(+), 8 deletions(-)

diff --git a/SDL_net.c b/SDL_net.c
index a77d402..afbc962 100644
--- a/SDL_net.c
+++ b/SDL_net.c
@@ -373,11 +373,12 @@ const char *SDLNet_GetAddressString(SDLNet_Address *addr)
     return addr ? (const char *) SDL_AtomicGetPtr((void **) &addr->human_readable) : NULL;
 }
 
-void SDLNet_RefAddress(SDLNet_Address *addr)
+SDLNet_Address *SDLNet_RefAddress(SDLNet_Address *addr)
 {
     if (addr) {
         SDL_AtomicIncRef(&addr->refcount);
     }
+    return addr;
 }
 
 void SDLNet_UnrefAddress(SDLNet_Address *addr)
@@ -766,8 +767,7 @@ SDLNet_Address *SDLNet_GetStreamSocketAddress(SDLNet_StreamSocket *sock)
         SDL_InvalidParamError("sock");
         return NULL;
     }
-    SDLNet_RefAddress(sock->addr);
-    return sock->addr;
+    return SDLNet_RefAddress(sock->addr);
 }
 
 static void UpdateStreamSocketSimulatedFailure(SDLNet_StreamSocket *sock)
@@ -1119,10 +1119,9 @@ int SDLNet_SendDatagram(SDLNet_DatagramSocket *sock, SDLNet_Address *addr, Uint1
     dgram->buf = (Uint8 *) (dgram+1);
     SDL_memcpy(dgram->buf, buf, buflen);
 
-    dgram->addr = addr;
+    dgram->addr = SDLNet_RefAddress(addr);
     dgram->port = port;
     dgram->buflen = buflen;
-    SDLNet_RefAddress(addr);
 
     sock->pending_output[sock->pending_output_len++] = dgram;
 
@@ -1226,10 +1225,9 @@ int SDLNet_ReceiveDatagram(SDLNet_DatagramSocket *sock, SDLNet_Datagram **dgram)
 
     dg->buf = (Uint8 *) (dg+1);
     SDL_memcpy(dg->buf, sock->recv_buffer, br);
-    dg->addr = fromaddr;
+    dg->addr = SDLNet_RefAddress(fromaddr);
     dg->port = (Uint16) SDL_atoi(portbuf);
     dg->buflen = br;
-    SDLNet_RefAddress(fromaddr);
 
     *dgram = dg;
 
diff --git a/SDL_net.h b/SDL_net.h
index 44dbfc2..b803b26 100644
--- a/SDL_net.h
+++ b/SDL_net.h
@@ -29,7 +29,7 @@ extern DECLSPEC SDLNet_Address * SDLCALL SDLNet_ResolveHostname(const char *host
 extern DECLSPEC int SDLCALL SDLNet_WaitForResolution(SDLNet_Address *address);  /* blocks until success or failure. Optional. */
 extern DECLSPEC int SDLCALL SDLNet_GetAddressStatus(SDLNet_Address *address);  /* 0: still working, -1: failed (check SDL_GetError), 1: ready */
 extern DECLSPEC const char * SDLCALL SDLNet_GetAddressString(SDLNet_Address *address);  /* human-readable string, like "127.0.0.1" or "::1" or whatever. NULL if GetAddressStatus != 1. String owned by address! */
-extern DECLSPEC void SDLCALL SDLNet_RefAddress(SDLNet_Address *address);  /* +1 refcount; SDLNet_ResolveHost starts at 1. */
+extern DECLSPEC SDLNet_Address *SDLCALL SDLNet_RefAddress(SDLNet_Address *address);  /* +1 refcount; SDLNet_ResolveHost starts at 1. Returns `address` for convenience. */
 extern DECLSPEC void SDLCALL SDLNet_UnrefAddress(SDLNet_Address *address);  /* when totally unref'd, gets freed. */
 extern DECLSPEC void SDLCALL SDLNet_SimulateAddressResolutionLoss(int percent_loss);  /* make resolutions delay at random, fail some percent of them. */