8000 * io.c (+setup_narg): factor out length calculation logic. · ileitch/ruby@eec252e · GitHub
[go: up one dir, main page]

Skip to content

Commit eec252e

Browse files
author
kosaki
committed
* io.c (+setup_narg): factor out length calculation logic.
* io.c (rb_io_ctl): ditto. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@33713 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
1 parent 6ed2a4d commit eec252e

File tree

2 files changed

+27
-11
lines changed

2 files changed

+27
-11
lines changed

ChangeLog

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
1+
Sat Nov 12 10:56:43 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
2+
3+
* io.c (+setup_narg): factor out length calculation logic.
4+
* io.c (rb_io_ctl): ditto.
5+
16
Sat Nov 12 10:52:17 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
27

38
* io.c (+ioctl_narg_len) new helper function.

io.c

Lines changed: 22 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -7928,16 +7928,11 @@ ioctl_narg_len(int cmd)
79287928
return len;
79297929
}
79307930

7931-
static VALUE
7932-
rb_io_ctl(VALUE io, VALUE req, VALUE arg, int io_p)
7931+
static long
7932+
setup_narg(int cmd, VALUE *argp, int io_p)
79337933
{
7934-
int cmd = NUM2INT(req);
7935-
rb_io_t *fptr;
7936-
long len = 0;
79377934
long narg = 0;
7938-
int retval;
7939-
7940-
rb_secure(2);
7935+
VALUE arg = *argp;
79417936

79427937
if (NIL_P(arg) || arg == Qfalse) {
79437938
narg = 0;
@@ -7955,10 +7950,11 @@ rb_io_ctl(VALUE io, VALUE req, VALUE arg, int io_p)
79557950
narg = NUM2LONG(arg);
79567951
}
79577952
else {
7958-
arg = tmp;
7953+
long len;
79597954

7955+
*argp = arg = tmp;
79607956
if (io_p)
7961-
ioctl_narg_len(cmd);
7957+
len = ioctl_narg_len(cmd);
79627958
else
79637959
len = 256;
79647960
rb_str_modify(arg);
@@ -7973,10 +7969,25 @@ rb_io_ctl(VALUE io, VALUE req, VALUE arg, int io_p)
79737969
narg = (long)(SIGNED_VALUE)RSTRING_PTR(arg);
79747970
}
79757971
}
7972+
7973+
return narg;
7974+
}
7975+
7976+
static VALUE
7977+
rb_io_ctl(VALUE io, VALUE req, VALUE arg, int io_p)
7978+
{
7979+
int cmd = NUM2INT(req);
7980+
rb_io_t *fptr;
7981+
long narg;
7982+
int retval;
7983+
7984+
rb_secure(2);
7985+
7986+
narg = setup_narg(cmd, &arg, io_p);
79767987
GetOpenFile(io, fptr);
79777988
retval = io_cntl(fptr->fd, cmd, narg, io_p);
79787989
if (retval < 0) rb_sys_fail_path(fptr->pathv);
7979-
if (RB_TYPE_P(arg, T_STRING) && RSTRING_PTR(arg)[len] != 17) {
7990+
if (RB_TYPE_P(arg, T_STRING) && RSTRING_PTR(arg)[RSTRING_LEN(arg)-1] != 17) {
79807991
rb_raise(rb_eArgError, "return value overflowed string");
79817992
}
79827993

0 commit comments

Comments
 (0)
0