Skip to content

Commit

Permalink
19990920
Browse files Browse the repository at this point in the history
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@533 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
  • Loading branch information
matz committed Sep 20, 1999
1 parent 656cbdf commit 70a444b
Show file tree
Hide file tree
Showing 6 changed files with 45 additions and 14 deletions.
7 changes: 7 additions & 0 deletions ChangeLog
Original file line number Diff line number Diff line change
@@ -1,3 +1,10 @@
Mon Sep 20 01:08:02 1999 Yukihiro Matsumoto <[email protected]>

* io.c (io_fread): should not block other threads.

* io.c (rb_io_synchronized): renamed from rb_io_unbuffered(); do
not call setbuf(NULL) any more.

Sat Sep 18 13:45:43 1999 Yukihiro Matsumoto <[email protected]>

* stable version 1.4.2 released.
Expand Down
1 change: 1 addition & 0 deletions ToDo
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ Standard Libraries
* Stream or Port, abstract superclass of IO ?
* String#{pred,prev}, String#downto
* optional stepsize argument for succ()
* Dir.glob(pat){|f|...}

Extension Libraries

Expand Down
2 changes: 1 addition & 1 deletion ext/socket/socket.c
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,7 @@ sock_new(class, fd)
#endif
fp->f2 = rb_fdopen(fd, "w");
fp->mode = FMODE_READWRITE;
rb_io_unbuffered(fp);
rb_io_synchronized(fp);

return (VALUE)sock;
}
Expand Down
45 changes: 34 additions & 11 deletions io.c
Original file line number Diff line number Diff line change
Expand Up @@ -442,6 +442,29 @@ read_all(port)
return str;
}

static size_t
io_fread(ptr, len, f)
char *ptr;
size_t len;
FILE *f;
{
size_t n = len;

while (n--) {
*ptr = getc(f);
if (*ptr == EOF) {
*ptr = '\0';
break;
}
ptr++;
if (!READ_DATA_PENDING(f)) {
rb_thread_wait_fd(fileno(f));
}
}

return len - n - 1;
}

static VALUE
io_read(argc, argv, io)
int argc;
Expand All @@ -465,9 +488,7 @@ io_read(argc, argv, io)
str = rb_str_new(0, len);

READ_CHECK(fptr->f);
TRAP_BEG;
n = fread(RSTRING(str)->ptr, 1, len, fptr->f);
TRAP_END;
n = io_fread(RSTRING(str)->ptr, len, fptr->f);
if (n == 0) {
if (feof(fptr->f)) return Qnil;
rb_sys_fail(fptr->path);
Expand Down Expand Up @@ -564,9 +585,7 @@ rb_io_gets_internal(argc, argv, io)
}
else {
READ_CHECK(f);
TRAP_BEG;
cnt = fread(buf, 1, sizeof(buf), f);
TRAP_END;
cnt = io_fread(buf, sizeof(buf), f);
if (cnt == 0) {
if (ferror(f)) rb_sys_fail(fptr->path);
c = EOF;
Expand Down Expand Up @@ -1389,15 +1408,19 @@ pipe_finalize(fptr)
#endif

void
rb_io_unbuffered(fptr)
rb_io_synchronized(fptr)
OpenFile *fptr;
{
if (fptr->f2 == 0) rb_raise(rb_eTypeError, "non-writable fptr");
if (fptr->f != 0) setbuf(fptr->f, NULL);
setbuf(fptr->f2, NULL);
fptr->mode |= FMODE_SYNC;
}

void
rb_io_unbuffered(fptr)
OpenFile *fptr;
{
rb_io_synchronized(fptr);
}

static VALUE
pipe_open(pname, mode)
char *pname, *mode;
Expand All @@ -1421,7 +1444,7 @@ pipe_open(pname, mode)
if (modef & FMODE_READABLE) fptr->f = f;
if (modef & FMODE_WRITABLE) {
fptr->f2 = f;
rb_io_unbuffered(fptr);
rb_io_synchronized(fptr);
}
return (VALUE)port;
}
Expand Down
2 changes: 1 addition & 1 deletion misc/ruby-mode.el
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@
ruby-block-end-re "\\)\\>\\|\\}\\|\\]\\)")
)

(defconst ruby-operator-chars ",.+*/%-&|^~=<>:")
(defconst ruby-operator-chars "-,.+*/%&|^~=<>:")
(defconst ruby-operator-re (concat "[" ruby-operator-chars "]"))

(defconst ruby-symbol-chars "a-zA-Z0-9_")
Expand Down
2 changes: 1 addition & 1 deletion rubyio.h
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ int rb_io_mode_flags _((const char*));
void rb_io_check_writable _((OpenFile*));
void rb_io_check_readable _((OpenFile*));
void rb_io_fptr_finalize _((OpenFile*));
void rb_io_unbuffered _((OpenFile*));
void rb_io_synchronized _((OpenFile*));
void rb_io_check_closed _((OpenFile*));
void rb_eof_error _((void));

Expand Down

0 comments on commit 70a444b

Please sign in to comment.