2 changed files with 74 additions and 0 deletions
@ -0,0 +1,73 @@ |
|||||||
|
/**
|
||||||
|
* @file test_utils.h |
||||||
|
* @brief Utility functions for cross-platform tests |
||||||
|
*/ |
||||||
|
|
||||||
|
#ifndef TEST_UTILS_H |
||||||
|
#define TEST_UTILS_H |
||||||
|
|
||||||
|
#include "../lib/platform_compat.h" |
||||||
|
#include <stdio.h> |
||||||
|
#include <stdlib.h> |
||||||
|
#include <string.h> |
||||||
|
|
||||||
|
#ifdef _WIN32 |
||||||
|
#include <windows.h> |
||||||
|
#include <direct.h> |
||||||
|
|
||||||
|
// Windows temp directory buffer
|
||||||
|
static char test_temp_dir[MAX_PATH]; |
||||||
|
|
||||||
|
// Cross-platform mkdtemp for Windows
|
||||||
|
static inline int test_mkdtemp(char *template_str) { |
||||||
|
char tmp_path[MAX_PATH]; |
||||||
|
GetTempPathA(MAX_PATH, tmp_path); |
||||||
|
|
||||||
|
// Generate unique directory name
|
||||||
|
srand((unsigned int)GetTickCount()); |
||||||
|
int attempts = 0; |
||||||
|
while (attempts < 100) { |
||||||
|
snprintf(test_temp_dir, sizeof(test_temp_dir), "%s\\utun_test_%08x",
|
||||||
|
tmp_path, (unsigned int)rand()); |
||||||
|
if (_mkdir(test_temp_dir) == 0) { |
||||||
|
// Copy path back to caller's buffer if provided
|
||||||
|
if (template_str) { |
||||||
|
size_t len = strlen(test_temp_dir); |
||||||
|
memcpy(template_str, test_temp_dir, len + 1); // Include null terminator
|
||||||
|
} |
||||||
|
return 0; // Success
|
||||||
|
} |
||||||
|
attempts++; |
||||||
|
} |
||||||
|
return -1; // Failed after 100 attempts
|
||||||
|
} |
||||||
|
|
||||||
|
// Cross-platform unlink for Windows
|
||||||
|
static inline int test_unlink(const char *path) { |
||||||
|
return _unlink(path); |
||||||
|
} |
||||||
|
|
||||||
|
// Cross-platform rmdir for Windows
|
||||||
|
static inline int test_rmdir(const char *path) { |
||||||
|
return _rmdir(path); |
||||||
|
} |
||||||
|
|
||||||
|
#else |
||||||
|
// Linux/macOS - use standard functions
|
||||||
|
#include <unistd.h> |
||||||
|
|
||||||
|
static inline int test_mkdtemp(char *template_str) { |
||||||
|
return (mkdtemp(template_str) == NULL) ? -1 : 0; |
||||||
|
} |
||||||
|
|
||||||
|
static inline int test_unlink(const char *path) { |
||||||
|
return unlink(path); |
||||||
|
} |
||||||
|
|
||||||
|
static inline int test_rmdir(const char *path) { |
||||||
|
return rmdir(path); |
||||||
|
} |
||||||
|
|
||||||
|
#endif |
||||||
|
|
||||||
|
#endif // TEST_UTILS_H
|
||||||
Loading…
Reference in new issue