зеркало из https://github.com/github/ruby.git
19990920
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@533 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
Родитель
656cbdf2b7
Коммит
70a444b0cc
|
@ -1,3 +1,10 @@
|
||||||
|
Mon Sep 20 01:08:02 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
|
||||||
|
|
||||||
|
* 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 <matz@netlab.co.jp>
|
Sat Sep 18 13:45:43 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
|
||||||
|
|
||||||
* stable version 1.4.2 released.
|
* stable version 1.4.2 released.
|
||||||
|
|
1
ToDo
1
ToDo
|
@ -34,6 +34,7 @@ Standard Libraries
|
||||||
* Stream or Port, abstract superclass of IO ?
|
* Stream or Port, abstract superclass of IO ?
|
||||||
* String#{pred,prev}, String#downto
|
* String#{pred,prev}, String#downto
|
||||||
* optional stepsize argument for succ()
|
* optional stepsize argument for succ()
|
||||||
|
* Dir.glob(pat){|f|...}
|
||||||
|
|
||||||
Extension Libraries
|
Extension Libraries
|
||||||
|
|
||||||
|
|
|
@ -115,7 +115,7 @@ sock_new(class, fd)
|
||||||
#endif
|
#endif
|
||||||
fp->f2 = rb_fdopen(fd, "w");
|
fp->f2 = rb_fdopen(fd, "w");
|
||||||
fp->mode = FMODE_READWRITE;
|
fp->mode = FMODE_READWRITE;
|
||||||
rb_io_unbuffered(fp);
|
rb_io_synchronized(fp);
|
||||||
|
|
||||||
return (VALUE)sock;
|
return (VALUE)sock;
|
||||||
}
|
}
|
||||||
|
|
45
io.c
45
io.c
|
@ -442,6 +442,29 @@ read_all(port)
|
||||||
return str;
|
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
|
static VALUE
|
||||||
io_read(argc, argv, io)
|
io_read(argc, argv, io)
|
||||||
int argc;
|
int argc;
|
||||||
|
@ -465,9 +488,7 @@ io_read(argc, argv, io)
|
||||||
str = rb_str_new(0, len);
|
str = rb_str_new(0, len);
|
||||||
|
|
||||||
READ_CHECK(fptr->f);
|
READ_CHECK(fptr->f);
|
||||||
TRAP_BEG;
|
n = io_fread(RSTRING(str)->ptr, len, fptr->f);
|
||||||
n = fread(RSTRING(str)->ptr, 1, len, fptr->f);
|
|
||||||
TRAP_END;
|
|
||||||
if (n == 0) {
|
if (n == 0) {
|
||||||
if (feof(fptr->f)) return Qnil;
|
if (feof(fptr->f)) return Qnil;
|
||||||
rb_sys_fail(fptr->path);
|
rb_sys_fail(fptr->path);
|
||||||
|
@ -564,9 +585,7 @@ rb_io_gets_internal(argc, argv, io)
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
READ_CHECK(f);
|
READ_CHECK(f);
|
||||||
TRAP_BEG;
|
cnt = io_fread(buf, sizeof(buf), f);
|
||||||
cnt = fread(buf, 1, sizeof(buf), f);
|
|
||||||
TRAP_END;
|
|
||||||
if (cnt == 0) {
|
if (cnt == 0) {
|
||||||
if (ferror(f)) rb_sys_fail(fptr->path);
|
if (ferror(f)) rb_sys_fail(fptr->path);
|
||||||
c = EOF;
|
c = EOF;
|
||||||
|
@ -1388,14 +1407,18 @@ pipe_finalize(fptr)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
void
|
||||||
|
rb_io_synchronized(fptr)
|
||||||
|
OpenFile *fptr;
|
||||||
|
{
|
||||||
|
fptr->mode |= FMODE_SYNC;
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
rb_io_unbuffered(fptr)
|
rb_io_unbuffered(fptr)
|
||||||
OpenFile *fptr;
|
OpenFile *fptr;
|
||||||
{
|
{
|
||||||
if (fptr->f2 == 0) rb_raise(rb_eTypeError, "non-writable fptr");
|
rb_io_synchronized(fptr);
|
||||||
if (fptr->f != 0) setbuf(fptr->f, NULL);
|
|
||||||
setbuf(fptr->f2, NULL);
|
|
||||||
fptr->mode |= FMODE_SYNC;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static VALUE
|
static VALUE
|
||||||
|
@ -1421,7 +1444,7 @@ pipe_open(pname, mode)
|
||||||
if (modef & FMODE_READABLE) fptr->f = f;
|
if (modef & FMODE_READABLE) fptr->f = f;
|
||||||
if (modef & FMODE_WRITABLE) {
|
if (modef & FMODE_WRITABLE) {
|
||||||
fptr->f2 = f;
|
fptr->f2 = f;
|
||||||
rb_io_unbuffered(fptr);
|
rb_io_synchronized(fptr);
|
||||||
}
|
}
|
||||||
return (VALUE)port;
|
return (VALUE)port;
|
||||||
}
|
}
|
||||||
|
|
|
@ -47,7 +47,7 @@
|
||||||
ruby-block-end-re "\\)\\>\\|\\}\\|\\]\\)")
|
ruby-block-end-re "\\)\\>\\|\\}\\|\\]\\)")
|
||||||
)
|
)
|
||||||
|
|
||||||
(defconst ruby-operator-chars ",.+*/%-&|^~=<>:")
|
(defconst ruby-operator-chars "-,.+*/%&|^~=<>:")
|
||||||
(defconst ruby-operator-re (concat "[" ruby-operator-chars "]"))
|
(defconst ruby-operator-re (concat "[" ruby-operator-chars "]"))
|
||||||
|
|
||||||
(defconst ruby-symbol-chars "a-zA-Z0-9_")
|
(defconst ruby-symbol-chars "a-zA-Z0-9_")
|
||||||
|
|
2
rubyio.h
2
rubyio.h
|
@ -54,7 +54,7 @@ int rb_io_mode_flags _((const char*));
|
||||||
void rb_io_check_writable _((OpenFile*));
|
void rb_io_check_writable _((OpenFile*));
|
||||||
void rb_io_check_readable _((OpenFile*));
|
void rb_io_check_readable _((OpenFile*));
|
||||||
void rb_io_fptr_finalize _((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_io_check_closed _((OpenFile*));
|
||||||
void rb_eof_error _((void));
|
void rb_eof_error _((void));
|
||||||
|
|
||||||
|
|
Загрузка…
Ссылка в новой задаче