summaryrefslogtreecommitdiff
path: root/io.c
diff options
context:
space:
mode:
authormatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2002-03-25 06:18:07 +0000
committermatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2002-03-25 06:18:07 +0000
commite748f56a6bea5b17339d70b767311897769a7c97 (patch)
tree5fac7807a4677c97f177ddb7c01e9f240ea1d097 /io.c
parenta42bf2edd007da6ae32a4162236eca21b5c9d365 (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.c22
1 files changed, 13 insertions, 9 deletions
diff --git a/io.c b/io.c
index f170c4c379..b7c14ec565 100644
--- a/io.c
+++ b/io.c
@@ -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");
}
}
}