mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* io.c: fixed types.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@23289 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
d222c7533c
commit
5a809d60bd
1 changed files with 85 additions and 61 deletions
146
io.c
146
io.c
|
@ -107,6 +107,8 @@ extern void Init_File(void);
|
|||
# endif
|
||||
#endif
|
||||
|
||||
#define numberof(array) (int)(sizeof(array) / sizeof((array)[0]))
|
||||
|
||||
VALUE rb_cIO;
|
||||
VALUE rb_eEOFError;
|
||||
VALUE rb_eIOError;
|
||||
|
@ -320,13 +322,17 @@ static rb_encoding *io_input_encoding(rb_io_t *fptr);
|
|||
static void
|
||||
io_ungetbyte(VALUE str, rb_io_t *fptr)
|
||||
{
|
||||
int len = RSTRING_LEN(str);
|
||||
long len = RSTRING_LEN(str);
|
||||
|
||||
if (fptr->rbuf == NULL) {
|
||||
fptr->rbuf_off = 0;
|
||||
fptr->rbuf_len = 0;
|
||||
#if SIZEOF_LONG > SIZEOF_INT
|
||||
if (len > INT_MAX)
|
||||
rb_raise(rb_eIOError, "ungetbyte failed");
|
||||
#endif
|
||||
if (len > 8192)
|
||||
fptr->rbuf_capa = len;
|
||||
fptr->rbuf_capa = (int)len;
|
||||
else
|
||||
fptr->rbuf_capa = 8192;
|
||||
fptr->rbuf = ALLOC_N(char, fptr->rbuf_capa);
|
||||
|
@ -340,8 +346,8 @@ io_ungetbyte(VALUE str, rb_io_t *fptr)
|
|||
char, fptr->rbuf_len);
|
||||
fptr->rbuf_off = fptr->rbuf_capa-fptr->rbuf_len;
|
||||
}
|
||||
fptr->rbuf_off-=len;
|
||||
fptr->rbuf_len+=len;
|
||||
fptr->rbuf_off-=(int)len;
|
||||
fptr->rbuf_len+=(int)len;
|
||||
MEMMOVE(fptr->rbuf+fptr->rbuf_off, RSTRING_PTR(str), char, len);
|
||||
}
|
||||
|
||||
|
@ -516,7 +522,7 @@ internal_write_func(void *ptr)
|
|||
return write(iis->fd, iis->buf, iis->capa);
|
||||
}
|
||||
|
||||
static int
|
||||
static ssize_t
|
||||
rb_read_internal(int fd, void *buf, size_t count)
|
||||
{
|
||||
struct io_internal_struct iis;
|
||||
|
@ -524,10 +530,10 @@ rb_read_internal(int fd, void *buf, size_t count)
|
|||
iis.buf = buf;
|
||||
iis.capa = count;
|
||||
|
||||
return rb_thread_blocking_region(internal_read_func, &iis, RUBY_UBF_IO, 0);
|
||||
return (ssize_t)rb_thread_blocking_region(internal_read_func, &iis, RUBY_UBF_IO, 0);
|
||||
}
|
||||
|
||||
static int
|
||||
static ssize_t
|
||||
rb_write_internal(int fd, void *buf, size_t count)
|
||||
{
|
||||
struct io_internal_struct iis;
|
||||
|
@ -535,7 +541,7 @@ rb_write_internal(int fd, void *buf, size_t count)
|
|||
iis.buf = buf;
|
||||
iis.capa = count;
|
||||
|
||||
return rb_thread_blocking_region(internal_write_func, &iis, RUBY_UBF_IO, 0);
|
||||
return (ssize_t)rb_thread_blocking_region(internal_write_func, &iis, RUBY_UBF_IO, 0);
|
||||
}
|
||||
|
||||
static long
|
||||
|
@ -587,8 +593,8 @@ io_fflush(rb_io_t *fptr)
|
|||
return 0;
|
||||
}
|
||||
if (0 <= r) {
|
||||
fptr->wbuf_off += r;
|
||||
fptr->wbuf_len -= r;
|
||||
fptr->wbuf_off += (int)r;
|
||||
fptr->wbuf_len -= (int)r;
|
||||
errno = EAGAIN;
|
||||
}
|
||||
if (rb_io_wait_writable(fptr->fd)) {
|
||||
|
@ -801,7 +807,7 @@ io_binwrite(VALUE str, rb_io_t *fptr, int nosync)
|
|||
fptr->wbuf_off = 0;
|
||||
}
|
||||
MEMMOVE(fptr->wbuf+fptr->wbuf_off+fptr->wbuf_len, RSTRING_PTR(str)+offset, char, len);
|
||||
fptr->wbuf_len += len;
|
||||
fptr->wbuf_len += (int)len;
|
||||
n = 0;
|
||||
}
|
||||
if (io_fflush(fptr) < 0)
|
||||
|
@ -846,7 +852,7 @@ io_binwrite(VALUE str, rb_io_t *fptr, int nosync)
|
|||
fptr->wbuf_off = 0;
|
||||
}
|
||||
MEMMOVE(fptr->wbuf+fptr->wbuf_off+fptr->wbuf_len, RSTRING_PTR(str)+offset, char, len);
|
||||
fptr->wbuf_len += len;
|
||||
fptr->wbuf_len += (int)len;
|
||||
return len;
|
||||
}
|
||||
|
||||
|
@ -1149,7 +1155,7 @@ rb_io_rewind(VALUE io)
|
|||
static int
|
||||
io_fillbuf(rb_io_t *fptr)
|
||||
{
|
||||
int r;
|
||||
ssize_t r;
|
||||
|
||||
if (fptr->mode & FMODE_EOF) {
|
||||
return -1;
|
||||
|
@ -1171,7 +1177,7 @@ io_fillbuf(rb_io_t *fptr)
|
|||
rb_sys_fail_path(fptr->pathv);
|
||||
}
|
||||
fptr->rbuf_off = 0;
|
||||
fptr->rbuf_len = r;
|
||||
fptr->rbuf_len = (int)r; /* r should be <= rbuf_capa */
|
||||
if (r == 0) {
|
||||
io_set_eof(fptr);
|
||||
return -1; /* EOF */
|
||||
|
@ -1424,11 +1430,11 @@ rb_io_to_io(VALUE io)
|
|||
static long
|
||||
read_buffered_data(char *ptr, long len, rb_io_t *fptr)
|
||||
{
|
||||
long n;
|
||||
int n;
|
||||
|
||||
n = READ_DATA_PENDING_COUNT(fptr);
|
||||
if (n <= 0) return 0;
|
||||
if (n > len) n = len;
|
||||
if (n > len) n = (int)len;
|
||||
MEMMOVE(ptr, fptr->rbuf+fptr->rbuf_off, char, n);
|
||||
fptr->rbuf_off += n;
|
||||
fptr->rbuf_len -= n;
|
||||
|
@ -1440,7 +1446,7 @@ io_fread(VALUE str, long offset, rb_io_t *fptr)
|
|||
{
|
||||
long len = RSTRING_LEN(str) - offset;
|
||||
long n = len;
|
||||
int c;
|
||||
long c;
|
||||
|
||||
if (READ_DATA_PENDING(fptr) == 0) {
|
||||
while (n > 0) {
|
||||
|
@ -1570,9 +1576,9 @@ more_char(rb_io_t *fptr)
|
|||
ds = dp = (unsigned char *)fptr->cbuf + fptr->cbuf_off + fptr->cbuf_len;
|
||||
de = (unsigned char *)fptr->cbuf + fptr->cbuf_capa;
|
||||
res = rb_econv_convert(fptr->readconv, &sp, se, &dp, de, ECONV_PARTIAL_INPUT|ECONV_AFTER_OUTPUT);
|
||||
fptr->rbuf_off += sp - ss;
|
||||
fptr->rbuf_len -= sp - ss;
|
||||
fptr->cbuf_len += dp - ds;
|
||||
fptr->rbuf_off += (int)(sp - ss);
|
||||
fptr->rbuf_len -= (int)(sp - ss);
|
||||
fptr->cbuf_len += (int)(dp - ds);
|
||||
|
||||
putbackable = rb_econv_putbackable(fptr->readconv);
|
||||
if (putbackable) {
|
||||
|
@ -1599,7 +1605,7 @@ more_char(rb_io_t *fptr)
|
|||
ds = dp = (unsigned char *)fptr->cbuf + fptr->cbuf_off + fptr->cbuf_len;
|
||||
de = (unsigned char *)fptr->cbuf + fptr->cbuf_capa;
|
||||
res = rb_econv_convert(fptr->readconv, NULL, NULL, &dp, de, 0);
|
||||
fptr->cbuf_len += dp - ds;
|
||||
fptr->cbuf_len += (int)(dp - ds);
|
||||
rb_econv_check_error(fptr->readconv);
|
||||
}
|
||||
}
|
||||
|
@ -2104,16 +2110,17 @@ appendline(rb_io_t *fptr, int delim, VALUE *strp, long *lp)
|
|||
p = fptr->cbuf+fptr->cbuf_off;
|
||||
searchlen = fptr->cbuf_len;
|
||||
if (0 < limit && limit < searchlen)
|
||||
searchlen = limit;
|
||||
searchlen = (int)limit;
|
||||
e = memchr(p, delim, searchlen);
|
||||
if (e) {
|
||||
int len = (int)(e-p+1);
|
||||
if (NIL_P(str))
|
||||
*strp = str = rb_str_new(p, e-p+1);
|
||||
*strp = str = rb_str_new(p, len);
|
||||
else
|
||||
rb_str_buf_cat(str, p, e-p+1);
|
||||
fptr->cbuf_off += e-p+1;
|
||||
fptr->cbuf_len -= e-p+1;
|
||||
limit -= e-p+1;
|
||||
rb_str_buf_cat(str, p, len);
|
||||
fptr->cbuf_off += len;
|
||||
fptr->cbuf_len -= len;
|
||||
limit -= len;
|
||||
*lp = limit;
|
||||
return delim;
|
||||
}
|
||||
|
@ -2173,14 +2180,14 @@ static inline int
|
|||
swallow(rb_io_t *fptr, int term)
|
||||
{
|
||||
do {
|
||||
long cnt;
|
||||
size_t cnt;
|
||||
while ((cnt = READ_DATA_PENDING_COUNT(fptr)) > 0) {
|
||||
char buf[1024];
|
||||
const char *p = READ_DATA_PENDING_PTR(fptr);
|
||||
int i;
|
||||
if (cnt > sizeof buf) cnt = sizeof buf;
|
||||
if (*p != term) return Qtrue;
|
||||
i = cnt;
|
||||
i = (int)cnt;
|
||||
while (--i && *++p == term);
|
||||
if (!read_buffered_data(buf, cnt - i, fptr)) /* must not fail */
|
||||
rb_sys_fail_path(fptr->pathv);
|
||||
|
@ -2200,7 +2207,7 @@ rb_io_getline_fast(rb_io_t *fptr, rb_encoding *enc)
|
|||
int cr = 0;
|
||||
|
||||
for (;;) {
|
||||
long pending = READ_DATA_PENDING_COUNT(fptr);
|
||||
int pending = READ_DATA_PENDING_COUNT(fptr);
|
||||
|
||||
if (pending > 0) {
|
||||
const char *p = READ_DATA_PENDING_PTR(fptr);
|
||||
|
@ -2208,7 +2215,7 @@ rb_io_getline_fast(rb_io_t *fptr, rb_encoding *enc)
|
|||
|
||||
e = memchr(p, '\n', pending);
|
||||
if (e) {
|
||||
pending = e - p + 1;
|
||||
pending = (int)(e - p + 1);
|
||||
}
|
||||
if (NIL_P(str)) {
|
||||
str = rb_str_new(p, pending);
|
||||
|
@ -2981,7 +2988,11 @@ rb_io_ungetc(VALUE io, VALUE c)
|
|||
}
|
||||
if (NEED_READCONV(fptr)) {
|
||||
len = RSTRING_LEN(c);
|
||||
make_readconv(fptr, len);
|
||||
#if SIZEOF_LONG > SIZEOF_INT
|
||||
if (len > INT_MAX)
|
||||
rb_raise(rb_eIOError, "ungetc failed");
|
||||
#endif
|
||||
make_readconv(fptr, (int)len);
|
||||
if (fptr->cbuf_capa - fptr->cbuf_len < len)
|
||||
rb_raise(rb_eIOError, "ungetc failed");
|
||||
if (fptr->cbuf_off < len) {
|
||||
|
@ -2990,8 +3001,8 @@ rb_io_ungetc(VALUE io, VALUE c)
|
|||
char, fptr->cbuf_len);
|
||||
fptr->cbuf_off = fptr->cbuf_capa-fptr->cbuf_len;
|
||||
}
|
||||
fptr->cbuf_off -= len;
|
||||
fptr->cbuf_len += len;
|
||||
fptr->cbuf_off -= (int)len;
|
||||
fptr->cbuf_len += (int)len;
|
||||
MEMMOVE(fptr->cbuf+fptr->cbuf_off, RSTRING_PTR(c), char, len);
|
||||
}
|
||||
else {
|
||||
|
@ -3127,7 +3138,7 @@ finish_writeconv(rb_io_t *fptr, int noalloc)
|
|||
|
||||
if (!fptr->wbuf) {
|
||||
unsigned char buf[1024];
|
||||
int r;
|
||||
long r;
|
||||
|
||||
res = econv_destination_buffer_full;
|
||||
while (res == econv_destination_buffer_full) {
|
||||
|
@ -3169,7 +3180,7 @@ finish_writeconv(rb_io_t *fptr, int noalloc)
|
|||
ds = dp = (unsigned char *)fptr->wbuf + fptr->wbuf_off + fptr->wbuf_len;
|
||||
de = (unsigned char *)fptr->wbuf + fptr->wbuf_capa;
|
||||
res = rb_econv_convert(fptr->writeconv, NULL, NULL, &dp, de, 0);
|
||||
fptr->wbuf_len += dp - ds;
|
||||
fptr->wbuf_len += (int)(dp - ds);
|
||||
if (res == econv_invalid_byte_sequence ||
|
||||
res == econv_incomplete_input ||
|
||||
res == econv_undefined_conversion) {
|
||||
|
@ -3966,7 +3977,7 @@ parse_mode_enc(const char *estr, rb_encoding **enc_p, rb_encoding **enc2_p)
|
|||
|
||||
p = strrchr(estr, ':');
|
||||
if (p) {
|
||||
int len = (p++) - estr;
|
||||
long len = (p++) - estr;
|
||||
if (len == 0 || len > ENCODING_MAXNAMELEN)
|
||||
idx = -1;
|
||||
else {
|
||||
|
@ -4972,9 +4983,15 @@ rb_io_s_popen(int argc, VALUE *argv, VALUE klass)
|
|||
|
||||
tmp = rb_check_array_type(pname);
|
||||
if (!NIL_P(tmp)) {
|
||||
long len = RARRAY_LEN(tmp);
|
||||
#if SIZEOF_LONG > SIZEOF_INT
|
||||
if (len > INT_MAX) {
|
||||
rb_raise(rb_eArgError, "too many arguments");
|
||||
}
|
||||
#endif
|
||||
tmp = rb_ary_dup(tmp);
|
||||
RBASIC(tmp)->klass = 0;
|
||||
port = pipe_open_v(RARRAY_LEN(tmp), RARRAY_PTR(tmp), modestr, fmode, &convconfig);
|
||||
port = pipe_open_v((int)len, RARRAY_PTR(tmp), modestr, fmode, &convconfig);
|
||||
rb_ary_clear(tmp);
|
||||
}
|
||||
else {
|
||||
|
@ -6778,7 +6795,7 @@ select_end(VALUE arg)
|
|||
struct select_args *p = (struct select_args *)arg;
|
||||
int i;
|
||||
|
||||
for (i = 0; i < sizeof(p->fdsets) / sizeof(p->fdsets[0]); ++i)
|
||||
for (i = 0; i < numberof(p->fdsets); ++i)
|
||||
rb_fd_term(&p->fdsets[i]);
|
||||
return Qnil;
|
||||
}
|
||||
|
@ -6811,7 +6828,7 @@ rb_f_select(int argc, VALUE *argv, VALUE obj)
|
|||
args.timeout = &timerec;
|
||||
}
|
||||
|
||||
for (i = 0; i < sizeof(args.fdsets) / sizeof(args.fdsets[0]); ++i)
|
||||
for (i = 0; i < numberof(args.fdsets); ++i)
|
||||
rb_fd_init(&args.fdsets[i]);
|
||||
|
||||
#ifdef HAVE_RB_FD_INIT
|
||||
|
@ -6824,7 +6841,7 @@ rb_f_select(int argc, VALUE *argv, VALUE obj)
|
|||
}
|
||||
|
||||
static int
|
||||
io_cntl(int fd, int cmd, long narg, int io_p)
|
||||
io_cntl(int fd, unsigned long cmd, long narg, int io_p)
|
||||
{
|
||||
int retval;
|
||||
|
||||
|
@ -6832,7 +6849,7 @@ io_cntl(int fd, int cmd, long narg, int io_p)
|
|||
# if defined(__CYGWIN__)
|
||||
retval = io_p?ioctl(fd, cmd, (void*)narg):fcntl(fd, cmd, narg);
|
||||
# else
|
||||
retval = io_p?ioctl(fd, cmd, narg):fcntl(fd, cmd, narg);
|
||||
retval = io_p?ioctl(fd, cmd, narg):fcntl(fd, (int)cmd, narg);
|
||||
# endif
|
||||
#else
|
||||
if (!io_p) {
|
||||
|
@ -6846,7 +6863,7 @@ io_cntl(int fd, int cmd, long narg, int io_p)
|
|||
static VALUE
|
||||
rb_io_ctl(VALUE io, VALUE req, VALUE arg, int io_p)
|
||||
{
|
||||
int cmd = NUM2ULONG(req);
|
||||
unsigned long cmd = NUM2ULONG(req);
|
||||
rb_io_t *fptr;
|
||||
long len = 0;
|
||||
long narg = 0;
|
||||
|
@ -6901,13 +6918,13 @@ rb_io_ctl(VALUE io, VALUE req, VALUE arg, int io_p)
|
|||
}
|
||||
|
||||
if (!io_p && cmd == F_SETFL) {
|
||||
if (narg & O_NONBLOCK) {
|
||||
fptr->mode |= FMODE_WSPLIT_INITIALIZED;
|
||||
fptr->mode &= ~FMODE_WSPLIT;
|
||||
}
|
||||
else {
|
||||
fptr->mode &= ~(FMODE_WSPLIT_INITIALIZED|FMODE_WSPLIT);
|
||||
}
|
||||
if (narg & O_NONBLOCK) {
|
||||
fptr->mode |= FMODE_WSPLIT_INITIALIZED;
|
||||
fptr->mode &= ~FMODE_WSPLIT;
|
||||
}
|
||||
else {
|
||||
fptr->mode &= ~(FMODE_WSPLIT_INITIALIZED|FMODE_WSPLIT);
|
||||
}
|
||||
}
|
||||
|
||||
return INT2NUM(retval);
|
||||
|
@ -6961,7 +6978,7 @@ rb_io_fcntl(int argc, VALUE *argv, VALUE io)
|
|||
#define rb_io_fcntl rb_f_notimplement
|
||||
#endif
|
||||
|
||||
#if defined(HAVE_SYSCALL) && !defined(__CHECKER__)
|
||||
#if defined(HAVE_SYSCALL) && !defined(__CHECKER__) && SIZEOF_LONG == SIZEOF_INT
|
||||
/*
|
||||
* call-seq:
|
||||
* syscall(fixnum [, args...]) => integer
|
||||
|
@ -7001,7 +7018,7 @@ rb_f_syscall(int argc, VALUE *argv)
|
|||
rb_secure(2);
|
||||
if (argc == 0)
|
||||
rb_raise(rb_eArgError, "too few arguments for syscall");
|
||||
if (argc > sizeof(arg) / sizeof(arg[0]))
|
||||
if (argc > numberof(arg))
|
||||
rb_raise(rb_eArgError, "too many arguments for syscall");
|
||||
arg[0] = NUM2LONG(argv[0]); argv++;
|
||||
while (items--) {
|
||||
|
@ -7286,13 +7303,20 @@ open_key_args(int argc, VALUE *argv, struct foreach_arg *arg)
|
|||
v = rb_hash_aref(opt, sym_open_args);
|
||||
if (!NIL_P(v)) {
|
||||
VALUE args;
|
||||
long n;
|
||||
|
||||
v = rb_convert_type(v, T_ARRAY, "Array", "to_ary");
|
||||
args = rb_ary_new2(RARRAY_LEN(v)+1);
|
||||
n = RARRAY_LEN(v) + 1;
|
||||
#if SIZEOF_LONG > SIZEOF_INT
|
||||
if (n > INT_MAX) {
|
||||
rb_raise(rb_eArgError, "too many arguments");
|
||||
}
|
||||
#endif
|
||||
args = rb_ary_tmp_new(n);
|
||||
rb_ary_push(args, argv[0]);
|
||||
rb_ary_concat(args, v);
|
||||
|
||||
arg->io = rb_io_open_with_args(RARRAY_LEN(args), RARRAY_PTR(args));
|
||||
arg->io = rb_io_open_with_args((int)n, RARRAY_PTR(args));
|
||||
rb_ary_clear(args); /* prevent from GC */
|
||||
return;
|
||||
}
|
||||
arg->io = rb_io_open(argv[0], Qnil, Qnil, opt);
|
||||
|
@ -7622,7 +7646,7 @@ nogvl_copy_stream_sendfile(struct copy_stream_struct *stp)
|
|||
#endif
|
||||
|
||||
static ssize_t
|
||||
maygvl_copy_stream_read(struct copy_stream_struct *stp, char *buf, int len, off_t offset)
|
||||
maygvl_copy_stream_read(struct copy_stream_struct *stp, char *buf, size_t len, off_t offset)
|
||||
{
|
||||
ssize_t ss;
|
||||
retry_read:
|
||||
|
@ -7662,7 +7686,7 @@ maygvl_copy_stream_read(struct copy_stream_struct *stp, char *buf, int len, off_
|
|||
}
|
||||
|
||||
static int
|
||||
nogvl_copy_stream_write(struct copy_stream_struct *stp, char *buf, int len)
|
||||
nogvl_copy_stream_write(struct copy_stream_struct *stp, char *buf, size_t len)
|
||||
{
|
||||
ssize_t ss;
|
||||
int off = 0;
|
||||
|
@ -7678,8 +7702,8 @@ nogvl_copy_stream_write(struct copy_stream_struct *stp, char *buf, int len)
|
|||
stp->error_no = errno;
|
||||
return -1;
|
||||
}
|
||||
off += ss;
|
||||
len -= ss;
|
||||
off += (int)ss;
|
||||
len -= (int)ss;
|
||||
stp->total += ss;
|
||||
}
|
||||
return 0;
|
||||
|
@ -7715,7 +7739,7 @@ nogvl_copy_stream_read_write(struct copy_stream_struct *stp)
|
|||
}
|
||||
|
||||
while (use_eof || 0 < copy_length) {
|
||||
if (!use_eof && copy_length < sizeof(buf)) {
|
||||
if (!use_eof && copy_length < (off_t)sizeof(buf)) {
|
||||
len = (size_t)copy_length;
|
||||
}
|
||||
else {
|
||||
|
@ -7908,7 +7932,7 @@ copy_stream_body(VALUE arg)
|
|||
if (stp->src_offset == (off_t)-1 && src_fptr && src_fptr->rbuf_len) {
|
||||
size_t len = src_fptr->rbuf_len;
|
||||
VALUE str;
|
||||
if (stp->copy_length != (off_t)-1 && stp->copy_length < len) {
|
||||
if (stp->copy_length != (off_t)-1 && stp->copy_length < (off_t)len) {
|
||||
len = (size_t)stp->copy_length;
|
||||
}
|
||||
str = rb_str_buf_new(len);
|
||||
|
|
Loading…
Reference in a new issue