SCCS-vsn: sys/netinet/udp_usrreq.c 4.45
-/* udp_usrreq.c 4.44 83/02/10 */
+/* udp_usrreq.c 4.45 83/02/16 */
#include "../h/param.h"
#include "../h/dir.h"
#include "../h/param.h"
#include "../h/dir.h"
struct inpcb *inp = sotoinpcb(so);
int error = 0;
struct inpcb *inp = sotoinpcb(so);
int error = 0;
- if (inp == 0 && req != PRU_ATTACH)
- return (EINVAL);
+ if (inp == NULL && req != PRU_ATTACH) {
+ error = EINVAL;
+ goto release;
+ }
switch (req) {
case PRU_ATTACH:
switch (req) {
case PRU_ATTACH:
- if (inp != 0)
- return (EINVAL);
+ if (inp != NULL) {
+ error = EINVAL;
+ break;
+ }
error = in_pcballoc(so, &udb);
if (error)
break;
error = in_pcballoc(so, &udb);
if (error)
break;
- if (inp == 0)
- return (ENOTCONN);
+ if (inp == NULL) {
+ error = ENOTCONN;
+ break;
+ }
in_pcbdetach(inp);
break;
in_pcbdetach(inp);
break;
- if (inp->inp_faddr.s_addr != INADDR_ANY)
- return (EISCONN);
+ if (inp->inp_faddr.s_addr != INADDR_ANY) {
+ error = EISCONN;
+ break;
+ }
error = in_pcbconnect(inp, nam);
if (error == 0)
soisconnected(so);
break;
case PRU_ACCEPT:
error = in_pcbconnect(inp, nam);
if (error == 0)
soisconnected(so);
break;
case PRU_ACCEPT:
+ error = EOPNOTSUPP;
+ break;
- if (inp->inp_faddr.s_addr == INADDR_ANY)
- return (ENOTCONN);
+ if (inp->inp_faddr.s_addr == INADDR_ANY) {
+ error = ENOTCONN;
+ break;
+ }
in_pcbdisconnect(inp);
soisdisconnected(so);
break;
in_pcbdisconnect(inp);
soisdisconnected(so);
break;
if (nam) {
laddr = inp->inp_laddr;
if (nam) {
laddr = inp->inp_laddr;
- if (inp->inp_faddr.s_addr != INADDR_ANY)
- return (EISCONN);
+ if (inp->inp_faddr.s_addr != INADDR_ANY) {
+ error = EISCONN;
+ break;
+ }
error = in_pcbconnect(inp, nam);
if (error)
break;
} else {
error = in_pcbconnect(inp, nam);
if (error)
break;
} else {
- if (inp->inp_faddr.s_addr == INADDR_ANY)
- return (ENOTCONN);
+ if (inp->inp_faddr.s_addr == INADDR_ANY) {
+ error = ENOTCONN;
+ break;
+ }
}
error = udp_output(inp, m);
}
error = udp_output(inp, m);
if (nam) {
in_pcbdisconnect(inp);
inp->inp_laddr = laddr;
if (nam) {
in_pcbdisconnect(inp);
inp->inp_laddr = laddr;
+ error = EOPNOTSUPP;
+ break;
case PRU_SOCKADDR:
in_setsockaddr(inp, nam);
case PRU_SOCKADDR:
in_setsockaddr(inp, nam);
default:
panic("udp_usrreq");
}
default:
panic("udp_usrreq");
}
+release:
+ if (m != NULL)
+ m_freem(m);