diff options
author | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2002-03-25 06:18:07 +0000 |
---|---|---|
committer | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2002-03-25 06:18:07 +0000 |
commit | e748f56a6bea5b17339d70b767311897769a7c97 (patch) | |
tree | 5fac7807a4677c97f177ddb7c01e9f240ea1d097 /io.c | |
parent | a42bf2edd007da6ae32a4162236eca21b5c9d365 (diff) |
* ext/socket/socket.c (bsock_do_not_rev_lookup_set): should not be
allowed when $SAFE > 3.
* eval.c (rb_thread_ready): THREAD_TO_KILL threads should not turn
into THREAD_RUNNABLE on wakeup.
* eval.c (rb_thread_list): THREAD_TO_KILL threads should be in the
list.
* eval.c (thgroup_list): ditto; by moving gid clearance from
rb_thread_cleanup().
* dir.c (fnmatch): "*/bar" (with FNM_PATHNAME flag) does not
match "foo/bar".
* io.c (read_all): files on /proc filesystem with zero stat size,
may have contents.
* ext/socket/socket.c (tcp_s_gethostbyname): refactored.
* ext/socket/socket.c (sock_s_gethostbyname): ditto.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@2271 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'io.c')
-rw-r--r-- | io.c | 22 |
1 files changed, 13 insertions, 9 deletions
@@ -626,17 +626,21 @@ read_all(port) #endif ) { + off_t pos; + if (st.st_size == 0) { - getc(fptr->f); /* force EOF */ - return rb_str_new(0, 0); + int c = getc(fptr->f); + + if (c == EOF) { + return rb_str_new(0, 0); + } + ungetc(c, fptr->f); } - else { - off_t pos = ftello(fptr->f); - if (st.st_size > pos && pos >= 0) { - siz = st.st_size - pos + 1; - if (siz > LONG_MAX) { - rb_raise(rb_eIOError, "file too big for single read"); - } + pos = ftello(fptr->f); + if (st.st_size > pos && pos >= 0) { + siz = st.st_size - pos + 1; + if (siz > LONG_MAX) { + rb_raise(rb_eIOError, "file too big for single read"); } } } |