aboutsummaryrefslogtreecommitdiffstats
path: root/io.c
diff options
context:
space:
mode:
Diffstat (limited to 'io.c')
-rw-r--r--io.c34
1 files changed, 24 insertions, 10 deletions
diff --git a/io.c b/io.c
index e97704db11..8db2e63cac 100644
--- a/io.c
+++ b/io.c
@@ -7909,6 +7909,25 @@ io_cntl(int fd, int cmd, long narg, int io_p)
return retval;
}
+static long
+ioctl_narg_len(int cmd)
+{
+ long len;
+
+#ifdef IOCPARM_MASK
+#ifndef IOCPARM_LEN
+#define IOCPARM_LEN(x) (((x) >> 16) & IOCPARM_MASK)
+#endif
+#endif
+#ifdef IOCPARM_LEN
+ len = IOCPARM_LEN(cmd); /* on BSDish systems we're safe */
+#else
+ len = 256; /* otherwise guess at what's safe */
+#endif
+
+ return len;
+}
+
static VALUE
rb_io_ctl(VALUE io, VALUE req, VALUE arg, int io_p)
{
@@ -7937,16 +7956,11 @@ rb_io_ctl(VALUE io, VALUE req, VALUE arg, int io_p)
}
else {
arg = tmp;
-#ifdef IOCPARM_MASK
-#ifndef IOCPARM_LEN
-#define IOCPARM_LEN(x) (((x) >> 16) & IOCPARM_MASK)
-#endif
-#endif
-#ifdef IOCPARM_LEN
- len = IOCPARM_LEN(cmd); /* on BSDish systems we're safe */
-#else
- len = 256; /* otherwise guess at what's safe */
-#endif
+
+ if (io_p)
+ ioctl_narg_len(cmd);
+ else
+ len = 256;
rb_str_modify(arg);
if (len <= RSTRING_LEN(arg)) {