Control of 'addr' is now handed over to {platform_,}new_connection() and
[u/mdw/putty] / unix / uxnet.c
index 9d9e03b..ce062d8 100644 (file)
@@ -26,7 +26,7 @@
 struct Socket_tag {
     struct socket_function_table *fn;
     /* the above variable absolutely *must* be the first in this structure */
-    char *error;
+    const char *error;
     int s;
     Plug plug;
     void *private_ptr;
@@ -56,7 +56,7 @@ struct Socket_tag {
 typedef struct Socket_tag *Actual_Socket;
 
 struct SockAddr_tag {
-    char *error;
+    const char *error;
     /*
      * Which address family this address belongs to. AF_INET for
      * IPv4; AF_INET6 for IPv6; AF_UNSPEC indicates that name
@@ -90,7 +90,7 @@ static int cmpfortree(void *av, void *bv)
 static int cmpforsearch(void *av, void *bv)
 {
     Actual_Socket b = (Actual_Socket) bv;
-    int as = (int) av, bs = b->s;
+    int as = *(int *)av, bs = b->s;
     if (as < bs)
        return -1;
     if (as > bs)
@@ -115,7 +115,7 @@ void sk_cleanup(void)
     }
 }
 
-char *error_string(int error)
+const char *error_string(int error)
 {
     return strerror(error);
 }
@@ -322,7 +322,7 @@ static int sk_tcp_write_oob(Socket s, const char *data, int len);
 static void sk_tcp_set_private_ptr(Socket s, void *ptr);
 static void *sk_tcp_get_private_ptr(Socket s);
 static void sk_tcp_set_frozen(Socket s, int is_frozen);
-static char *sk_tcp_socket_error(Socket s);
+static const char *sk_tcp_socket_error(Socket s);
 
 static struct socket_function_table tcp_fn_table = {
     sk_tcp_plug,
@@ -336,7 +336,7 @@ static struct socket_function_table tcp_fn_table = {
     sk_tcp_socket_error
 };
 
-Socket sk_register(void *sock, Plug plug)
+Socket sk_register(OSSocket sockfd, Plug plug)
 {
     Actual_Socket ret;
 
@@ -357,7 +357,7 @@ Socket sk_register(void *sock, Plug plug)
     ret->oobpending = FALSE;
     ret->listener = 0;
 
-    ret->s = (int)sock;
+    ret->s = sockfd;
 
     if (ret->s < 0) {
        ret->error = error_string(errno);
@@ -521,6 +521,8 @@ Socket sk_new(SockAddr addr, int port, int privport, int oobinline,
     uxsel_tell(ret);
     add234(sktree, ret);
 
+    sk_addr_free(addr);
+
     return (Socket) ret;
 }
 
@@ -819,7 +821,7 @@ static int net_select_result(int fd, int event)
     u_long atmark;
 
     /* Find the Socket structure */
-    s = find234(sktree, (void *) fd, cmpforsearch);
+    s = find234(sktree, &fd, cmpforsearch);
     if (!s)
        return 1;                      /* boggle */
 
@@ -837,8 +839,8 @@ static int net_select_result(int fd, int event)
            ret = recv(s->s, buf, sizeof(buf), MSG_OOB);
            noise_ultralight(ret);
            if (ret <= 0) {
-               char *str = (ret == 0 ? "Internal networking trouble" :
-                            error_string(errno));
+               const char *str = (ret == 0 ? "Internal networking trouble" :
+                                  error_string(errno));
                /* We're inside the Unix frontend here, so we know
                 * that the frontend handle is unnecessary. */
                logevent(NULL, str);
@@ -876,7 +878,7 @@ static int net_select_result(int fd, int event)
 
            if (s->localhost_only && !ipv4_is_loopback(isa.sin_addr)) {
                close(t);              /* someone let nonlocal through?! */
-           } else if (plug_accepting(s->plug, (void*)t)) {
+           } else if (plug_accepting(s->plug, t)) {
                close(t);              /* denied or error */
            }
            break;
@@ -1003,11 +1005,11 @@ static void *sk_tcp_get_private_ptr(Socket sock)
  * if there's a problem. These functions extract an error message,
  * or return NULL if there's no problem.
  */
-char *sk_addr_error(SockAddr addr)
+const char *sk_addr_error(SockAddr addr)
 {
     return addr->error;
 }
-static char *sk_tcp_socket_error(Socket sock)
+static const char *sk_tcp_socket_error(Socket sock)
 {
     Actual_Socket s = (Actual_Socket) sock;
     return s->error;