+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.
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()
}
}
+ 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>::
-// 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
// the non-portable functionality in the libstdc++-v3 IO library
#include <fstream>
-#include <cassert>
#include <unistd.h>
#include <fcntl.h>
#include <testsuite_hooks.h>
// 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.
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;
}