-/* uipc_syscalls.c 4.35 82/10/21 */
+/* uipc_syscalls.c 4.39 82/12/28 */
#include "../h/param.h"
#include "../h/systm.h"
goto freeopt;
fp->f_flag = FREAD|FWRITE;
fp->f_type = DTYPE_SOCKET;
- u.u_error = socreate(0, &so, uap->type, uap->protocol, &aopt);
+ u.u_error = socreate(uap->domain, &so, uap->type, uap->protocol, &aopt);
if (u.u_error)
goto bad;
fp->f_socket = so;
if (uap->name == 0)
goto noname;
- if (copyin((caddr_t)uap->anamelen, (caddr_t)&namelen, sizeof (namelen))) {
- u.u_error = EFAULT;
+ u.u_error = copyin((caddr_t)uap->anamelen, (caddr_t)&namelen,
+ sizeof (namelen));
+ if (u.u_error)
return;
- }
if (useracc((caddr_t)uap->name, (u_int)namelen, B_WRITE) == 0) {
u.u_error = EFAULT;
return;
fp->f_flag = FREAD|FWRITE;
fp->f_socket = so;
ret:
- nam = m_get(M_WAIT);
+ nam = m_get(M_WAIT, MT_SONAME);
(void) soaccept(so, nam, &aopt);
if (uap->name) {
if (namelen > nam->m_len)
if (u.u_error)
goto bad;
u.u_error = sosend(fp->f_socket, to, &auio, uap->flags);
+ u.u_r.r_val1 = uap->len - auio.uio_resid;
bad:
m_freem(to);
}
if (u.u_error)
return;
u.u_error = sosend(fp->f_socket, (struct mbuf *)0, &auio, uap->flags);
+ u.u_r.r_val1 = uap->len - auio.uio_resid;
}
recvfrom()
struct mbuf *from;
int fromlen;
- if (copyin((caddr_t)uap->fromlenaddr, (caddr_t)&fromlen, sizeof (fromlen))) {
- u.u_error = EFAULT;
+ u.u_error = copyin((caddr_t)uap->fromlenaddr, (caddr_t)&fromlen,
+ sizeof (fromlen));
+ if (u.u_error)
return;
- }
fp = getf(uap->s);
if (fp == 0)
return;
else {
if (fromlen > from->m_len)
fromlen = from->m_len;
- if (copyout(mtod(from, caddr_t), uap->from, (u_int)fromlen)) {
- u.u_error = EFAULT;
+ u.u_error = copyout(mtod(from, caddr_t), uap->from,
+ (u_int)fromlen);
+ if (u.u_error)
goto bad;
- }
}
- if (copyout((caddr_t)&fromlen, (caddr_t)uap->fromlenaddr,
- sizeof (fromlen))) {
- u.u_error = EFAULT;
+ u.u_error = copyout((caddr_t)&fromlen, (caddr_t)uap->fromlenaddr,
+ sizeof (fromlen));
+ if (u.u_error)
goto bad;
- }
u.u_r.r_val1 = uap->len - auio.uio_resid;
bad:
if (from)
struct socket *rso, *wso;
int r;
- u.u_error = socreate(1, &rso, SOCK_STREAM, 0, (struct socketopt *)0);
+ u.u_error = socreate(AF_UNIX, &rso, SOCK_STREAM, 0,
+ (struct socketopt *)0);
if (u.u_error)
return;
- u.u_error = socreate(1, &wso, SOCK_STREAM, 0, (struct socketopt *)0);
+ u.u_error = socreate(AF_UNIX, &wso, SOCK_STREAM, 0,
+ (struct socketopt *)0);
if (u.u_error)
goto free;
rf = falloc();
return;
}
so = fp->f_socket;
- m = m_getclr(M_WAIT);
+ m = m_getclr(M_WAIT, MT_SONAME);
u.u_error =
(*so->so_proto->pr_usrreq)(so, PRU_SOCKADDR, 0, m, 0);
if (u.u_error)
goto bad;
- if (copyout(mtod(m, caddr_t), (caddr_t)uap->asa, sizeof (struct sockaddr)))
- u.u_error = EFAULT;
+ u.u_error = copyout(mtod(m, caddr_t), (caddr_t)uap->asa,
+ sizeof (struct sockaddr));
bad:
m_freem(m);
}
int namelen;
{
register struct mbuf *m;
+ int error;
if (namelen > MLEN)
return (EINVAL);
- m = m_get(M_WAIT);
+ m = m_get(M_WAIT, MT_SONAME);
m->m_len = namelen;
- if (copyin(name, mtod(m, caddr_t), (u_int)namelen)) {
+ error = copyin(name, mtod(m, caddr_t), (u_int)namelen);
+ if (error)
(void) m_free(m);
- return (EFAULT);
- }
- *aname = m;
- return (0);
+ else
+ *aname = m;
+ return (error);
}
sockopt(so, opt)
caddr_t opt;
{
register struct mbuf *m;
+ int error;
if (opt == 0) {
so->so_optlen = 0;
so->so_optdata = 0;
return (0);
}
- if (copyin((caddr_t)opt, (caddr_t)so, sizeof (struct socketopt)))
- return (EFAULT);
+ error = copyin((caddr_t)opt, (caddr_t)so, sizeof (struct socketopt));
+ if (error)
+ return (error);
if (so->so_optlen < 0 || so->so_optlen > MLEN)
return (EINVAL);
- m = m_get(M_WAIT);
+ m = m_get(M_WAIT, MT_SOOPTS);
m->m_len = so->so_optlen;
- if (copyin(so->so_optdata, mtod(m, caddr_t), (u_int)m->m_len)) {
+ error = copyin(so->so_optdata, mtod(m, caddr_t), (u_int)m->m_len);
+ if (error) {
(void) m_free(m);
- return (EFAULT);
+ return (error);
}
so->so_optdata = mtod(m, caddr_t);
return (0);