1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

* io.c (io_fflush): need to check if closed after thread switch.

[ruby-dev:20351]

* io.c (fptr_finalize): ditto.

* string.c (rb_str_rindex_m): fixed wrong fix.  should move backward
  first only when matching from the end.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@4006 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
nobu 2003-06-26 18:24:58 +00:00
parent 894d2b643d
commit 7a425f71e3
3 changed files with 21 additions and 2 deletions

View file

@ -1,3 +1,13 @@
Fri Jun 27 03:24:54 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
* io.c (io_fflush): need to check if closed after thread switch.
[ruby-dev:20351]
* io.c (fptr_finalize): ditto.
* string.c (rb_str_rindex_m): fixed wrong fix. should move backward
first only when matching from the end.
Thu Jun 26 21:34:49 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net> Thu Jun 26 21:34:49 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
* class.c (class_instance_method_list): get rid of warning about * class.c (class_instance_method_list): get rid of warning about

6
io.c
View file

@ -301,7 +301,9 @@ io_fflush(f, fptr)
{ {
int n; int n;
rb_thread_fd_writable(fileno(f)); if (!rb_thread_fd_writable(fileno(f))) {
rb_io_check_closed(fptr);
}
for (;;) { for (;;) {
TRAP_BEG; TRAP_BEG;
n = fflush(f); n = fflush(f);
@ -1331,6 +1333,7 @@ fptr_finalize(fptr, noraise)
e = errno; e = errno;
break; break;
} }
if (!fptr->f2) break;
} }
fptr->f2 = 0; fptr->f2 = 0;
} }
@ -1339,6 +1342,7 @@ fptr_finalize(fptr, noraise)
while ((n1 = fclose(fptr->f)) < 0) { while ((n1 = fclose(fptr->f)) < 0) {
if (f2 != -1 || !(fptr->mode & FMODE_WBUF)) break; if (f2 != -1 || !(fptr->mode & FMODE_WBUF)) break;
if (!rb_io_wait_writable(f1)) break; if (!rb_io_wait_writable(f1)) break;
if (!fptr->f) break;
} }
fptr->f = 0; fptr->f = 0;
if (n1 < 0 && errno == EBADF && f1 == f2) { if (n1 < 0 && errno == EBADF && f1 == f2) {

View file

@ -1010,8 +1010,13 @@ rb_str_rindex_m(argc, argv, str)
char *p = RSTRING(str)->ptr + pos; char *p = RSTRING(str)->ptr + pos;
char *pbeg = RSTRING(str)->ptr; char *pbeg = RSTRING(str)->ptr;
while (pbeg <= --p) { if (pos == RSTRING(str)->len) {
if (pos == 0) return Qnil;
--p;
}
while (pbeg <= p) {
if (*p == c) return LONG2NUM(p - RSTRING(str)->ptr); if (*p == c) return LONG2NUM(p - RSTRING(str)->ptr);
p--;
} }
return Qnil; return Qnil;
} }