net: rework recvmsg handler msg_name and msg_namelen logic
[pandora-kernel.git] / net / rose / af_rose.c
index a80aef6..bf76dec 100644 (file)
@@ -682,10 +682,8 @@ static int rose_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len)
        if ((unsigned int) addr->srose_ndigis > ROSE_MAX_DIGIS)
                return -EINVAL;
 
-       if ((dev = rose_dev_get(&addr->srose_addr)) == NULL) {
-               SOCK_DEBUG(sk, "ROSE: bind failed: invalid address\n");
+       if ((dev = rose_dev_get(&addr->srose_addr)) == NULL)
                return -EADDRNOTAVAIL;
-       }
 
        source = &addr->srose_call;
 
@@ -716,7 +714,7 @@ static int rose_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len)
        rose_insert_socket(sk);
 
        sock_reset_flag(sk, SOCK_ZAPPED);
-       SOCK_DEBUG(sk, "ROSE: socket is bound\n");
+
        return 0;
 }
 
@@ -1109,10 +1107,7 @@ static int rose_sendmsg(struct kiocb *iocb, struct socket *sock,
                        srose.srose_digis[n] = rose->dest_digis[n];
        }
 
-       SOCK_DEBUG(sk, "ROSE: sendto: Addresses built.\n");
-
        /* Build a packet */
-       SOCK_DEBUG(sk, "ROSE: sendto: building packet.\n");
        /* Sanity check the packet size */
        if (len > 65535)
                return -EMSGSIZE;
@@ -1127,7 +1122,6 @@ static int rose_sendmsg(struct kiocb *iocb, struct socket *sock,
        /*
         *      Put the data on the end
         */
-       SOCK_DEBUG(sk, "ROSE: Appending user data\n");
 
        skb_reset_transport_header(skb);
        skb_put(skb, len);
@@ -1152,8 +1146,6 @@ static int rose_sendmsg(struct kiocb *iocb, struct socket *sock,
         */
        asmptr = skb_push(skb, ROSE_MIN_LEN);
 
-       SOCK_DEBUG(sk, "ROSE: Building Network Header.\n");
-
        /* Build a ROSE Network header */
        asmptr[0] = ((rose->lci >> 8) & 0x0F) | ROSE_GFI;
        asmptr[1] = (rose->lci >> 0) & 0xFF;
@@ -1162,10 +1154,6 @@ static int rose_sendmsg(struct kiocb *iocb, struct socket *sock,
        if (qbit)
                asmptr[0] |= ROSE_Q_BIT;
 
-       SOCK_DEBUG(sk, "ROSE: Built header.\n");
-
-       SOCK_DEBUG(sk, "ROSE: Transmitting buffer\n");
-
        if (sk->sk_state != TCP_ESTABLISHED) {
                kfree_skb(skb);
                return -ENOTCONN;
@@ -1233,7 +1221,6 @@ static int rose_recvmsg(struct kiocb *iocb, struct socket *sock,
 {
        struct sock *sk = sock->sk;
        struct rose_sock *rose = rose_sk(sk);
-       struct sockaddr_rose *srose = (struct sockaddr_rose *)msg->msg_name;
        size_t copied;
        unsigned char *asmptr;
        struct sk_buff *skb;
@@ -1269,7 +1256,11 @@ static int rose_recvmsg(struct kiocb *iocb, struct socket *sock,
 
        skb_copy_datagram_iovec(skb, 0, msg->msg_iov, copied);
 
-       if (srose != NULL) {
+       if (msg->msg_name) {
+               struct sockaddr_rose *srose;
+
+               memset(msg->msg_name, 0, sizeof(struct full_sockaddr_rose));
+               srose = msg->msg_name;
                srose->srose_family = AF_ROSE;
                srose->srose_addr   = rose->dest_addr;
                srose->srose_call   = rose->dest_call;