File 3208-enet-Fixed-for-FreeBSD.patch of Package erlang

From 4115e96bb57b61225efbca007a353e8aa6676f84 Mon Sep 17 00:00:00 2001
From: Micael Karlberg <bmk@erlang.org>
Date: Wed, 17 Apr 2024 11:32:48 +0200
Subject: [PATCH 08/18] [enet] Fixed for FreeBSD

---
 erts/emulator/nifs/common/prim_net_nif.c | 50 ++++++++++++++++++------
 1 file changed, 38 insertions(+), 12 deletions(-)

diff --git a/erts/emulator/nifs/common/prim_net_nif.c b/erts/emulator/nifs/common/prim_net_nif.c
index 77f1d881e1..a4ef12a8d1 100644
--- a/erts/emulator/nifs/common/prim_net_nif.c
+++ b/erts/emulator/nifs/common/prim_net_nif.c
@@ -497,6 +497,7 @@ static ERL_NIF_TERM enet_getservbyname(ErlNifEnv*   env,
                                        ERL_NIF_TERM ename,
                                        ERL_NIF_TERM eproto);
 static ERL_NIF_TERM enet_getservbyport(ErlNifEnv*   env,
+                                       BOOLEAN_T      dbg,
                                        ERL_NIF_TERM eport,
                                        ERL_NIF_TERM eproto);
 
@@ -4070,7 +4071,7 @@ ERL_NIF_TERM nif_getservbyport(ErlNifEnv*         env,
     ERL_NIF_TERM result, eport, eproto;
     BOOLEAN_T    dbg = FALSE;
 
-    NDBG( ("NET", "nif_getservbyport -> entry (%d)\r\n", argc) );
+    NDBG2( dbg, ("NET", "nif_getservbyport -> entry (%d)\r\n", argc) );
 
     if (argc != 2)
         return enif_make_badarg(env);
@@ -4085,7 +4086,7 @@ ERL_NIF_TERM nif_getservbyport(ErlNifEnv*         env,
             "\r\n   eproto: %T"
             "\r\n", eport, eproto) );
 
-    result = enet_getservbyport(env, eport, eproto);
+    result = enet_getservbyport(env, dbg, eport, eproto);
 
     NDBG2( dbg,
            ("NET",
@@ -4098,33 +4099,58 @@ ERL_NIF_TERM nif_getservbyport(ErlNifEnv*         env,
 
 static
 ERL_NIF_TERM enet_getservbyport(ErlNifEnv*   env,
+                                BOOLEAN_T      dbg,
                                 ERL_NIF_TERM eport,
                                 ERL_NIF_TERM eproto)
 {
     char            proto[256];
     struct servent* srv;
-    unsigned short  port;
-    unsigned int    len;
+    unsigned int    port;
+    ERL_NIF_TERM ename, result;
 
+    NDBG2( dbg, ("NET", "enet_getservbyport -> try 'get' port\r\n") );
     if (0 >= GET_UINT(env, eport, &port))
         return esock_make_error(env, esock_atom_einval);
+    NDBG2( dbg, ("NET", "enet_getservbyport -> (pre htons) port: %u\r\n", port) );
 
+    port = net_htons(port);
+    NDBG2( dbg, ("NET", "enet_getservbyport -> (post htons) port: %u\r\n", port) );
+
+    NDBG2( dbg, ("NET", "enet_getservbyport -> try 'get' proto\r\n") );
     if (0 >= GET_STR(env, eproto, proto, sizeof(proto)))
         return esock_make_error(env, esock_atom_einval);
+    NDBG2( dbg, ("NET", "enet_getservbyport -> proto: %s\r\n", proto) );
 
-    port = net_htons(port);
-
-    if ( strcmp(proto, "any") == 0 )
+    NDBG2( dbg, ("NET", "enet_getservbyport -> check proto\r\n") );
+    if ( strcmp(proto, "any") == 0 ) {
         srv = net_getservbyport(port, NULL);
-    else
+    } else {
         srv = net_getservbyport(port, proto);
+    }
 
-    if (srv == NULL)
-        return esock_make_error(env, esock_atom_einval);
+    if (srv == NULL) {
+
+        NDBG2( dbg, ("NET", "enet_getservbyport -> failed get servent\r\n") );
 
-    len = strlen(srv->s_name);
+        result = esock_make_error(env, esock_atom_einval);
+
+    } else {
+
+        unsigned int len = strlen(srv->s_name);
+
+        NDBG2( dbg, ("NET", "enet_getservbyport -> make string (term) with length %d\r\n", len) );
+
+        ename = MKSL(env, srv->s_name, len);
 
-    return esock_make_ok2(env, MKSL(env, srv->s_name, len));
+        result = esock_make_ok2(env, ename);
+
+    }
+
+    NDBG2( dbg, ("NET", "enet_getservbyport -> done with"
+                 "\r\n   result: %T"
+                 "\r\n", result) );
+
+    return result;
 }
 
 
-- 
2.35.3

openSUSE Build Service is sponsored by