basic_file.h (__basic_file::fd): New function.
2001-12-17 Phil Edwards <pme@gcc.gnu.org> * include/bits/basic_file.h (__basic_file::fd): New function. * config/io/basic_file_stdio.h (__basic_file::fd): Define. * include/bits/std_fstream.h (basic_filebuf::fd): New function. * include/bits/fstream.tcc (basic_filebuf::fd): Define. * testsuite/27_io/filebuf_members.cc (test_02): New test. From-SVN: r48107
This commit is contained in:
parent
af19c653a8
commit
e9c46bb75e
@ -1,3 +1,11 @@
|
||||
2001-12-17 Phil Edwards <pme@gcc.gnu.org>
|
||||
|
||||
* include/bits/basic_file.h (__basic_file::fd): New function.
|
||||
* config/io/basic_file_stdio.h (__basic_file::fd): Define.
|
||||
* include/bits/std_fstream.h (basic_filebuf::fd): New function.
|
||||
* include/bits/fstream.tcc (basic_filebuf::fd): Define.
|
||||
* testsuite/27_io/filebuf_members.cc (test_02): New test.
|
||||
|
||||
2001-12-16 Nathan Sidwell <nathan@codesourcery.com>
|
||||
|
||||
* po/Makefile.am (.po.mo): Use POSIXLY_CORRECT argument ordering.
|
||||
|
@ -133,6 +133,10 @@ namespace std
|
||||
bool
|
||||
__basic_file<_CharT>::is_open() { return _M_cfile != 0; }
|
||||
|
||||
template<typename _CharT>
|
||||
int
|
||||
__basic_file<_CharT>::fd() { return fileno(_M_cfile) ; }
|
||||
|
||||
template<typename _CharT>
|
||||
__basic_file<_CharT>*
|
||||
__basic_file<_CharT>::close()
|
||||
|
@ -168,6 +168,9 @@ namespace std
|
||||
bool
|
||||
is_open();
|
||||
|
||||
int
|
||||
fd();
|
||||
|
||||
// NB: Must match FILE specific jump table starting here--this
|
||||
// means all virtual functions starting with the dtor must match,
|
||||
// slot by slot. For glibc-based dystems, this means the _IO_FILE
|
||||
|
@ -138,6 +138,14 @@ namespace std
|
||||
}
|
||||
}
|
||||
|
||||
template<typename _CharT, typename _Traits>
|
||||
int
|
||||
basic_filebuf<_CharT, _Traits>::
|
||||
fd()
|
||||
{
|
||||
return _M_file->fd();
|
||||
}
|
||||
|
||||
template<typename _CharT, typename _Traits>
|
||||
typename basic_filebuf<_CharT, _Traits>::__filebuf_type*
|
||||
basic_filebuf<_CharT, _Traits>::
|
||||
|
@ -97,6 +97,10 @@ namespace std
|
||||
basic_filebuf(__c_file_type* __f, ios_base::openmode __mode,
|
||||
int_type __s = static_cast<int_type>(BUFSIZ));
|
||||
|
||||
// Non-standard member:
|
||||
int
|
||||
fd();
|
||||
|
||||
virtual
|
||||
~basic_filebuf()
|
||||
{
|
||||
|
@ -1,4 +1,4 @@
|
||||
// Copyright (C) 2000 Free Software Foundation, Inc.
|
||||
// Copyright (C) 2001 Free Software Foundation, Inc.
|
||||
//
|
||||
// This file is part of the GNU ISO C++ Library. This library is free
|
||||
// software; you can redistribute it and/or modify it under the
|
||||
@ -24,7 +24,6 @@
|
||||
// the non-portable functionality in the libstdc++-v3 IO library
|
||||
|
||||
#include <fstream>
|
||||
#include <cassert>
|
||||
#include <unistd.h>
|
||||
#include <fcntl.h>
|
||||
#include <testsuite_hooks.h>
|
||||
@ -32,9 +31,9 @@
|
||||
// verify that std::filebuf doesn't close files that it didn't open
|
||||
// when using the following std::filebuf ctor:
|
||||
//
|
||||
// std::filebuf(int __fd,
|
||||
// const char* __unused,
|
||||
// ios_base::openmode __mode);
|
||||
// std::filebuf(__c_file_type* __f,
|
||||
// ios_base::openmode __mode,
|
||||
// int_type __s);
|
||||
//
|
||||
// thanks to "George T. Talbot" <george@moberg.com> for uncovering
|
||||
// this bug/situation.
|
||||
@ -78,10 +77,30 @@ test_01()
|
||||
return test;
|
||||
}
|
||||
|
||||
int
|
||||
test_02()
|
||||
{
|
||||
int first_fd = ::open(name_01, O_RDONLY);
|
||||
VERIFY( first_fd != -1 );
|
||||
FILE* first_file = ::fdopen(first_fd, "r");
|
||||
VERIFY( first_file != NULL );
|
||||
std::filebuf fb (first_file, std::ios_base::in);
|
||||
|
||||
int second_fd = fb.fd();
|
||||
|
||||
bool test = first_fd == second_fd;
|
||||
|
||||
#ifdef DEBUG_ASSERT
|
||||
assert(test);
|
||||
#endif
|
||||
|
||||
return test;
|
||||
}
|
||||
|
||||
int
|
||||
main()
|
||||
{
|
||||
test_01();
|
||||
test_02();
|
||||
return 0;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user