summaryrefslogtreecommitdiffhomepage
path: root/mrbgems/mruby-socket
diff options
context:
space:
mode:
authorTomoyuki Sahara <[email protected]>2018-06-14 13:25:57 +0900
committerTomoyuki Sahara <[email protected]>2018-06-14 13:25:57 +0900
commit3618556a95957f82f6fd853af239eb8ce9fa689b (patch)
tree3da2ae4167a27330f8b823d24deed284d65105c9 /mrbgems/mruby-socket
parent97933665b6c427348983bab936a5d855f1384712 (diff)
downloadmruby-3618556a95957f82f6fd853af239eb8ce9fa689b.tar.gz
mruby-3618556a95957f82f6fd853af239eb8ce9fa689b.zip
struct sockaddr_un can be shorter than struct sockaddr.
ref: https://github.com/iij/mruby-socket/issues/45
Diffstat (limited to 'mrbgems/mruby-socket')
-rw-r--r--mrbgems/mruby-socket/src/socket.c16
1 files changed, 6 insertions, 10 deletions
diff --git a/mrbgems/mruby-socket/src/socket.c b/mrbgems/mruby-socket/src/socket.c
index 037400077..5a8db93d7 100644
--- a/mrbgems/mruby-socket/src/socket.c
+++ b/mrbgems/mruby-socket/src/socket.c
@@ -664,19 +664,15 @@ mrb_socket_listen(mrb_state *mrb, mrb_value klass)
static mrb_value
mrb_socket_sockaddr_family(mrb_state *mrb, mrb_value klass)
{
- mrb_value sa;
+ const struct sockaddr *sa;
+ mrb_value str;
- mrb_get_args(mrb, "S", &sa);
-#ifdef __linux__
- if ((size_t)RSTRING_LEN(sa) < offsetof(struct sockaddr, sa_family) + sizeof(sa_family_t)) {
- mrb_raisef(mrb, E_SOCKET_ERROR, "invalid sockaddr (too short)");
- }
-#else
- if ((size_t)RSTRING_LEN(sa) < sizeof(struct sockaddr)) {
+ mrb_get_args(mrb, "S", &str);
+ if ((size_t)RSTRING_LEN(str) < offsetof(struct sockaddr, sa_family) + sizeof(sa_family_t)) {
mrb_raisef(mrb, E_SOCKET_ERROR, "invalid sockaddr (too short)");
}
-#endif
- return mrb_fixnum_value(((struct sockaddr *)RSTRING_PTR(sa))->sa_family);
+ sa = (const struct sockaddr *)RSTRING_PTR(str);
+ return mrb_fixnum_value(sa->sa_family);
}
static mrb_value