natFileChannelPosix.cc (mapImpl): Extend file, when writing, if it is too short.
http://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=205157 * gnu/java/nio/channels/natFileChannelPosix.cc (mapImpl): Extend file, when writing, if it is too short. From-SVN: r123447
This commit is contained in:
parent
cb7ad97b41
commit
8854e14c61
@ -1,3 +1,9 @@
|
||||
2007-04-02 Tom Tromey <tromey@redhat.com>
|
||||
|
||||
http://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=205157
|
||||
* gnu/java/nio/channels/natFileChannelPosix.cc (mapImpl): Extend
|
||||
file, when writing, if it is too short.
|
||||
|
||||
2007-04-02 Tom Tromey <tromey@redhat.com>
|
||||
|
||||
https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=233406
|
||||
|
@ -1,7 +1,7 @@
|
||||
|
||||
// natFileChannelImplPosix.cc - Native part of FileChannelImpl class.
|
||||
|
||||
/* Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2006 Free Software Foundation
|
||||
/* Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2006, 2007 Free Software Foundation
|
||||
|
||||
This file is part of libgcj.
|
||||
|
||||
@ -499,6 +499,18 @@ FileChannelImpl::mapImpl (jchar mmode, jlong position, jint size)
|
||||
{
|
||||
prot = PROT_READ|PROT_WRITE;
|
||||
flags = mmode == '+' ? MAP_SHARED : MAP_PRIVATE;
|
||||
|
||||
// If the file is too short, we must extend it. While using
|
||||
// ftruncate() to extend a file is not portable in general, it
|
||||
// should work on all systems where you can mmap() a file.
|
||||
struct stat st;
|
||||
if (fstat (fd, &st) == -1)
|
||||
throw new IOException (JvNewStringLatin1 (strerror (errno)));
|
||||
if (position + size > st.st_size)
|
||||
{
|
||||
if (ftruncate (fd, position + size) == -1)
|
||||
throw new IOException (JvNewStringLatin1 (strerror (errno)));
|
||||
}
|
||||
}
|
||||
jint page_size = ::getpagesize();
|
||||
jint offset = position & ~(page_size-1);
|
||||
|
Loading…
Reference in New Issue
Block a user