Deleted Added
full compact
34c34
< * $Id: uipc_syscalls.c,v 1.25 1997/04/09 16:53:40 bde Exp $
---
> * $Id: uipc_syscalls.c,v 1.26 1997/04/27 20:00:45 wollman Exp $
124c124
< struct mbuf *nam;
---
> struct sockaddr *sa;
130c130
< error = sockargs(&nam, uap->name, uap->namelen, MT_SONAME);
---
> error = getsockaddr(&sa, uap->name, uap->namelen);
133,134c133,134
< error = sobind((struct socket *)fp->f_data, nam, p);
< m_freem(nam);
---
> error = sobind((struct socket *)fp->f_data, sa, p);
> FREE(sa, M_SONAME);
169c169
< struct mbuf *nam;
---
> struct sockaddr *sa;
246,247c246,256
< nam = m_get(M_WAIT, MT_SONAME);
< (void) soaccept(so, nam);
---
> sa = 0;
> (void) soaccept(so, &sa);
> if (sa == 0) {
> namelen = 0;
> if (uap->name)
> goto gotnoname;
> return 0;
> }
> if ((u_long)sa < 0xf0000000) {
> panic("accept1 bad sa");
> }
251,252c260,261
< mtod(nam, struct osockaddr *)->sa_family =
< mtod(nam, struct sockaddr *)->sa_family;
---
> ((struct osockaddr *)sa)->sa_family =
> sa->sa_family;
254,258c263,265
< if (namelen > nam->m_len)
< namelen = nam->m_len;
< /* SHOULD COPY OUT A CHAIN HERE */
< error = copyout(mtod(nam, caddr_t), (caddr_t)uap->name,
< (u_int)namelen);
---
> if (namelen > sa->sa_len)
> namelen = sa->sa_len;
> error = copyout(sa, (caddr_t)uap->name, (u_int)namelen);
259a267
> gotnoname:
263c271
< m_freem(nam);
---
> FREE(sa, M_SONAME);
303c311
< struct mbuf *nam;
---
> struct sockaddr *sa;
312c320
< error = sockargs(&nam, uap->name, uap->namelen, MT_SONAME);
---
> error = getsockaddr(&sa, uap->name, uap->namelen);
315c323
< error = soconnect(so, nam, p);
---
> error = soconnect(so, sa, p);
319c327
< m_freem(nam);
---
> FREE(sa, M_SONAME);
336c344
< m_freem(nam);
---
> FREE(sa, M_SONAME);
421c429,430
< struct mbuf *to, *control;
---
> struct mbuf *control;
> struct sockaddr *to;
444c453
< error = sockargs(&to, mp->msg_name, mp->msg_namelen, MT_SONAME);
---
> error = getsockaddr(&to, mp->msg_name, mp->msg_namelen);
491c500
< flags);
---
> flags, p);
511c520
< m_freem(to);
---
> FREE(to, M_SONAME);
662c671
< struct mbuf *m, *from = 0, *control = 0;
---
> struct mbuf *m, *control = 0;
664a674
> struct sockaddr *fromsa = 0;
694c704
< error = so->so_proto->pr_usrreqs->pru_soreceive(so, &from, &auio,
---
> error = so->so_proto->pr_usrreqs->pru_soreceive(so, &fromsa, &auio,
715c725
< if (len <= 0 || from == 0)
---
> if (len <= 0 || fromsa == 0)
720,721c730,731
< mtod(from, struct osockaddr *)->sa_family =
< mtod(from, struct sockaddr *)->sa_family;
---
> ((struct osockaddr *)fromsa)->sa_family =
> fromsa->sa_family;
723,726c733,737
< if (len > from->m_len)
< len = from->m_len;
< /* else if len < from->m_len ??? */
< error = copyout(mtod(from, caddr_t),
---
> #ifndef MIN
> #define MIN(a,b) ((a)>(b)?(b):(a))
> #endif
> len = MIN(len, fromsa->sa_len);
> error = copyout(fromsa,
789,790c800,801
< if (from)
< m_freem(from);
---
> if (fromsa)
> FREE(fromsa, M_SONAME);
1087c1098
< struct mbuf *m;
---
> struct sockaddr *sa;
1097,1100c1108,1109
< m = m_getclr(M_WAIT, MT_SONAME);
< if (m == NULL)
< return (ENOBUFS);
< error = (*so->so_proto->pr_usrreqs->pru_sockaddr)(so, m);
---
> sa = 0;
> error = (*so->so_proto->pr_usrreqs->pru_sockaddr)(so, &sa);
1103,1104c1112,1117
< if (len > m->m_len)
< len = m->m_len;
---
> if (sa == 0) {
> len = 0;
> goto gotnothing;
> }
>
> len = MIN(len, sa->sa_len);
1107,1108c1120
< mtod(m, struct osockaddr *)->sa_family =
< mtod(m, struct sockaddr *)->sa_family;
---
> ((struct osockaddr *)sa)->sa_family = sa->sa_family;
1110c1122
< error = copyout(mtod(m, caddr_t), (caddr_t)uap->asa, (u_int)len);
---
> error = copyout(sa, (caddr_t)uap->asa, (u_int)len);
1111a1124
> gotnothing:
1115c1128,1129
< m_freem(m);
---
> if (sa)
> FREE(sa, M_SONAME);
1158c1172
< struct mbuf *m;
---
> struct sockaddr *sa;
1170,1173c1184,1185
< m = m_getclr(M_WAIT, MT_SONAME);
< if (m == NULL)
< return (ENOBUFS);
< error = (*so->so_proto->pr_usrreqs->pru_peeraddr)(so, m);
---
> sa = 0;
> error = (*so->so_proto->pr_usrreqs->pru_peeraddr)(so, &sa);
1176,1177c1188,1192
< if (len > m->m_len)
< len = m->m_len;
---
> if (sa == 0) {
> len = 0;
> goto gotnothing;
> }
> len = MIN(len, sa->sa_len);
1180,1181c1195,1196
< mtod(m, struct osockaddr *)->sa_family =
< mtod(m, struct sockaddr *)->sa_family;
---
> ((struct osockaddr *)sa)->sa_family =
> sa->sa_family;
1183c1198
< error = copyout(mtod(m, caddr_t), (caddr_t)uap->asa, (u_int)len);
---
> error = copyout(sa, (caddr_t)uap->asa, (u_int)len);
1185a1201
> gotnothing:
1188c1204
< m_freem(m);
---
> if (sa) FREE(sa, M_SONAME);
1255a1272,1297
> getsockaddr(namp, uaddr, len)
> struct sockaddr **namp;
> caddr_t uaddr;
> size_t len;
> {
> struct sockaddr *sa;
> int error;
>
> if (len > SOCK_MAXADDRLEN)
> return ENAMETOOLONG;
> MALLOC(sa, struct sockaddr *, len, M_SONAME, M_WAITOK);
> error = copyin(uaddr, sa, len);
> if (error) {
> FREE(sa, M_SONAME);
> } else {
> #if defined(COMPAT_OLDSOCK) && BYTE_ORDER != BIG_ENDIAN
> if (sa->sa_family == 0 && sa->sa_len < AF_MAX)
> sa->sa_family = sa->sa_len;
> #endif
> sa->sa_len = len;
> *namp = sa;
> }
> return error;
> }
>
> int