mirror of git://gcc.gnu.org/git/gcc.git
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>
|
2007-04-02 Tom Tromey <tromey@redhat.com>
|
||||||
|
|
||||||
https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=233406
|
https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=233406
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
|
|
||||||
// natFileChannelImplPosix.cc - Native part of FileChannelImpl class.
|
// 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.
|
This file is part of libgcj.
|
||||||
|
|
||||||
|
@ -499,6 +499,18 @@ FileChannelImpl::mapImpl (jchar mmode, jlong position, jint size)
|
||||||
{
|
{
|
||||||
prot = PROT_READ|PROT_WRITE;
|
prot = PROT_READ|PROT_WRITE;
|
||||||
flags = mmode == '+' ? MAP_SHARED : MAP_PRIVATE;
|
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 page_size = ::getpagesize();
|
||||||
jint offset = position & ~(page_size-1);
|
jint offset = position & ~(page_size-1);
|
||||||
|
|
Loading…
Reference in New Issue