You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stdcxx.apache.org by se...@apache.org on 2008/11/01 22:26:26 UTC
svn commit: r709780 - /stdcxx/branches/4.2.x/tests/iostream/27.filebuf.cpp
Author: sebor
Date: Sat Nov 1 14:26:25 2008
New Revision: 709780
URL: http://svn.apache.org/viewvc?rev=709780&view=rev
Log:
2008-11-01 Martin Sebor <se...@roguewave.com>
* tests/iostream/27.filebuf.cpp (test_open): Verified that
the filebuf::open((char*)0) extension doesn't leak file
descriptors.
Modified:
stdcxx/branches/4.2.x/tests/iostream/27.filebuf.cpp
Modified: stdcxx/branches/4.2.x/tests/iostream/27.filebuf.cpp
URL: http://svn.apache.org/viewvc/stdcxx/branches/4.2.x/tests/iostream/27.filebuf.cpp?rev=709780&r1=709779&r2=709780&view=diff
==============================================================================
--- stdcxx/branches/4.2.x/tests/iostream/27.filebuf.cpp (original)
+++ stdcxx/branches/4.2.x/tests/iostream/27.filebuf.cpp Sat Nov 1 14:26:25 2008
@@ -870,6 +870,11 @@
BEGIN_MODE (std::ios::in | iomodes [minx],
", file name = 0 [extension]");
+ int fdcount [2];
+ int next_fd [2];
+
+ next_fd [0] = rw_nextfd (fdcount + 0);
+
// verify that open() succeeds when the first argument
// is the null pointer (the call creates a temporary
// file and opens it for reading -- such a file may not
@@ -882,8 +887,27 @@
rw_assert (fb.is_open (), __FILE__, __LINE__,
"basic_filebuf<%s>::is_open()", tname);
- // FIXME: verify that the call to close removes the file
+ // verify that a single file descriptor has been allocated
+ next_fd [1] = rw_nextfd (fdcount + 1);
+
+ rw_assert ( next_fd [0] + 1 == next_fd [1]
+ && fdcount [0] + 1 == fdcount [1],
+ __FILE__, __LINE__,
+ "%d file descriptor leak(s) detected after construction",
+ fdcount [1] - fdcount [0]);
+
fb.close ();
+
+ // verify that a single file descriptor has been deallocated
+ next_fd [1] = rw_nextfd (fdcount + 1);
+
+ rw_assert (next_fd [0] == next_fd [1] && fdcount [0] == fdcount [1],
+ __FILE__, __LINE__,
+ "%d file descriptor leak(s) detected after close()",
+ fdcount [1] - fdcount [0]);
+
+ // FIXME: verify that the temporary file has been deleted
+ // from the file system
}
//////////////////////////////////////////////////////////////////
@@ -894,6 +918,11 @@
BEGIN_MODE (std::ios::out | iomodes [minx],
", file name = 0 [extension]");
+ int fdcount [2];
+ int next_fd [2];
+
+ next_fd [0] = rw_nextfd (fdcount + 0);
+
// verify that open() succeeds when the first argument
// is the null pointer (the call creates a temporary
// file and opens it for writing)
@@ -904,8 +933,27 @@
rw_assert (fb.is_open (), __FILE__, __LINE__,
"basic_filebuf<%s>::is_open()", tname);
- // FIXME: verify that the call to close removes the file
+ // verify that a single file descriptor has been allocated
+ next_fd [1] = rw_nextfd (fdcount + 1);
+
+ rw_assert ( next_fd [0] + 1 == next_fd [1]
+ && fdcount [0] + 1 == fdcount [1],
+ __FILE__, __LINE__,
+ "%d file descriptor leak(s) detected after construction",
+ fdcount [1] - fdcount [0]);
+
fb.close ();
+
+ // verify that a single file descriptor has been deallocated
+ next_fd [1] = rw_nextfd (fdcount + 1);
+
+ rw_assert (next_fd [0] == next_fd [1] && fdcount [0] == fdcount [1],
+ __FILE__, __LINE__,
+ "%d file descriptor leak(s) detected after close()",
+ fdcount [1] - fdcount [0]);
+
+ // FIXME: verify that the temporary file has been deleted
+ // from the file system
}
//////////////////////////////////////////////////////////////////
@@ -916,14 +964,38 @@
BEGIN_MODE (std::ios::in | std::ios::out | iomodes [minx],
", file name = 0 [extension]");
+ int fdcount [2];
+ int next_fd [2];
+
+ next_fd [0] = rw_nextfd (fdcount + 0);
+
Filebuf fb;
fb.open ((const char*)0, mode);
rw_assert (fb.is_open (), __FILE__, __LINE__,
"basic_filebuf<%s>::is_open()", tname);
- // FIXME: verify that the call to close removes the file
+ // verify that a single file descriptor has been allocated
+ next_fd [1] = rw_nextfd (fdcount + 1);
+
+ rw_assert ( next_fd [0] + 1 == next_fd [1]
+ && fdcount [0] + 1 == fdcount [1],
+ __FILE__, __LINE__,
+ "%d file descriptor leak(s) detected after construction",
+ fdcount [1] - fdcount [0]);
+
fb.close ();
+
+ // verify that a single file descriptor has been deallocated
+ next_fd [1] = rw_nextfd (fdcount + 1);
+
+ rw_assert (next_fd [0] == next_fd [1] && fdcount [0] == fdcount [1],
+ __FILE__, __LINE__,
+ "%d file descriptor leak(s) detected after close()",
+ fdcount [1] - fdcount [0]);
+
+ // FIXME: verify that the temporary file has been deleted
+ // from the file system
}
@@ -2801,4 +2873,3 @@
"", // no comment
run_test, "", 0);
}
-