summaryrefslogtreecommitdiff
path: root/file.c
diff options
context:
space:
mode:
authormatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2004-09-18 06:56:38 +0000
committermatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2004-09-18 06:56:38 +0000
commitde5a85496ac4ae7bd24b5fc7acb8001a5e4d8b7d (patch)
tree0ad108b04b1012522217a02b8e7f7dd940943759 /file.c
parent4c28c7d1af7ce6c30cc1bc9c0e5685c0ef17dc13 (diff)
* array.c (rb_ary_equal): element size might change during
comparison. [ruby-dev:24254] * array.c (rb_ary_diff): ditto. [ruby-dev:24274] * array.c (rb_ary_select): ditto. [ruby-dev:24278] * array.c (rb_ary_delete): ditto. [ruby-dev:24283] * array.c (rb_ary_rindex): ditto. [ruby-dev:24275] * array.c (rb_ary_initialize): element size might change during initializing block. [ruby-dev:24284] * dir.c (dir_s_chdir): avoid memory leak and unnecessary chdir to the original directory when exception has caused in changing direcotry or within block. thanks to Johan Holmberg <holmberg@iar.se> [ruby-core:03446] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@6922 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'file.c')
-rw-r--r--file.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/file.c b/file.c
index 7f5452b..a66e444 100644
--- a/file.c
+++ b/file.c
@@ -2853,18 +2853,21 @@ rb_file_truncate(obj, len)
VALUE obj, len;
{
OpenFile *fptr;
+ FILE *f;
rb_secure(2);
GetOpenFile(obj, fptr);
if (!(fptr->mode & FMODE_WRITABLE)) {
rb_raise(rb_eIOError, "not opened for writing");
}
+ f = GetWriteFile(fptr);
+ fflush(f);
#ifdef HAVE_TRUNCATE
- if (ftruncate(fileno(fptr->f), NUM2OFFT(len)) < 0)
+ if (ftruncate(fileno(f), NUM2OFFT(len)) < 0)
rb_sys_fail(fptr->path);
#else
# ifdef HAVE_CHSIZE
- if (chsize(fileno(fptr->f), NUM2OFFT(len)) < 0)
+ if (chsize(fileno(f), NUM2OFFT(len)) < 0)
rb_sys_fail(fptr->path);
# else
rb_notimplement();