- if (uap->asa)
- (void) copyout((caddr_t)&sa, (caddr_t)uap->asa, sizeof (sa));
- /* deal with new file descriptor case */
- /* u.u_r.r_val1 = ... */
+ fp = falloc();
+ if (fp == 0) {
+ u.u_ofile[u.u_r.r_val1] = 0;
+ splx(s);
+ goto bad;
+ }
+ { struct socket *aso = so->so_q;
+ if (soqremque(aso, 1) == 0)
+ panic("accept");
+ so = aso;
+ }
+ fp->f_type = DTYPE_SOCKET;
+ fp->f_flag = FREAD|FWRITE;
+ fp->f_socket = so;
+ret:
+ nam = m_get(M_WAIT);
+ soaccept(so, nam, &aopt);
+ if (uap->name) {
+ if (namelen > nam->m_len)
+ namelen = nam->m_len;
+ /* SHOULD COPY OUT A CHAIN HERE */
+ (void) copyout(mtod(nam, caddr_t), uap->name, namelen);
+ (void) copyout((caddr_t)&namelen, uap->anamelen,
+ sizeof (*uap->anamelen));
+ }
+ m_freem(nam);