Commit e9c46bb7 by Phil Edwards

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
parent af19c653
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> 2001-12-16 Nathan Sidwell <nathan@codesourcery.com>
* po/Makefile.am (.po.mo): Use POSIXLY_CORRECT argument ordering. * po/Makefile.am (.po.mo): Use POSIXLY_CORRECT argument ordering.
......
...@@ -134,6 +134,10 @@ namespace std ...@@ -134,6 +134,10 @@ namespace std
__basic_file<_CharT>::is_open() { return _M_cfile != 0; } __basic_file<_CharT>::is_open() { return _M_cfile != 0; }
template<typename _CharT> template<typename _CharT>
int
__basic_file<_CharT>::fd() { return fileno(_M_cfile) ; }
template<typename _CharT>
__basic_file<_CharT>* __basic_file<_CharT>*
__basic_file<_CharT>::close() __basic_file<_CharT>::close()
{ {
......
...@@ -168,6 +168,9 @@ namespace std ...@@ -168,6 +168,9 @@ namespace std
bool bool
is_open(); is_open();
int
fd();
// NB: Must match FILE specific jump table starting here--this // NB: Must match FILE specific jump table starting here--this
// means all virtual functions starting with the dtor must match, // means all virtual functions starting with the dtor must match,
// slot by slot. For glibc-based dystems, this means the _IO_FILE // slot by slot. For glibc-based dystems, this means the _IO_FILE
......
...@@ -139,6 +139,14 @@ namespace std ...@@ -139,6 +139,14 @@ namespace std
} }
template<typename _CharT, typename _Traits> 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* typename basic_filebuf<_CharT, _Traits>::__filebuf_type*
basic_filebuf<_CharT, _Traits>:: basic_filebuf<_CharT, _Traits>::
open(const char* __s, ios_base::openmode __mode) open(const char* __s, ios_base::openmode __mode)
......
...@@ -97,6 +97,10 @@ namespace std ...@@ -97,6 +97,10 @@ namespace std
basic_filebuf(__c_file_type* __f, ios_base::openmode __mode, basic_filebuf(__c_file_type* __f, ios_base::openmode __mode,
int_type __s = static_cast<int_type>(BUFSIZ)); int_type __s = static_cast<int_type>(BUFSIZ));
// Non-standard member:
int
fd();
virtual virtual
~basic_filebuf() ~basic_filebuf()
{ {
......
// 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 // 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 // software; you can redistribute it and/or modify it under the
...@@ -24,7 +24,6 @@ ...@@ -24,7 +24,6 @@
// the non-portable functionality in the libstdc++-v3 IO library // the non-portable functionality in the libstdc++-v3 IO library
#include <fstream> #include <fstream>
#include <cassert>
#include <unistd.h> #include <unistd.h>
#include <fcntl.h> #include <fcntl.h>
#include <testsuite_hooks.h> #include <testsuite_hooks.h>
...@@ -32,9 +31,9 @@ ...@@ -32,9 +31,9 @@
// verify that std::filebuf doesn't close files that it didn't open // verify that std::filebuf doesn't close files that it didn't open
// when using the following std::filebuf ctor: // when using the following std::filebuf ctor:
// //
// std::filebuf(int __fd, // std::filebuf(__c_file_type* __f,
// const char* __unused, // ios_base::openmode __mode,
// ios_base::openmode __mode); // int_type __s);
// //
// thanks to "George T. Talbot" <george@moberg.com> for uncovering // thanks to "George T. Talbot" <george@moberg.com> for uncovering
// this bug/situation. // this bug/situation.
...@@ -78,10 +77,30 @@ test_01() ...@@ -78,10 +77,30 @@ test_01()
return test; 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 int
main() main()
{ {
test_01(); test_01();
test_02();
return 0; return 0;
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment