patch-2.3.40 linux/net/rose/af_rose.c
Next file: linux/net/sched/Config.in
Previous file: linux/net/netrom/nr_loopback.c
Back to the patch index
Back to the overall index
- Lines: 65
- Date:
Thu Jan 20 10:48:35 2000
- Orig file:
v2.3.39/linux/net/rose/af_rose.c
- Orig date:
Tue Nov 23 22:42:21 1999
diff -u --recursive --new-file v2.3.39/linux/net/rose/af_rose.c linux/net/rose/af_rose.c
@@ -20,6 +20,7 @@
* ROSE 003 Jonathan(G4KLX) New timer architecture.
* Implemented idle timer.
* Added use count to neighbour.
+ * Tomi(OH2BNS) Fixed rose_getname().
*/
#include <linux/config.h>
@@ -893,7 +894,7 @@
static int rose_getname(struct socket *sock, struct sockaddr *uaddr,
int *uaddr_len, int peer)
{
- struct sockaddr_rose *srose = (struct sockaddr_rose *)uaddr;
+ struct full_sockaddr_rose *srose = (struct full_sockaddr_rose *)uaddr;
struct sock *sk = sock->sk;
int n;
@@ -901,42 +902,21 @@
if (sk->state != TCP_ESTABLISHED)
return -ENOTCONN;
srose->srose_family = AF_ROSE;
- srose->srose_ndigis = 0;
srose->srose_addr = sk->protinfo.rose->dest_addr;
srose->srose_call = sk->protinfo.rose->dest_call;
srose->srose_ndigis = sk->protinfo.rose->dest_ndigis;
- if (*uaddr_len >= sizeof(struct full_sockaddr_rose)) {
- struct full_sockaddr_rose *full_srose = (struct full_sockaddr_rose *)uaddr;
- for (n = 0 ; n < sk->protinfo.rose->dest_ndigis ; n++)
- full_srose->srose_digis[n] = sk->protinfo.rose->dest_digis[n];
- *uaddr_len = sizeof(struct full_sockaddr_rose);
- } else {
- if (sk->protinfo.rose->dest_ndigis >= 1) {
- srose->srose_ndigis = 1;
- srose->srose_digi = sk->protinfo.rose->dest_digis[0];
- }
- *uaddr_len = sizeof(struct sockaddr_rose);
- }
+ for (n = 0 ; n < sk->protinfo.rose->dest_ndigis ; n++)
+ srose->srose_digis[n] = sk->protinfo.rose->dest_digis[n];
} else {
srose->srose_family = AF_ROSE;
- srose->srose_ndigis = 0;
srose->srose_addr = sk->protinfo.rose->source_addr;
srose->srose_call = sk->protinfo.rose->source_call;
srose->srose_ndigis = sk->protinfo.rose->source_ndigis;
- if (*uaddr_len >= sizeof(struct full_sockaddr_rose)) {
- struct full_sockaddr_rose *full_srose = (struct full_sockaddr_rose *)uaddr;
- for (n = 0 ; n < sk->protinfo.rose->source_ndigis ; n++)
- full_srose->srose_digis[n] = sk->protinfo.rose->source_digis[n];
- *uaddr_len = sizeof(struct full_sockaddr_rose);
- } else {
- if (sk->protinfo.rose->source_ndigis >= 1) {
- srose->srose_ndigis = 1;
- srose->srose_digi = sk->protinfo.rose->source_digis[sk->protinfo.rose->source_ndigis-1];
- }
- *uaddr_len = sizeof(struct sockaddr_rose);
- }
+ for (n = 0 ; n < sk->protinfo.rose->source_ndigis ; n++)
+ srose->srose_digis[n] = sk->protinfo.rose->source_digis[n];
}
+ *uaddr_len = sizeof(struct full_sockaddr_rose);
return 0;
}
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)