projects
/
swifty.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
raw: Update list-based socket management functions.
[swifty.git]
/
src
/
raw
/
swift_raw.c
diff --git
a/src/raw/swift_raw.c
b/src/raw/swift_raw.c
index
03170e4
..
27506ac
100644
(file)
--- a/
src/raw/swift_raw.c
+++ b/
src/raw/swift_raw.c
@@
-25,7
+25,7
@@
#include "swift_types.h"
#include "swift_raw.h"
#include "swift_types.h"
#include "swift_raw.h"
-#include "s
wift_list
.h"
+#include "s
ocket_manager
.h"
#include "debug.h"
#include "util.h"
#include "debug.h"
#include "util.h"
@@
-39,7
+39,7
@@
int sw_socket(int __domain, int __type, int __protocol)
{
int s;
int sw_socket(int __domain, int __type, int __protocol)
{
int s;
-
struct sock_list *list
;
+
int rc
;
if (__domain != PF_INET || __type != SOCK_DGRAM || __protocol != IPPROTO_SWIFT) {
errno = EINVAL;
if (__domain != PF_INET || __type != SOCK_DGRAM || __protocol != IPPROTO_SWIFT) {
errno = EINVAL;
@@
-51,14
+51,14
@@
int sw_socket(int __domain, int __type, int __protocol)
goto sock_err;
}
goto sock_err;
}
-
list = list_add_socket
(s);
- if (
list == NULL
) {
+
rc = sm_add
(s);
+ if (
rc < 0
) {
errno = ENOMEM;
goto list_add_err;
}
/* Socket is not bound. */
errno = ENOMEM;
goto list_add_err;
}
/* Socket is not bound. */
-
list->bind_state = STATE_NOTBOUND
;
+
sm_mark_unbound(s)
;
return s;
return s;
@@
-75,34
+75,35
@@
sock_err:
*/
int sw_bind(int __fd, __CONST_SOCKADDR_ARG __addr, socklen_t __len)
{
*/
int sw_bind(int __fd, __CONST_SOCKADDR_ARG __addr, socklen_t __len)
{
- struct sock_list *list;
int rc;
int rc;
- rc =
list_socket
_is_bound(__fd);
+ rc =
sm
_is_bound(__fd);
if (rc == 1) {
errno = EINVAL;
goto socket_bound_err;
}
/* Check whether address is already in use. */
if (rc == 1) {
errno = EINVAL;
goto socket_bound_err;
}
/* Check whether address is already in use. */
-
list = list_elem_from_addres
s(__addr);
- if (
list != NULL
) {
+
rc = sm_address_exist
s(__addr);
+ if (
rc == 1
) {
errno = EADDRINUSE;
errno = EADDRINUSE;
- goto
list_elem
_err;
+ goto
address
_err;
}
/* Update __fd entry in socket management list. */
}
/* Update __fd entry in socket management list. */
-
list = list_update_socket
_address(__fd, __addr);
- if (
list == NULL
) {
+
rc = sm_update
_address(__fd, __addr);
+ if (
rc < 0
) {
errno = EBADF;
errno = EBADF;
- goto
list_
update_err;
+ goto update_err;
}
}
+ sm_mark_bound(__fd);
+
return 0;
return 0;
+update_err:
+address_err:
socket_bound_err:
socket_bound_err:
-list_update_err:
-list_elem_err:
return -1;
}
return -1;
}
@@
-110,21
+111,21
@@
list_elem_err:
int sw_getsockname(int __fd, __SOCKADDR_ARG __addr,
socklen_t *__restrict __len)
{
int sw_getsockname(int __fd, __SOCKADDR_ARG __addr,
socklen_t *__restrict __len)
{
- struct sock
_list *list
;
+ struct sock
addr *addr
;
/* Find socket in management structure. */
/* Find socket in management structure. */
-
list = list_elem_from_socket
(__fd);
- if (
list
== NULL) {
- errno = E
BADF
;
- goto
list_elem
_err;
+
addr = sm_get_address
(__fd);
+ if (
addr
== NULL) {
+ errno = E
INVAL
;
+ goto
address
_err;
}
}
- memcpy(__addr, &
list->addr, sizeof(list->
addr));
- *__len = sizeof(
list->
addr);
+ memcpy(__addr, &
addr, sizeof(
addr));
+ *__len = sizeof(addr);
return 0;
return 0;
-
list_elem
_err:
+
address
_err:
return -1;
}
return -1;
}
@@
-140,13
+141,13
@@
ssize_t sw_sendto(int __fd, __const void *__buf, size_t __n,
socklen_t __addr_len)
{
ssize_t bytes_sent;
socklen_t __addr_len)
{
ssize_t bytes_sent;
- struct sock_list *list;
struct iovec __iov[1];
struct msghdr __msgh;
struct sockaddr_sw *__sw_addr = (struct sockaddr_sw *) __addr;
struct iovec __iov[1];
struct msghdr __msgh;
struct sockaddr_sw *__sw_addr = (struct sockaddr_sw *) __addr;
+ int rc;
-
list = list_elem_from_socket
(__fd);
- if (
list != NULL && list->bind_state == STATE_NOTBOUND
) {
+
rc = sm_is_bound
(__fd);
+ if (
rc < 0
) {
errno = EAFNOSUPPORT;
goto sock_err;
}
errno = EAFNOSUPPORT;
goto sock_err;
}
@@
-190,17
+191,17
@@
ssize_t sw_recvfrom(int __fd, void *__restrict __buf, size_t __n,
socklen_t *__restrict __addr_len)
{
ssize_t bytes_recv;
socklen_t *__restrict __addr_len)
{
ssize_t bytes_recv;
- struct sock_list *list;
struct iovec __iov[1];
struct msghdr __msgh;
struct sockaddr_sw *__sw_addr = (struct sockaddr_sw *) __addr;
struct iovec __iov[1];
struct msghdr __msgh;
struct sockaddr_sw *__sw_addr = (struct sockaddr_sw *) __addr;
+ int rc;
-
list = list_elem_from_socket
(__fd);
- if (
list != NULL && list->bind_state == STATE_NOTBOUND
) {
+
rc = sm_is_bound
(__fd);
+ if (
rc < 0
) {
errno = EAFNOSUPPORT;
goto sock_err;
}
errno = EAFNOSUPPORT;
goto sock_err;
}
-
+
/* TODO */
return recvmsg(__fd, &__msgh, 0);
/* TODO */
return recvmsg(__fd, &__msgh, 0);
@@
-276,15
+277,15
@@
int sw_close(int __fd)
int rc;
/* Remove socket from socket management structure. */
int rc;
/* Remove socket from socket management structure. */
- rc =
list_remove_socket
(__fd);
+ rc =
sm_del
(__fd);
if (rc < 0) {
errno = EBADF;
if (rc < 0) {
errno = EBADF;
- goto
list_unlink
_err;
+ goto
del
_err;
}
/* Call classical interface of close(2). */
return close(__fd);
}
/* Call classical interface of close(2). */
return close(__fd);
-
list_unlink
_err:
+
del
_err:
return -1;
}
return -1;
}