accept() and bind() now accept NULL address parameters in the R5 compatibility mode.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@19810 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2002-2006, Haiku, Inc. All Rights Reserved.
|
* Copyright 2002-2007, Haiku, Inc. All Rights Reserved.
|
||||||
* Distributed under the terms of the MIT License.
|
* Distributed under the terms of the MIT License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@@ -66,6 +66,9 @@ convert_from_r5_sockaddr(struct sockaddr *_to, const struct sockaddr *_from)
|
|||||||
memset(to, 0, sizeof(*to));
|
memset(to, 0, sizeof(*to));
|
||||||
to->sin_len = sizeof(*to);
|
to->sin_len = sizeof(*to);
|
||||||
|
|
||||||
|
if (from == NULL)
|
||||||
|
return;
|
||||||
|
|
||||||
if (from->sin_family == R5_AF_INET)
|
if (from->sin_family == R5_AF_INET)
|
||||||
to->sin_family = AF_INET;
|
to->sin_family = AF_INET;
|
||||||
else
|
else
|
||||||
@@ -82,6 +85,9 @@ convert_to_r5_sockaddr(struct sockaddr *_to, const struct sockaddr *_from)
|
|||||||
const sockaddr_in *from = (sockaddr_in *)_from;
|
const sockaddr_in *from = (sockaddr_in *)_from;
|
||||||
r5_sockaddr_in *to = (r5_sockaddr_in *)_to;
|
r5_sockaddr_in *to = (r5_sockaddr_in *)_to;
|
||||||
|
|
||||||
|
if (to == NULL)
|
||||||
|
return;
|
||||||
|
|
||||||
memset(to, 0, sizeof(*to));
|
memset(to, 0, sizeof(*to));
|
||||||
if (from->sin_family == AF_INET)
|
if (from->sin_family == AF_INET)
|
||||||
to->sin_family = R5_AF_INET;
|
to->sin_family = R5_AF_INET;
|
||||||
@@ -259,7 +265,7 @@ accept(int socket, struct sockaddr *address, socklen_t *_addressLength)
|
|||||||
|
|
||||||
args.cookie = cookie;
|
args.cookie = cookie;
|
||||||
|
|
||||||
if (r5compatible) {
|
if (r5compatible && address != NULL) {
|
||||||
args.address = &r5addr;
|
args.address = &r5addr;
|
||||||
args.address_length = sizeof(r5addr);
|
args.address_length = sizeof(r5addr);
|
||||||
} else {
|
} else {
|
||||||
@@ -272,7 +278,7 @@ accept(int socket, struct sockaddr *address, socklen_t *_addressLength)
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (r5compatible) {
|
if (r5compatible && address != NULL) {
|
||||||
convert_to_r5_sockaddr(address, &r5addr);
|
convert_to_r5_sockaddr(address, &r5addr);
|
||||||
if (_addressLength != NULL)
|
if (_addressLength != NULL)
|
||||||
*_addressLength = sizeof(struct r5_sockaddr_in);
|
*_addressLength = sizeof(struct r5_sockaddr_in);
|
||||||
|
|||||||
Reference in New Issue
Block a user