diff options
author | David Robillard <d@drobilla.net> | 2021-01-11 12:07:16 +0100 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2021-01-11 12:25:48 +0100 |
commit | 830c41e97938bd4bbf7422718bbc90df750b9d78 (patch) | |
tree | 3c6980115745347521fd7505183b346353adcca4 /src | |
parent | 1d0547504963fcbe28dba9d3913a2398df65a938 (diff) | |
download | lilv-830c41e97938bd4bbf7422718bbc90df750b9d78.tar.gz lilv-830c41e97938bd4bbf7422718bbc90df750b9d78.tar.bz2 lilv-830c41e97938bd4bbf7422718bbc90df750b9d78.zip |
Use unique test bundle names so tests can run in parallel
Diffstat (limited to 'src')
-rw-r--r-- | src/filesystem.c | 22 | ||||
-rw-r--r-- | src/filesystem.h | 15 |
2 files changed, 26 insertions, 11 deletions
diff --git a/src/filesystem.c b/src/filesystem.c index 38af498..03614ce 100644 --- a/src/filesystem.c +++ b/src/filesystem.c @@ -426,7 +426,7 @@ lilv_dir_for_each(const char* path, } char* -lilv_create_temporary_directory(const char* pattern) +lilv_create_temporary_directory_in(const char* pattern, const char* parent) { #ifdef _WIN32 static const char chars[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; @@ -438,13 +438,10 @@ lilv_create_temporary_directory(const char* pattern) return NULL; } - char* const tmpdir = lilv_temp_directory_path(); - char* const path_pattern = lilv_path_join(tmpdir, pattern); + char* const path_pattern = lilv_path_join(parent, pattern); const size_t path_pattern_len = strlen(path_pattern); char* const suffix = path_pattern + path_pattern_len - 6; - free(tmpdir); - for (unsigned attempt = 0; attempt < 128; ++attempt) { for (unsigned i = 0; i < 6; ++i) { suffix[i] = chars[rand() % n_chars]; @@ -457,14 +454,23 @@ lilv_create_temporary_directory(const char* pattern) return NULL; #else - char* const tmpdir = lilv_temp_directory_path(); - char* const path_pattern = lilv_path_join(tmpdir, pattern); + char* const path_pattern = lilv_path_join(parent, pattern); - free(tmpdir); return mkdtemp(path_pattern); // NOLINT (not a leak) #endif } +char* +lilv_create_temporary_directory(const char* pattern) +{ + char* const tmpdir = lilv_temp_directory_path(); + char* const result = lilv_create_temporary_directory_in(pattern, tmpdir); + + free(tmpdir); + + return result; +} + int lilv_create_directories(const char* dir_path) { diff --git a/src/filesystem.h b/src/filesystem.h index a82ec6c..1a8dc68 100644 --- a/src/filesystem.h +++ b/src/filesystem.h @@ -146,12 +146,21 @@ lilv_dir_for_each(const char* path, void (*f)(const char* path, const char* name, void* data)); /** - Create a unique temporary directory. + Create a unique temporary directory in a specific directory. The last six characters of `pattern` must be `XXXXXX` and will be replaced with random characters. This works roughly like mkdtemp, except the pattern - should only be a directory name, not a full path. The returned path will be - in a suitable system temporary directory. + should only be a directory name, not a full path. The created path will be + a child of the given parent directory. +*/ +char* +lilv_create_temporary_directory_in(const char* pattern, const char* parent); + +/** + Create a unique temporary directory. + + This is like lilv_create_temporary_directory_in(), except it creates the + directory in the system temporary directory. */ char* lilv_create_temporary_directory(const char* pattern); |