diff options
author | loewis <loewis@138bc75d-0d04-0410-961f-82ee72b054a4> | 1999-12-21 18:10:24 +0000 |
---|---|---|
committer | loewis <loewis@138bc75d-0d04-0410-961f-82ee72b054a4> | 1999-12-21 18:10:24 +0000 |
commit | 94bbf7dc3ffaf29843ed2c2e087ca74a2bf0f9e6 (patch) | |
tree | 66a4b256b271dcd24e3041f2ae3fd51b171f71b5 /libio | |
parent | 70024855d27b27b04372d91182c5ec00dc364bbc (diff) | |
download | gcc-94bbf7dc3ffaf29843ed2c2e087ca74a2bf0f9e6.tar.gz |
* filebuf.cc (open): Support ios::ate if _G_HAVE_IO_FILE_OPEN.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@31057 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libio')
-rw-r--r-- | libio/ChangeLog | 4 | ||||
-rw-r--r-- | libio/filebuf.cc | 16 |
2 files changed, 16 insertions, 4 deletions
diff --git a/libio/ChangeLog b/libio/ChangeLog index c903fc8748c..b582999f614 100644 --- a/libio/ChangeLog +++ b/libio/ChangeLog @@ -1,3 +1,7 @@ +1999-12-21 Martin v. Löwis <loewis@informatik.hu-berlin.de> + + * filebuf.cc (open): Support ios::ate if _G_HAVE_IO_FILE_OPEN. + 1999-12-15 Jason Merrill <jason@casey.cygnus.com> * filedoalloc.c, floatio.h, iovfprintf.c, iovfscanf.c: Remove diff --git a/libio/filebuf.cc b/libio/filebuf.cc index 422d442736e..0b0fd6d88d3 100644 --- a/libio/filebuf.cc +++ b/libio/filebuf.cc @@ -1,5 +1,5 @@ /* This is part of libio/iostream, providing -*- C++ -*- input/output. -Copyright (C) 1993, 1995 Free Software Foundation +Copyright (C) 1993, 1995, 1999 Free Software Foundation This file is part of the GNU IO Library. This library is free software; you can redistribute it and/or modify it under the @@ -112,15 +112,23 @@ filebuf* filebuf::open(const char *filename, ios::openmode mode, int prot) if (mode & (int)ios::noreplace) posix_mode |= O_EXCL; #if _G_HAVE_IO_FILE_OPEN - return (filebuf*)_IO_file_open (this, filename, posix_mode, prot, - read_write, 0); + if (!_IO_file_open (this, filename, posix_mode, prot, + read_write, 0)) + return NULL; + if (mode & ios::ate) { + if (pubseekoff(0, ios::end) == EOF) { + _IO_un_link (this); + return NULL; + } + } + return this; #else int fd = ::open(filename, posix_mode, prot); if (fd < 0) return NULL; _fileno = fd; xsetflags(read_write, _IO_NO_READS+_IO_NO_WRITES+_IO_IS_APPENDING); - if (mode & (ios::ate|ios::app)) { + if (mode & ios::ate) { if (pubseekoff(0, ios::end) == EOF) return NULL; } |