| #include "clar_libgit2.h" |
| |
| #include "git2/clone.h" |
| #include "clone.h" |
| #include "buffer.h" |
| #include "fileops.h" |
| |
| static git_buf path = GIT_BUF_INIT; |
| |
| void test_win32_longpath__initialize(void) |
| { |
| #ifdef GIT_WIN32 |
| const char *base = clar_sandbox_path(); |
| size_t base_len = strlen(base); |
| size_t remain = MAX_PATH - base_len; |
| size_t i; |
| |
| git_buf_clear(&path); |
| git_buf_puts(&path, base); |
| git_buf_putc(&path, '/'); |
| |
| cl_assert(remain < (MAX_PATH - 5)); |
| |
| for (i = 0; i < (remain - 5); i++) |
| git_buf_putc(&path, 'a'); |
| #endif |
| } |
| |
| void test_win32_longpath__cleanup(void) |
| { |
| git_buf_free(&path); |
| } |
| |
| #ifdef GIT_WIN32 |
| void assert_name_too_long(void) |
| { |
| const git_error *err; |
| size_t expected_len, actual_len; |
| char *expected_msg; |
| |
| err = giterr_last(); |
| actual_len = strlen(err->message); |
| |
| expected_msg = git_win32_get_error_message(ERROR_FILENAME_EXCED_RANGE); |
| expected_len = strlen(expected_msg); |
| |
| /* check the suffix */ |
| cl_assert_equal_s(expected_msg, err->message + (actual_len - expected_len)); |
| |
| git__free(expected_msg); |
| } |
| #endif |
| |
| void test_win32_longpath__errmsg_on_checkout(void) |
| { |
| #ifdef GIT_WIN32 |
| git_repository *repo; |
| |
| cl_git_fail(git_clone(&repo, cl_fixture("testrepo.git"), path.ptr, NULL)); |
| assert_name_too_long(); |
| #endif |
| } |