Chromium Code Reviews| Index: runtime/bin/directory_win.cc |
| diff --git a/runtime/bin/directory_win.cc b/runtime/bin/directory_win.cc |
| index 0f48408adc3cc71788df0c547de0dc2c7fb1ebc4..a4d32281fcd25c0c7bc20f52f2db44196c02e3c8 100644 |
| --- a/runtime/bin/directory_win.cc |
| +++ b/runtime/bin/directory_win.cc |
| @@ -5,6 +5,7 @@ |
| #include "bin/directory.h" |
| #include <errno.h> |
| +#include <time.h> |
|
Mads Ager (google)
2011/11/21 16:29:37
I don't think you need time.h now?
Bill Hesse
2011/11/22 12:49:39
Done.
|
| #include <sys/stat.h> |
| #include "bin/platform.h" |
| @@ -238,6 +239,44 @@ bool Directory::Create(const char* dir_name) { |
| } |
| +char* Directory::CreateTemp(const char* const_template, int64_t number) { |
| + // Returns a new, unused directory name, modifying the contents of |
| + // dir_template. Creates this directory, with mode ???. |
|
Mads Ager (google)
2011/11/21 16:29:37
Please fill in the mode part of the comments.
Bill Hesse
2011/11/22 12:49:39
Done.
|
| + // The return value must be freed by the caller. |
| + char* path = static_cast<char*>(malloc(MAX_PATH)); |
| + int path_length; |
| + if (0 == strncmp(const_template, "", 1)) { |
| + path_length = GetTempPath(MAX_PATH, path); |
| + } else { |
| + snprintf(path, MAX_PATH, "%s", const_template); |
| + path_length = strlen(path); |
| + } |
| + if (path_length > MAX_PATH - 14) { |
| + path[0] = '\0'; |
| + return path; |
| + } |
| + if (path[path_length - 1] == '\\') { |
| + // No base name for the directory - use "tempdir" |
| + snprintf(path + path_length, MAX_PATH - path_length, "tempdir"); |
| + path_length = strlen(path); |
| + } |
| + |
| + int tries = 0; |
| + int numeric_part = number % 1000000; |
| + while (true) { |
| + snprintf(path + path_length, MAX_PATH - path_length, "%.6d", numeric_part); |
| + if (CreateDirectory(path, NULL)) break; |
| + numeric_part++; |
| + tries++; |
| + if (tries > 100) { |
| + path[0] = '\0'; |
| + break; |
| + } |
| + } |
| + return path; |
| +} |
| + |
| + |
| bool Directory::Delete(const char* dir_name) { |
| return (RemoveDirectory(dir_name) != 0); |
| } |