better windows temp filenames
This commit is contained in:
parent
7d2e756b48
commit
e039ec875a
|
|
@ -413,11 +413,20 @@ expand_from(const string &os_specific, Filename::Type type) {
|
|||
Filename Filename::
|
||||
temporary(const string &dirname, const string &prefix, const string &suffix,
|
||||
Type type) {
|
||||
if (dirname.empty()) {
|
||||
Filename fdirname = dirname;
|
||||
#ifdef WIN32
|
||||
// The Windows tempnam() function doesn't do a good job of choosing
|
||||
// a temporary directory. Choose one ourselves.
|
||||
if (fdirname.empty()) {
|
||||
fdirname = Filename::get_temp_directory();
|
||||
}
|
||||
#endif
|
||||
|
||||
if (fdirname.empty()) {
|
||||
// If we are not given a dirname, use the system tempnam()
|
||||
// function to create a system-defined temporary filename.
|
||||
char *name = tempnam(NULL, prefix.c_str());
|
||||
Filename result(name);
|
||||
Filename result = Filename::from_os_specific(name);
|
||||
free(name);
|
||||
result.set_type(type);
|
||||
return result;
|
||||
|
|
@ -435,7 +444,7 @@ temporary(const string &dirname, const string &prefix, const string &suffix,
|
|||
int hash = (clock() * time(NULL)) & 0xffffff;
|
||||
char hex_code[10];
|
||||
sprintf(hex_code, "%06x", hash);
|
||||
result = Filename(dirname, Filename(prefix + hex_code + suffix));
|
||||
result = Filename(fdirname, Filename(prefix + hex_code + suffix));
|
||||
result.set_type(type);
|
||||
} while (result.exists());
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue