Test cleanup with respect to use of deprecated tmpnam function. Also Windows port for these tests to use _tempnam. The bulk of this patch was donated anonymously. I've tested it on OS X and accept responsibility for it. If I've broken anyone's platform by switching from tmpnam to mktemp for the generation of temporary file names, just let me know. Should be easy to fix in test/support/platform_support.h

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@177755 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Howard Hinnant 2013-03-22 20:05:40 +00:00
parent 9b145da078
commit 06d8bf6ce2
25 changed files with 205 additions and 184 deletions

View File

@ -16,14 +16,14 @@
#include <fstream>
#include <cassert>
#include "platform_support.h"
int main()
{
char temp[L_tmpnam];
tmpnam(temp);
std::string temp = get_temp_file_name();
{
std::filebuf f;
assert(f.open(temp, std::ios_base::out | std::ios_base::in
assert(f.open(temp.c_str(), std::ios_base::out | std::ios_base::in
| std::ios_base::trunc) != 0);
assert(f.is_open());
assert(f.sputn("123", 3) == 3);
@ -35,10 +35,10 @@ int main()
assert(f2.is_open());
assert(f2.sgetc() == '2');
}
remove(temp);
std::remove(temp.c_str());
{
std::wfilebuf f;
assert(f.open(temp, std::ios_base::out | std::ios_base::in
assert(f.open(temp.c_str(), std::ios_base::out | std::ios_base::in
| std::ios_base::trunc) != 0);
assert(f.is_open());
assert(f.sputn(L"123", 3) == 3);
@ -50,5 +50,5 @@ int main()
assert(f2.is_open());
assert(f2.sgetc() == L'2');
}
remove(temp);
std::remove(temp.c_str());
}

View File

@ -16,15 +16,15 @@
#include <fstream>
#include <cassert>
#include "platform_support.h"
int main()
{
#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
char temp[L_tmpnam];
tmpnam(temp);
std::string temp = get_temp_file_name();
{
std::filebuf f;
assert(f.open(temp, std::ios_base::out | std::ios_base::in
assert(f.open(temp.c_str(), std::ios_base::out | std::ios_base::in
| std::ios_base::trunc) != 0);
assert(f.is_open());
assert(f.sputn("123", 3) == 3);
@ -36,10 +36,10 @@ int main()
assert(f2.is_open());
assert(f2.sgetc() == '2');
}
remove(temp);
std::remove(temp.c_str());
{
std::wfilebuf f;
assert(f.open(temp, std::ios_base::out | std::ios_base::in
assert(f.open(temp.c_str(), std::ios_base::out | std::ios_base::in
| std::ios_base::trunc) != 0);
assert(f.is_open());
assert(f.sputn(L"123", 3) == 3);
@ -51,6 +51,6 @@ int main()
assert(f2.is_open());
assert(f2.sgetc() == L'2');
}
remove(temp);
std::remove(temp.c_str());
#endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES
}

View File

@ -18,14 +18,14 @@
#include <fstream>
#include <cassert>
#include "platform_support.h"
int main()
{
char temp[L_tmpnam];
tmpnam(temp);
std::string temp = get_temp_file_name();
{
std::filebuf f;
assert(f.open(temp, std::ios_base::out | std::ios_base::in
assert(f.open(temp.c_str(), std::ios_base::out | std::ios_base::in
| std::ios_base::trunc) != 0);
assert(f.is_open());
assert(f.sputn("123", 3) == 3);
@ -37,10 +37,10 @@ int main()
assert(f2.is_open());
assert(f2.sgetc() == '2');
}
remove(temp);
std::remove(temp.c_str());
{
std::wfilebuf f;
assert(f.open(temp, std::ios_base::out | std::ios_base::in
assert(f.open(temp.c_str(), std::ios_base::out | std::ios_base::in
| std::ios_base::trunc) != 0);
assert(f.is_open());
assert(f.sputn(L"123", 3) == 3);
@ -52,5 +52,5 @@ int main()
assert(f2.is_open());
assert(f2.sgetc() == L'2');
}
remove(temp);
std::remove(temp.c_str());
}

View File

@ -16,15 +16,15 @@
#include <fstream>
#include <cassert>
#include "platform_support.h"
int main()
{
#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
char temp[L_tmpnam];
tmpnam(temp);
std::string temp = get_temp_file_name();
{
std::filebuf f;
assert(f.open(temp, std::ios_base::out | std::ios_base::in
assert(f.open(temp.c_str(), std::ios_base::out | std::ios_base::in
| std::ios_base::trunc) != 0);
assert(f.is_open());
assert(f.sputn("123", 3) == 3);
@ -35,10 +35,10 @@ int main()
assert(f2.is_open());
assert(f2.sgetc() == '2');
}
remove(temp);
std::remove(temp.c_str());
{
std::wfilebuf f;
assert(f.open(temp, std::ios_base::out | std::ios_base::in
assert(f.open(temp.c_str(), std::ios_base::out | std::ios_base::in
| std::ios_base::trunc) != 0);
assert(f.is_open());
assert(f.sputn(L"123", 3) == 3);
@ -49,6 +49,6 @@ int main()
assert(f2.is_open());
assert(f2.sgetc() == L'2');
}
remove(temp);
std::remove(temp.c_str());
#endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES
}

View File

@ -13,39 +13,39 @@
#include <fstream>
#include <cassert>
#include "platform_support.h"
int main()
{
char temp[L_tmpnam];
tmpnam(temp);
std::string temp = get_temp_file_name();
{
std::filebuf f;
assert(f.open(temp, std::ios_base::out) != 0);
assert(f.open(temp.c_str(), std::ios_base::out) != 0);
assert(f.is_open());
assert(f.sputn("123", 3) == 3);
}
{
std::filebuf f;
assert(f.open(temp, std::ios_base::in) != 0);
assert(f.open(temp.c_str(), std::ios_base::in) != 0);
assert(f.is_open());
assert(f.sbumpc() == '1');
assert(f.sbumpc() == '2');
assert(f.sbumpc() == '3');
}
remove(temp);
std::remove(temp.c_str());
{
std::wfilebuf f;
assert(f.open(temp, std::ios_base::out) != 0);
assert(f.open(temp.c_str(), std::ios_base::out) != 0);
assert(f.is_open());
assert(f.sputn(L"123", 3) == 3);
}
{
std::wfilebuf f;
assert(f.open(temp, std::ios_base::in) != 0);
assert(f.open(temp.c_str(), std::ios_base::in) != 0);
assert(f.is_open());
assert(f.sbumpc() == L'1');
assert(f.sbumpc() == L'2');
assert(f.sbumpc() == L'3');
}
remove(temp);
remove(temp.c_str());
}

View File

@ -16,16 +16,16 @@
#include <fstream>
#include <cassert>
#include "platform_support.h"
int main()
{
char temp1[L_tmpnam], temp2[L_tmpnam];
tmpnam(temp1);
tmpnam(temp2);
std::string temp1 = get_temp_file_name();
std::string temp2 = get_temp_file_name();
{
std::fstream fs1(temp1, std::ios_base::in | std::ios_base::out
std::fstream fs1(temp1.c_str(), std::ios_base::in | std::ios_base::out
| std::ios_base::trunc);
std::fstream fs2(temp2, std::ios_base::in | std::ios_base::out
std::fstream fs2(temp2.c_str(), std::ios_base::in | std::ios_base::out
| std::ios_base::trunc);
fs1 << 1 << ' ' << 2;
fs2 << 2 << ' ' << 1;
@ -43,12 +43,12 @@ int main()
fs2 >> i;
assert(i == 2);
}
std::remove(temp1);
std::remove(temp2);
std::remove(temp1.c_str());
std::remove(temp2.c_str());
{
std::wfstream fs1(temp1, std::ios_base::in | std::ios_base::out
std::wfstream fs1(temp1.c_str(), std::ios_base::in | std::ios_base::out
| std::ios_base::trunc);
std::wfstream fs2(temp2, std::ios_base::in | std::ios_base::out
std::wfstream fs2(temp2.c_str(), std::ios_base::in | std::ios_base::out
| std::ios_base::trunc);
fs1 << 1 << ' ' << 2;
fs2 << 2 << ' ' << 1;
@ -66,6 +66,6 @@ int main()
fs2 >> i;
assert(i == 2);
}
std::remove(temp1);
std::remove(temp2);
std::remove(temp1.c_str());
std::remove(temp2.c_str());
}

View File

@ -16,14 +16,14 @@
#include <fstream>
#include <cassert>
#include "platform_support.h"
int main()
{
#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
char temp[L_tmpnam];
tmpnam(temp);
std::string temp = get_temp_file_name();
{
std::fstream fso(temp, std::ios_base::in | std::ios_base::out
std::fstream fso(temp.c_str(), std::ios_base::in | std::ios_base::out
| std::ios_base::trunc);
std::fstream fs;
fs = move(fso);
@ -33,9 +33,9 @@ int main()
fs >> x;
assert(x == 3.25);
}
std::remove(temp);
std::remove(temp.c_str());
{
std::wfstream fso(temp, std::ios_base::in | std::ios_base::out
std::wfstream fso(temp.c_str(), std::ios_base::in | std::ios_base::out
| std::ios_base::trunc);
std::wfstream fs;
fs = move(fso);
@ -45,6 +45,6 @@ int main()
fs >> x;
assert(x == 3.25);
}
std::remove(temp);
std::remove(temp.c_str());
#endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES
}

View File

@ -17,16 +17,16 @@
#include <fstream>
#include <cassert>
#include "platform_support.h"
int main()
{
char temp1[L_tmpnam], temp2[L_tmpnam];
tmpnam(temp1);
tmpnam(temp2);
std::string temp1 = get_temp_file_name();
std::string temp2 = get_temp_file_name();
{
std::fstream fs1(temp1, std::ios_base::in | std::ios_base::out
std::fstream fs1(temp1.c_str(), std::ios_base::in | std::ios_base::out
| std::ios_base::trunc);
std::fstream fs2(temp2, std::ios_base::in | std::ios_base::out
std::fstream fs2(temp2.c_str(), std::ios_base::in | std::ios_base::out
| std::ios_base::trunc);
fs1 << 1 << ' ' << 2;
fs2 << 2 << ' ' << 1;
@ -44,12 +44,12 @@ int main()
fs2 >> i;
assert(i == 2);
}
std::remove(temp1);
std::remove(temp2);
std::remove(temp1.c_str());
std::remove(temp2.c_str());
{
std::wfstream fs1(temp1, std::ios_base::in | std::ios_base::out
std::wfstream fs1(temp1.c_str(), std::ios_base::in | std::ios_base::out
| std::ios_base::trunc);
std::wfstream fs2(temp2, std::ios_base::in | std::ios_base::out
std::wfstream fs2(temp2.c_str(), std::ios_base::in | std::ios_base::out
| std::ios_base::trunc);
fs1 << 1 << ' ' << 2;
fs2 << 2 << ' ' << 1;
@ -67,6 +67,6 @@ int main()
fs2 >> i;
assert(i == 2);
}
std::remove(temp1);
std::remove(temp2);
std::remove(temp1.c_str());
std::remove(temp2.c_str());
}

View File

@ -16,12 +16,12 @@
#include <fstream>
#include <cassert>
#include "platform_support.h"
int main()
{
#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
char temp[L_tmpnam];
tmpnam(temp);
std::string temp = get_temp_file_name();
{
std::fstream fso(temp, std::ios_base::in | std::ios_base::out
| std::ios_base::trunc);
@ -32,7 +32,7 @@ int main()
fs >> x;
assert(x == 3.25);
}
std::remove("test.dat");
std::remove(temp.c_str());
{
std::wfstream fso(temp, std::ios_base::in | std::ios_base::out
| std::ios_base::trunc);
@ -43,6 +43,6 @@ int main()
fs >> x;
assert(x == 3.25);
}
std::remove(temp);
std::remove(temp.c_str());
#endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES
}

View File

@ -16,13 +16,13 @@
#include <fstream>
#include <cassert>
#include "platform_support.h"
int main()
{
char temp[L_tmpnam];
tmpnam(temp);
std::string temp = get_temp_file_name();
{
std::fstream fs(temp, std::ios_base::in | std::ios_base::out
std::fstream fs(temp.c_str(), std::ios_base::in | std::ios_base::out
| std::ios_base::trunc);
double x = 0;
fs << 3.25;
@ -30,9 +30,9 @@ int main()
fs >> x;
assert(x == 3.25);
}
std::remove(temp);
std::remove(temp.c_str());
{
std::wfstream fs(temp, std::ios_base::in | std::ios_base::out
std::wfstream fs(temp.c_str(), std::ios_base::in | std::ios_base::out
| std::ios_base::trunc);
double x = 0;
fs << 3.25;
@ -40,5 +40,5 @@ int main()
fs >> x;
assert(x == 3.25);
}
std::remove(temp);
std::remove(temp.c_str());
}

View File

@ -16,13 +16,13 @@
#include <fstream>
#include <cassert>
#include "platform_support.h"
int main()
{
char temp[L_tmpnam];
tmpnam(temp);
std::string temp = get_temp_file_name();
{
std::fstream fs(std::string(temp),
std::fstream fs(temp,
std::ios_base::in | std::ios_base::out
| std::ios_base::trunc);
double x = 0;
@ -31,9 +31,9 @@ int main()
fs >> x;
assert(x == 3.25);
}
std::remove(temp);
std::remove(temp.c_str());
{
std::wfstream fs(std::string(temp),
std::wfstream fs(temp,
std::ios_base::in | std::ios_base::out
| std::ios_base::trunc);
double x = 0;
@ -42,5 +42,5 @@ int main()
fs >> x;
assert(x == 3.25);
}
std::remove(temp);
std::remove(temp.c_str());
}

View File

@ -16,27 +16,27 @@
#include <fstream>
#include <cassert>
#include "platform_support.h"
int main()
{
char temp[L_tmpnam];
tmpnam(temp);
std::string temp = get_temp_file_name();
{
std::fstream fs;
assert(!fs.is_open());
fs.open(temp, std::ios_base::out);
fs.open(temp.c_str(), std::ios_base::out);
assert(fs.is_open());
fs.close();
assert(!fs.is_open());
}
remove(temp);
std::remove(temp.c_str());
{
std::wfstream fs;
assert(!fs.is_open());
fs.open(temp, std::ios_base::out);
fs.open(temp.c_str(), std::ios_base::out);
assert(fs.is_open());
fs.close();
assert(!fs.is_open());
}
remove(temp);
std::remove(temp.c_str());
}

View File

@ -16,15 +16,15 @@
#include <fstream>
#include <cassert>
#include "platform_support.h"
int main()
{
char temp[L_tmpnam];
tmpnam(temp);
std::string temp = get_temp_file_name();
{
std::fstream fs;
assert(!fs.is_open());
fs.open(temp, std::ios_base::in | std::ios_base::out
fs.open(temp.c_str(), std::ios_base::in | std::ios_base::out
| std::ios_base::trunc);
assert(fs.is_open());
double x = 0;
@ -33,11 +33,11 @@ int main()
fs >> x;
assert(x == 3.25);
}
std::remove(temp);
std::remove(temp.c_str());
{
std::wfstream fs;
assert(!fs.is_open());
fs.open(temp, std::ios_base::in | std::ios_base::out
fs.open(temp.c_str(), std::ios_base::in | std::ios_base::out
| std::ios_base::trunc);
assert(fs.is_open());
double x = 0;
@ -46,5 +46,5 @@ int main()
fs >> x;
assert(x == 3.25);
}
std::remove(temp);
std::remove(temp.c_str());
}

View File

@ -16,15 +16,15 @@
#include <fstream>
#include <cassert>
#include "platform_support.h"
int main()
{
char temp[L_tmpnam];
tmpnam(temp);
std::string temp = get_temp_file_name();
{
std::fstream fs;
assert(!fs.is_open());
fs.open(std::string(temp), std::ios_base::in | std::ios_base::out
fs.open(temp, std::ios_base::in | std::ios_base::out
| std::ios_base::trunc);
assert(fs.is_open());
double x = 0;
@ -33,11 +33,11 @@ int main()
fs >> x;
assert(x == 3.25);
}
std::remove(temp);
std::remove(temp.c_str());
{
std::wfstream fs;
assert(!fs.is_open());
fs.open(std::string(temp), std::ios_base::in | std::ios_base::out
fs.open(temp, std::ios_base::in | std::ios_base::out
| std::ios_base::trunc);
assert(fs.is_open());
double x = 0;
@ -46,5 +46,5 @@ int main()
fs >> x;
assert(x == 3.25);
}
std::remove(temp);
std::remove(temp.c_str());
}

View File

@ -16,15 +16,15 @@
#include <fstream>
#include <cassert>
#include "platform_support.h"
int main()
{
char temp1[L_tmpnam], temp2[L_tmpnam];
tmpnam(temp1);
tmpnam(temp2);
std::string temp1 = get_temp_file_name();
std::string temp2 = get_temp_file_name();
{
std::ofstream fs1(temp1);
std::ofstream fs2(temp2);
std::ofstream fs1(temp1.c_str());
std::ofstream fs2(temp2.c_str());
fs1 << 3.25;
fs2 << 4.5;
fs1.swap(fs2);
@ -32,26 +32,26 @@ int main()
fs2 << ' ' << 4.5;
}
{
std::ifstream fs(temp1);
std::ifstream fs(temp1.c_str());
double x = 0;
fs >> x;
assert(x == 3.25);
fs >> x;
assert(x == 4.5);
}
remove(temp1);
std::remove(temp1.c_str());
{
std::ifstream fs(temp2);
std::ifstream fs(temp2.c_str());
double x = 0;
fs >> x;
assert(x == 4.5);
fs >> x;
assert(x == 3.25);
}
remove(temp2);
std::remove(temp2.c_str());
{
std::wofstream fs1(temp1);
std::wofstream fs2(temp2);
std::wofstream fs1(temp1.c_str());
std::wofstream fs2(temp2.c_str());
fs1 << 3.25;
fs2 << 4.5;
fs1.swap(fs2);
@ -59,21 +59,21 @@ int main()
fs2 << ' ' << 4.5;
}
{
std::wifstream fs(temp1);
std::wifstream fs(temp1.c_str());
double x = 0;
fs >> x;
assert(x == 3.25);
fs >> x;
assert(x == 4.5);
}
remove(temp1);
std::remove(temp1.c_str());
{
std::wifstream fs(temp2);
std::wifstream fs(temp2.c_str());
double x = 0;
fs >> x;
assert(x == 4.5);
fs >> x;
assert(x == 3.25);
}
remove(temp2);
std::remove(temp2.c_str());
}

View File

@ -16,37 +16,37 @@
#include <fstream>
#include <cassert>
#include "platform_support.h"
int main()
{
#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
char temp[L_tmpnam];
tmpnam(temp);
std::string temp = get_temp_file_name();
{
std::ofstream fso(temp);
std::ofstream fso(temp.c_str());
std::ofstream fs;
fs = move(fso);
fs << 3.25;
}
{
std::ifstream fs(temp);
std::ifstream fs(temp.c_str());
double x = 0;
fs >> x;
assert(x == 3.25);
}
remove(temp);
std::remove(temp.c_str());
{
std::wofstream fso(temp);
std::wofstream fso(temp.c_str());
std::wofstream fs;
fs = move(fso);
fs << 3.25;
}
{
std::wifstream fs(temp);
std::wifstream fs(temp.c_str());
double x = 0;
fs >> x;
assert(x == 3.25);
}
remove(temp);
std::remove(temp.c_str());
#endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES
}

View File

@ -17,15 +17,15 @@
#include <fstream>
#include <cassert>
#include "platform_support.h"
int main()
{
char temp1[L_tmpnam], temp2[L_tmpnam];
tmpnam(temp1);
tmpnam(temp2);
std::string temp1 = get_temp_file_name();
std::string temp2 = get_temp_file_name();
{
std::ofstream fs1(temp1);
std::ofstream fs2(temp2);
std::ofstream fs1(temp1.c_str());
std::ofstream fs2(temp2.c_str());
fs1 << 3.25;
fs2 << 4.5;
swap(fs1, fs2);
@ -33,26 +33,26 @@ int main()
fs2 << ' ' << 4.5;
}
{
std::ifstream fs(temp1);
std::ifstream fs(temp1.c_str());
double x = 0;
fs >> x;
assert(x == 3.25);
fs >> x;
assert(x == 4.5);
}
remove(temp1);
std::remove(temp1.c_str());
{
std::ifstream fs(temp2);
std::ifstream fs(temp2.c_str());
double x = 0;
fs >> x;
assert(x == 4.5);
fs >> x;
assert(x == 3.25);
}
remove(temp2);
std::remove(temp2.c_str());
{
std::wofstream fs1(temp1);
std::wofstream fs2(temp2);
std::wofstream fs1(temp1.c_str());
std::wofstream fs2(temp2.c_str());
fs1 << 3.25;
fs2 << 4.5;
swap(fs1, fs2);
@ -60,21 +60,21 @@ int main()
fs2 << ' ' << 4.5;
}
{
std::wifstream fs(temp1);
std::wifstream fs(temp1.c_str());
double x = 0;
fs >> x;
assert(x == 3.25);
fs >> x;
assert(x == 4.5);
}
remove(temp1);
std::remove(temp1.c_str());
{
std::wifstream fs(temp2);
std::wifstream fs(temp2.c_str());
double x = 0;
fs >> x;
assert(x == 4.5);
fs >> x;
assert(x == 3.25);
}
remove(temp2);
std::remove(temp2.c_str());
}

View File

@ -16,35 +16,35 @@
#include <fstream>
#include <cassert>
#include "platform_support.h"
int main()
{
#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
char temp[L_tmpnam];
tmpnam(temp);
std::string temp = get_temp_file_name();
{
std::ofstream fso(temp);
std::ofstream fso(temp.c_str());
std::ofstream fs = move(fso);
fs << 3.25;
}
{
std::ifstream fs(temp);
std::ifstream fs(temp.c_str());
double x = 0;
fs >> x;
assert(x == 3.25);
}
remove(temp);
std::remove(temp.c_str());
{
std::wofstream fso(temp);
std::wofstream fso(temp.c_str());
std::wofstream fs = move(fso);
fs << 3.25;
}
{
std::wifstream fs(temp);
std::wifstream fs(temp.c_str());
double x = 0;
fs >> x;
assert(x == 3.25);
}
remove(temp);
std::remove(temp.c_str());
#endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES
}

View File

@ -16,31 +16,31 @@
#include <fstream>
#include <cassert>
#include "platform_support.h"
int main()
{
char temp[L_tmpnam];
tmpnam(temp);
std::string temp = get_temp_file_name();
{
std::ofstream fs(temp);
std::ofstream fs(temp.c_str());
fs << 3.25;
}
{
std::ifstream fs(temp);
std::ifstream fs(temp.c_str());
double x = 0;
fs >> x;
assert(x == 3.25);
}
remove(temp);
std::remove(temp.c_str());
{
std::wofstream fs(temp);
std::wofstream fs(temp.c_str());
fs << 3.25;
}
{
std::wifstream fs(temp);
std::wifstream fs(temp.c_str());
double x = 0;
fs >> x;
assert(x == 3.25);
}
remove(temp);
std::remove(temp.c_str());
}

View File

@ -16,31 +16,31 @@
#include <fstream>
#include <cassert>
#include "platform_support.h"
int main()
{
char temp[L_tmpnam];
tmpnam(temp);
std::string temp = get_temp_file_name();
{
std::ofstream fs((std::string(temp)));
std::ofstream fs(temp);
fs << 3.25;
}
{
std::ifstream fs((std::string(temp)));
std::ifstream fs(temp);
double x = 0;
fs >> x;
assert(x == 3.25);
}
remove(temp);
std::remove(temp.c_str());
{
std::wofstream fs((std::string(temp)));
std::wofstream fs(temp);
fs << 3.25;
}
{
std::wifstream fs((std::string(temp)));
std::wifstream fs(temp);
double x = 0;
fs >> x;
assert(x == 3.25);
}
remove(temp);
std::remove(temp.c_str());
}

View File

@ -16,27 +16,27 @@
#include <fstream>
#include <cassert>
#include "platform_support.h"
int main()
{
char temp[L_tmpnam];
tmpnam(temp);
std::string temp = get_temp_file_name();
{
std::ofstream fs;
assert(!fs.is_open());
fs.open(temp);
fs.open(temp.c_str());
assert(fs.is_open());
fs.close();
assert(!fs.is_open());
}
remove(temp);
std::remove(temp.c_str());
{
std::wofstream fs;
assert(!fs.is_open());
fs.open(temp);
fs.open(temp.c_str());
assert(fs.is_open());
fs.close();
assert(!fs.is_open());
}
remove(temp);
std::remove(temp.c_str());
}

View File

@ -16,43 +16,43 @@
#include <fstream>
#include <cassert>
#include "platform_support.h"
int main()
{
char temp[L_tmpnam];
tmpnam(temp);
std::string temp = get_temp_file_name();
{
std::ofstream fs;
assert(!fs.is_open());
char c = 'a';
fs << c;
assert(fs.fail());
fs.open(temp);
fs.open(temp.c_str());
assert(fs.is_open());
fs << c;
}
{
std::ifstream fs(temp);
std::ifstream fs(temp.c_str());
char c = 0;
fs >> c;
assert(c == 'a');
}
remove(temp);
std::remove(temp.c_str());
{
std::wofstream fs;
assert(!fs.is_open());
wchar_t c = L'a';
fs << c;
assert(fs.fail());
fs.open(temp);
fs.open(temp.c_str());
assert(fs.is_open());
fs << c;
}
{
std::wifstream fs(temp);
std::wifstream fs(temp.c_str());
wchar_t c = 0;
fs >> c;
assert(c == L'a');
}
remove(temp);
std::remove(temp.c_str());
}

View File

@ -16,43 +16,43 @@
#include <fstream>
#include <cassert>
#include "platform_support.h"
int main()
{
char temp[L_tmpnam];
tmpnam(temp);
std::string temp = get_temp_file_name();
{
std::ofstream fs;
assert(!fs.is_open());
char c = 'a';
fs << c;
assert(fs.fail());
fs.open(std::string(temp));
fs.open(temp);
assert(fs.is_open());
fs << c;
}
{
std::ifstream fs(temp);
std::ifstream fs(temp.c_str());
char c = 0;
fs >> c;
assert(c == 'a');
}
remove(temp);
std::remove(temp.c_str());
{
std::wofstream fs;
assert(!fs.is_open());
wchar_t c = L'a';
fs << c;
assert(fs.fail());
fs.open(std::string(temp));
fs.open(temp);
assert(fs.is_open());
fs << c;
}
{
std::wifstream fs(temp);
std::wifstream fs(temp.c_str());
wchar_t c = 0;
fs >> c;
assert(c == L'a');
}
remove(temp);
std::remove(temp.c_str());
}

View File

@ -16,21 +16,21 @@
#include <fstream>
#include <cassert>
#include "platform_support.h"
int main()
{
char temp[L_tmpnam];
tmpnam(temp);
std::string temp = get_temp_file_name();
{
std::ofstream fs(temp);
std::ofstream fs(temp.c_str());
std::filebuf* fb = fs.rdbuf();
assert(fb->sputc('r') == 'r');
}
remove(temp);
std::remove(temp.c_str());
{
std::wofstream fs(temp);
std::wofstream fs(temp.c_str());
std::wfilebuf* fb = fs.rdbuf();
assert(fb->sputc(L'r') == L'r');
}
remove(temp);
std::remove(temp.c_str());
}

View File

@ -39,4 +39,25 @@
#define LOCALE_zh_CN_UTF_8 "zh_CN.UTF-8"
#endif
#include <stdio.h>
#include <stdlib.h>
#include <string>
inline
std::string
get_temp_file_name()
{
#ifdef _WIN32
char* p = _tempnam( NULL, NULL );
if (p == nullptr)
abort();
std::string s(p);
free( p );
#else
std::string s("temp.XXXX");
mktemp(&s[0]);
#endif
return s;
}
#endif // PLATFORM_SUPPORT_H