Skip to content

Commit 63665b2

Browse files
committed
socket.c: use rb_syserr_fail
* ext/socket/socket.c (rsock_syserr_fail_host_port): add errno argument version anduse rb_syserr_fail_str() instead of rb_sys_fail_str() with restoring errno. * ext/socket/socket.c (rsock_syserr_fail_path): ditto, and rb_syserr_fail(). * ext/socket/socket.c (rsock_sys_fail_sockaddr): ditto, use rsock_syserr_fail_raddrinfo(). * ext/socket/socket.c (rsock_sys_fail_raddrinfo): ditto. * ext/socket/socket.c (setup_domain_and_type): ditto. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@44496 b2dd03c8-39d4-4d8f-98ff-823fe69b080e Conflicts: ChangeLog
1 parent 1a27d04 commit 63665b2

File tree

2 files changed

+45
-7
lines changed

2 files changed

+45
-7
lines changed

ext/socket/rubysocket.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -374,6 +374,12 @@ void rsock_init_sockopt(void);
374374
void rsock_init_sockifaddr(void);
375375
void rsock_init_socket_init(void);
376376

377+
NORETURN(void rsock_syserr_fail_host_port(int err, const char *, VALUE, VALUE));
378+
NORETURN(void rsock_syserr_fail_path(int err, const char *, VALUE));
379+
NORETURN(void rsock_syserr_fail_sockaddr(int err, const char *mesg, struct sockaddr *addr, socklen_t len));
380+
NORETURN(void rsock_syserr_fail_raddrinfo(int err, const char *mesg, VALUE rai));
381+
NORETURN(void rsock_syserr_fail_raddrinfo_or_sockaddr(int err, const char *mesg, VALUE addr, VALUE rai));
382+
377383
NORETURN(void rsock_sys_fail_host_port(const char *, VALUE, VALUE));
378384
NORETURN(void rsock_sys_fail_path(const char *, VALUE));
379385
NORETURN(void rsock_sys_fail_sockaddr(const char *, struct sockaddr *addr, socklen_t len));

ext/socket/socket.c

Lines changed: 39 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,12 @@ static VALUE sock_s_unpack_sockaddr_in(VALUE, VALUE);
1414

1515
void
1616
rsock_sys_fail_host_port(const char *mesg, VALUE host, VALUE port)
17+
{
18+
rsock_syserr_fail_host_port(errno, mesg, host, port);
19+
}
20+
21+
void
22+
rsock_syserr_fail_host_port(int err, const char *mesg, VALUE host, VALUE port)
1723
{
1824
VALUE message;
1925

@@ -22,13 +28,20 @@ rsock_sys_fail_host_port(const char *mesg, VALUE host, VALUE port)
2228
message = rb_sprintf("%s for \"%s\" port %s",
2329
mesg, StringValueCStr(host), StringValueCStr(port));
2430

25-
rb_sys_fail_str(message);
31+
rb_syserr_fail_str(err, message);
2632
}
2733

2834
void
2935
rsock_sys_fail_path(const char *mesg, VALUE path)
36+
{
37+
rsock_syserr_fail_path(errno, mesg, path);
38+
}
39+
40+
void
41+
rsock_syserr_fail_path(int err, const char *mesg, VALUE path)
3042
{
3143
VALUE message;
44+
3245
if (RB_TYPE_P(path, T_STRING)) {
3346
if (memchr(RSTRING_PTR(path), '\0', RSTRING_LEN(path))) {
3447
path = rb_str_inspect(path);
@@ -39,45 +52,64 @@ rsock_sys_fail_path(const char *mesg, VALUE path)
3952
message = rb_sprintf("%s for \"%s\"", mesg,
4053
StringValueCStr(path));
4154
}
42-
rb_sys_fail_str(message);
55+
rb_syserr_fail_str(err, message);
4356
}
4457
else {
45-
rb_sys_fail(mesg);
58+
rb_syserr_fail(err, mesg);
4659
}
4760
}
4861

4962
void
5063
rsock_sys_fail_sockaddr(const char *mesg, struct sockaddr *addr, socklen_t len)
64+
{
65+
rsock_syserr_fail_sockaddr(errno, mesg, addr, len);
66+
}
67+
68+
void
69+
rsock_syserr_fail_sockaddr(int err, const char *mesg, struct sockaddr *addr, socklen_t len)
5170
{
5271
VALUE rai;
5372

5473
rai = rsock_addrinfo_new(addr, len, PF_UNSPEC, 0, 0, Qnil, Qnil);
5574

56-
rsock_sys_fail_raddrinfo(mesg, rai);
75+
rsock_syserr_fail_raddrinfo(err, mesg, rai);
5776
}
5877

5978
void
6079
rsock_sys_fail_raddrinfo(const char *mesg, VALUE rai)
80+
{
81+
rsock_syserr_fail_raddrinfo(errno, mesg, rai);
82+
}
83+
84+
void
85+
rsock_syserr_fail_raddrinfo(int err, const char *mesg, VALUE rai)
6186
{
6287
VALUE str, message;
6388

6489
str = rsock_addrinfo_inspect_sockaddr(rai);
6590
message = rb_sprintf("%s for %s", mesg, StringValueCStr(str));
6691

67-
rb_sys_fail_str(message);
92+
rb_syserr_fail_str(err, message);
6893
}
6994

7095
void
7196
rsock_sys_fail_raddrinfo_or_sockaddr(const char *mesg, VALUE addr, VALUE rai)
97+
{
98+
rsock_syserr_fail_raddrinfo_or_sockaddr(errno, mesg, addr, rai);
99+
}
100+
101+
void
102+
rsock_syserr_fail_raddrinfo_or_sockaddr(int err, const char *mesg, VALUE addr, VALUE rai)
72103
{
73104
if (NIL_P(rai)) {
74105
StringValue(addr);
75-
rsock_sys_fail_sockaddr(mesg,
106+
107+
rsock_syserr_fail_sockaddr(err, mesg,
76108
(struct sockaddr *)RSTRING_PTR(addr),
77109
(socklen_t)RSTRING_LEN(addr)); /* overflow should be checked already */
78110
}
79111
else
80-
rsock_sys_fail_raddrinfo(mesg, rai);
112+
rsock_syserr_fail_raddrinfo(err, mesg, rai);
81113
}
82114

83115
static void

0 commit comments

Comments
 (0)