diff options
Diffstat (limited to 'winpr/libwinpr/path/test/TestPathMakePath.c')
-rw-r--r-- | winpr/libwinpr/path/test/TestPathMakePath.c | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/winpr/libwinpr/path/test/TestPathMakePath.c b/winpr/libwinpr/path/test/TestPathMakePath.c new file mode 100644 index 0000000..488cab3 --- /dev/null +++ b/winpr/libwinpr/path/test/TestPathMakePath.c @@ -0,0 +1,83 @@ +#include <stdlib.h> +#include <string.h> +#include <time.h> + +#include <winpr/crt.h> +#include <winpr/file.h> +#include <winpr/path.h> + +int TestPathMakePath(int argc, char* argv[]) +{ + size_t baseLen = 0; + BOOL success = 0; + char tmp[64] = { 0 }; + char* path = NULL; + char* cur = NULL; + char delim = PathGetSeparatorA(0); + char* base = GetKnownPath(KNOWN_PATH_TEMP); + + WINPR_UNUSED(argc); + WINPR_UNUSED(argv); + + if (!base) + { + fprintf(stderr, "Failed to get temporary directory!\n"); + return -1; + } + + baseLen = strlen(base); + srand(time(NULL)); + + for (int x = 0; x < 5; x++) + { + sprintf_s(tmp, ARRAYSIZE(tmp), "%08X", rand()); + path = GetCombinedPath(base, tmp); + free(base); + + if (!path) + { + fprintf(stderr, "GetCombinedPath failed!\n"); + return -1; + } + + base = path; + } + + printf("Creating path %s\n", path); + success = winpr_PathMakePath(path, NULL); + + if (!success) + { + fprintf(stderr, "MakePath failed!\n"); + free(path); + return -1; + } + + success = winpr_PathFileExists(path); + + if (!success) + { + fprintf(stderr, "MakePath lied about success!\n"); + free(path); + return -1; + } + + while (strlen(path) > baseLen) + { + if (!winpr_RemoveDirectory(path)) + { + fprintf(stderr, "winpr_RemoveDirectory %s failed!\n", path); + free(path); + return -1; + } + + cur = strrchr(path, delim); + + if (cur) + *cur = '\0'; + } + + free(path); + printf("%s success!\n", __func__); + return 0; +} |