From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on dcvr.yhbt.net X-Spam-Level: ** X-Spam-ASN: AS6830 89.134.0.0/15 X-Spam-Status: No, score=2.3 required=3.0 tests=BAYES_00,RCVD_IN_XBL, RDNS_DYNAMIC,UNWANTED_LANGUAGE_BODY shortcircuit=no autolearn=no version=3.3.2 X-Original-To: spew@80x24.org Received: from 80x24.org (catv-89-135-144-86.catv.broadband.hu [89.135.144.86]) by dcvr.yhbt.net (Postfix) with ESMTP id 0C9E71FA61 for ; Tue, 2 Jun 2015 02:25:43 +0000 (UTC) From: Eric Wong To: spew@80x24.org Subject: [PATCH] ext/socket/ancdata.c (bsock_sendmsg_internal): use rb_scan_args Date: Tue, 2 Jun 2015 02:25:41 +0000 Message-Id: <1433211941-16366-1-git-send-email-e@80x24.org> List-Id: This should make the code more maintainable and make it easier to add keyword argument support for "exception: false" in the future. --- ext/socket/ancdata.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/ext/socket/ancdata.c b/ext/socket/ancdata.c index ef6a870..277a1e8 100644 --- a/ext/socket/ancdata.c +++ b/ext/socket/ancdata.c @@ -1131,12 +1131,11 @@ bsock_sendmsg_internal(int argc, VALUE *argv, VALUE sock, int nonblock) { rb_io_t *fptr; VALUE data, vflags, dest_sockaddr; - int controls_num; struct msghdr mh; struct iovec iov; #if defined(HAVE_STRUCT_MSGHDR_MSG_CONTROL) + VALUE controls = Qnil; VALUE controls_str = 0; - VALUE *controls_ptr = NULL; int family; #endif int flags; @@ -1151,20 +1150,20 @@ bsock_sendmsg_internal(int argc, VALUE *argv, VALUE sock, int nonblock) if (argc == 0) rb_raise(rb_eArgError, "mesg argument required"); - data = argv[0]; - if (1 < argc) vflags = argv[1]; - if (2 < argc) dest_sockaddr = argv[2]; - controls_num = 3 < argc ? argc - 3 : 0; #if defined(HAVE_STRUCT_MSGHDR_MSG_CONTROL) - if (3 < argc) { controls_ptr = &argv[3]; } + rb_scan_args(argc, argv, "12*", &data, &vflags, &dest_sockaddr, &controls); +#else + rb_scan_args(argc, argv, "12", &data, &vflags, &dest_sockaddr); #endif StringValue(data); - if (controls_num) { + if (!NIL_P(controls)) { #if defined(HAVE_STRUCT_MSGHDR_MSG_CONTROL) int i; + int controls_num = RARRAY_LENINT(controls); size_t last_pad = 0; + const VALUE *controls_ptr = RARRAY_CONST_PTR(controls); #if defined(__NetBSD__) int last_level = 0; int last_type = 0; @@ -1239,6 +1238,7 @@ bsock_sendmsg_internal(int argc, VALUE *argv, VALUE sock, int nonblock) rb_str_set_len(controls_str, RSTRING_LEN(controls_str)-last_pad); #endif } + RB_GC_GUARD(controls); #else rb_raise(rb_eNotImpError, "control message for sendmsg is unimplemented"); #endif -- EW