]> git.proxmox.com Git - libgit2.git/blobdiff - tests/path/core.c
New upstream version 1.4.3+dfsg.1
[libgit2.git] / tests / path / core.c
index c875a862ce7b059bfb3ac274687652862967e36c..db5359af8b541c6899b21ca6d5b5d2f384a139a7 100644 (file)
@@ -1,4 +1,5 @@
 #include "clar_libgit2.h"
+#include "fs_path.h"
 #include "path.h"
 
 void test_path_core__cleanup(void)
@@ -12,11 +13,11 @@ static void test_make_relative(
        const char *parent,
        int expected_status)
 {
-       git_buf buf = GIT_BUF_INIT;
-       git_buf_puts(&buf, path);
-       cl_assert_equal_i(expected_status, git_path_make_relative(&buf, parent));
+       git_str buf = GIT_STR_INIT;
+       git_str_puts(&buf, path);
+       cl_assert_equal_i(expected_status, git_fs_path_make_relative(&buf, parent));
        cl_assert_equal_s(expected_path, buf.ptr);
-       git_buf_dispose(&buf);
+       git_str_dispose(&buf);
 }
 
 void test_path_core__make_relative(void)
@@ -59,284 +60,252 @@ void test_path_core__make_relative(void)
 
 void test_path_core__isvalid_standard(void)
 {
-       cl_assert_equal_b(true, git_path_validate(NULL, "foo/bar", 0, 0));
-       cl_assert_equal_b(true, git_path_validate(NULL, "foo/bar/file.txt", 0, 0));
-       cl_assert_equal_b(true, git_path_validate(NULL, "foo/bar/.file", 0, 0));
+       cl_assert_equal_b(true, git_fs_path_is_valid("foo/bar", 0));
+       cl_assert_equal_b(true, git_fs_path_is_valid("foo/bar/file.txt", 0));
+       cl_assert_equal_b(true, git_fs_path_is_valid("foo/bar/.file", 0));
+}
+
+/* Ensure that `is_valid_str` only reads str->size bytes */
+void test_path_core__isvalid_standard_str(void)
+{
+       git_str str = GIT_STR_INIT_CONST("foo/bar//zap", 0);
+       unsigned int flags = GIT_FS_PATH_REJECT_EMPTY_COMPONENT;
+
+       str.size = 0;
+       cl_assert_equal_b(false, git_fs_path_str_is_valid(&str, flags));
+
+       str.size = 3;
+       cl_assert_equal_b(true, git_fs_path_str_is_valid(&str, flags));
+
+       str.size = 4;
+       cl_assert_equal_b(false, git_fs_path_str_is_valid(&str, flags));
+
+       str.size = 5;
+       cl_assert_equal_b(true, git_fs_path_str_is_valid(&str, flags));
+
+       str.size = 7;
+       cl_assert_equal_b(true, git_fs_path_str_is_valid(&str, flags));
+
+       str.size = 8;
+       cl_assert_equal_b(false, git_fs_path_str_is_valid(&str, flags));
+
+       str.size = strlen(str.ptr);
+       cl_assert_equal_b(false, git_fs_path_str_is_valid(&str, flags));
 }
 
 void test_path_core__isvalid_empty_dir_component(void)
 {
-       cl_assert_equal_b(false, git_path_validate(NULL, "foo//bar", 0, 0));
+       unsigned int flags = GIT_FS_PATH_REJECT_EMPTY_COMPONENT;
+
+       /* empty component */
+       cl_assert_equal_b(true, git_fs_path_is_valid("foo//bar", 0));
 
        /* leading slash */
-       cl_assert_equal_b(false, git_path_validate(NULL, "/", 0, 0));
-       cl_assert_equal_b(false, git_path_validate(NULL, "/foo", 0, 0));
-       cl_assert_equal_b(false, git_path_validate(NULL, "/foo/bar", 0, 0));
+       cl_assert_equal_b(true, git_fs_path_is_valid("/", 0));
+       cl_assert_equal_b(true, git_fs_path_is_valid("/foo", 0));
+       cl_assert_equal_b(true, git_fs_path_is_valid("/foo/bar", 0));
 
        /* trailing slash */
-       cl_assert_equal_b(false, git_path_validate(NULL, "foo/", 0, 0));
-       cl_assert_equal_b(false, git_path_validate(NULL, "foo/bar/", 0, 0));
-}
+       cl_assert_equal_b(true, git_fs_path_is_valid("foo/", 0));
+       cl_assert_equal_b(true, git_fs_path_is_valid("foo/bar/", 0));
 
-void test_path_core__isvalid_dot_and_dotdot(void)
-{
-       cl_assert_equal_b(true, git_path_validate(NULL, ".", 0, 0));
-       cl_assert_equal_b(true, git_path_validate(NULL, "./foo", 0, 0));
-       cl_assert_equal_b(true, git_path_validate(NULL, "foo/.", 0, 0));
-       cl_assert_equal_b(true, git_path_validate(NULL, "./foo", 0, 0));
-
-       cl_assert_equal_b(true, git_path_validate(NULL, "..", 0, 0));
-       cl_assert_equal_b(true, git_path_validate(NULL, "../foo", 0, 0));
-       cl_assert_equal_b(true, git_path_validate(NULL, "foo/..", 0, 0));
-       cl_assert_equal_b(true, git_path_validate(NULL, "../foo", 0, 0));
-
-       cl_assert_equal_b(false, git_path_validate(NULL, ".", 0, GIT_PATH_REJECT_TRAVERSAL));
-       cl_assert_equal_b(false, git_path_validate(NULL, "./foo", 0, GIT_PATH_REJECT_TRAVERSAL));
-       cl_assert_equal_b(false, git_path_validate(NULL, "foo/.", 0, GIT_PATH_REJECT_TRAVERSAL));
-       cl_assert_equal_b(false, git_path_validate(NULL, "./foo", 0, GIT_PATH_REJECT_TRAVERSAL));
-
-       cl_assert_equal_b(false, git_path_validate(NULL, "..", 0, GIT_PATH_REJECT_TRAVERSAL));
-       cl_assert_equal_b(false, git_path_validate(NULL, "../foo", 0, GIT_PATH_REJECT_TRAVERSAL));
-       cl_assert_equal_b(false, git_path_validate(NULL, "foo/..", 0, GIT_PATH_REJECT_TRAVERSAL));
-       cl_assert_equal_b(false, git_path_validate(NULL, "../foo", 0, GIT_PATH_REJECT_TRAVERSAL));
+
+       /* empty component */
+       cl_assert_equal_b(false, git_fs_path_is_valid("foo//bar", flags));
+
+       /* leading slash */
+       cl_assert_equal_b(false, git_fs_path_is_valid("/", flags));
+       cl_assert_equal_b(false, git_fs_path_is_valid("/foo", flags));
+       cl_assert_equal_b(false, git_fs_path_is_valid("/foo/bar", flags));
+
+       /* trailing slash */
+       cl_assert_equal_b(false, git_fs_path_is_valid("foo/", flags));
+       cl_assert_equal_b(false, git_fs_path_is_valid("foo/bar/", flags));
 }
 
-void test_path_core__isvalid_dot_git(void)
+void test_path_core__isvalid_dot_and_dotdot(void)
 {
-       cl_assert_equal_b(true, git_path_validate(NULL, ".git", 0, 0));
-       cl_assert_equal_b(true, git_path_validate(NULL, ".git/foo", 0, 0));
-       cl_assert_equal_b(true, git_path_validate(NULL, "foo/.git", 0, 0));
-       cl_assert_equal_b(true, git_path_validate(NULL, "foo/.git/bar", 0, 0));
-       cl_assert_equal_b(true, git_path_validate(NULL, "foo/.GIT/bar", 0, 0));
-       cl_assert_equal_b(true, git_path_validate(NULL, "foo/bar/.Git", 0, 0));
-
-       cl_assert_equal_b(false, git_path_validate(NULL, ".git", 0, GIT_PATH_REJECT_DOT_GIT_LITERAL));
-       cl_assert_equal_b(false, git_path_validate(NULL, ".git/foo", 0, GIT_PATH_REJECT_DOT_GIT_LITERAL));
-       cl_assert_equal_b(false, git_path_validate(NULL, "foo/.git", 0, GIT_PATH_REJECT_DOT_GIT_LITERAL));
-       cl_assert_equal_b(false, git_path_validate(NULL, "foo/.git/bar", 0, GIT_PATH_REJECT_DOT_GIT_LITERAL));
-       cl_assert_equal_b(false, git_path_validate(NULL, "foo/.GIT/bar", 0, GIT_PATH_REJECT_DOT_GIT_LITERAL));
-       cl_assert_equal_b(false, git_path_validate(NULL, "foo/bar/.Git", 0, GIT_PATH_REJECT_DOT_GIT_LITERAL));
-
-       cl_assert_equal_b(true, git_path_validate(NULL, "!git", 0, 0));
-       cl_assert_equal_b(true, git_path_validate(NULL, "foo/!git", 0, 0));
-       cl_assert_equal_b(true, git_path_validate(NULL, "!git/bar", 0, 0));
-       cl_assert_equal_b(true, git_path_validate(NULL, ".tig", 0, 0));
-       cl_assert_equal_b(true, git_path_validate(NULL, "foo/.tig", 0, 0));
-       cl_assert_equal_b(true, git_path_validate(NULL, ".tig/bar", 0, 0));
+       cl_assert_equal_b(true, git_fs_path_is_valid(".", 0));
+       cl_assert_equal_b(true, git_fs_path_is_valid("./foo", 0));
+       cl_assert_equal_b(true, git_fs_path_is_valid("foo/.", 0));
+       cl_assert_equal_b(true, git_fs_path_is_valid("./foo", 0));
+
+       cl_assert_equal_b(true, git_fs_path_is_valid("..", 0));
+       cl_assert_equal_b(true, git_fs_path_is_valid("../foo", 0));
+       cl_assert_equal_b(true, git_fs_path_is_valid("foo/..", 0));
+       cl_assert_equal_b(true, git_fs_path_is_valid("../foo", 0));
+
+       cl_assert_equal_b(false, git_fs_path_is_valid(".", GIT_FS_PATH_REJECT_TRAVERSAL));
+       cl_assert_equal_b(false, git_fs_path_is_valid("./foo", GIT_FS_PATH_REJECT_TRAVERSAL));
+       cl_assert_equal_b(false, git_fs_path_is_valid("foo/.", GIT_FS_PATH_REJECT_TRAVERSAL));
+       cl_assert_equal_b(false, git_fs_path_is_valid("./foo", GIT_FS_PATH_REJECT_TRAVERSAL));
+
+       cl_assert_equal_b(false, git_fs_path_is_valid("..", GIT_FS_PATH_REJECT_TRAVERSAL));
+       cl_assert_equal_b(false, git_fs_path_is_valid("../foo", GIT_FS_PATH_REJECT_TRAVERSAL));
+       cl_assert_equal_b(false, git_fs_path_is_valid("foo/..", GIT_FS_PATH_REJECT_TRAVERSAL));
+       cl_assert_equal_b(false, git_fs_path_is_valid("../foo", GIT_FS_PATH_REJECT_TRAVERSAL));
 }
 
 void test_path_core__isvalid_backslash(void)
 {
-       cl_assert_equal_b(true, git_path_validate(NULL, "foo\\file.txt", 0, 0));
-       cl_assert_equal_b(true, git_path_validate(NULL, "foo/bar\\file.txt", 0, 0));
-       cl_assert_equal_b(true, git_path_validate(NULL, "foo/bar\\", 0, 0));
+       cl_assert_equal_b(true, git_fs_path_is_valid("foo\\file.txt", 0));
+       cl_assert_equal_b(true, git_fs_path_is_valid("foo/bar\\file.txt", 0));
+       cl_assert_equal_b(true, git_fs_path_is_valid("foo/bar\\", 0));
 
-       cl_assert_equal_b(false, git_path_validate(NULL, "foo\\file.txt", 0, GIT_PATH_REJECT_BACKSLASH));
-       cl_assert_equal_b(false, git_path_validate(NULL, "foo/bar\\file.txt", 0, GIT_PATH_REJECT_BACKSLASH));
-       cl_assert_equal_b(false, git_path_validate(NULL, "foo/bar\\", 0, GIT_PATH_REJECT_BACKSLASH));
+       cl_assert_equal_b(false, git_fs_path_is_valid("foo\\file.txt", GIT_FS_PATH_REJECT_BACKSLASH));
+       cl_assert_equal_b(false, git_fs_path_is_valid("foo/bar\\file.txt", GIT_FS_PATH_REJECT_BACKSLASH));
+       cl_assert_equal_b(false, git_fs_path_is_valid("foo/bar\\", GIT_FS_PATH_REJECT_BACKSLASH));
 }
 
 void test_path_core__isvalid_trailing_dot(void)
 {
-       cl_assert_equal_b(true, git_path_validate(NULL, "foo.", 0, 0));
-       cl_assert_equal_b(true, git_path_validate(NULL, "foo...", 0, 0));
-       cl_assert_equal_b(true, git_path_validate(NULL, "foo/bar.", 0, 0));
-       cl_assert_equal_b(true, git_path_validate(NULL, "foo./bar", 0, 0));
-
-       cl_assert_equal_b(false, git_path_validate(NULL, "foo.", 0, GIT_PATH_REJECT_TRAILING_DOT));
-       cl_assert_equal_b(false, git_path_validate(NULL, "foo...", 0, GIT_PATH_REJECT_TRAILING_DOT));
-       cl_assert_equal_b(false, git_path_validate(NULL, "foo/bar.", 0, GIT_PATH_REJECT_TRAILING_DOT));
-       cl_assert_equal_b(false, git_path_validate(NULL, "foo./bar", 0, GIT_PATH_REJECT_TRAILING_DOT));
+       cl_assert_equal_b(true, git_fs_path_is_valid("foo.", 0));
+       cl_assert_equal_b(true, git_fs_path_is_valid("foo...", 0));
+       cl_assert_equal_b(true, git_fs_path_is_valid("foo/bar.", 0));
+       cl_assert_equal_b(true, git_fs_path_is_valid("foo./bar", 0));
+
+       cl_assert_equal_b(false, git_fs_path_is_valid("foo.", GIT_FS_PATH_REJECT_TRAILING_DOT));
+       cl_assert_equal_b(false, git_fs_path_is_valid("foo...", GIT_FS_PATH_REJECT_TRAILING_DOT));
+       cl_assert_equal_b(false, git_fs_path_is_valid("foo/bar.", GIT_FS_PATH_REJECT_TRAILING_DOT));
+       cl_assert_equal_b(false, git_fs_path_is_valid("foo./bar", GIT_FS_PATH_REJECT_TRAILING_DOT));
 }
 
 void test_path_core__isvalid_trailing_space(void)
 {
-       cl_assert_equal_b(true, git_path_validate(NULL, "foo ", 0, 0));
-       cl_assert_equal_b(true, git_path_validate(NULL, "foo   ", 0, 0));
-       cl_assert_equal_b(true, git_path_validate(NULL, "foo/bar ", 0, 0));
-       cl_assert_equal_b(true, git_path_validate(NULL, " ", 0, 0));
-       cl_assert_equal_b(true, git_path_validate(NULL, "foo /bar", 0, 0));
-
-       cl_assert_equal_b(false, git_path_validate(NULL, "foo ", 0, GIT_PATH_REJECT_TRAILING_SPACE));
-       cl_assert_equal_b(false, git_path_validate(NULL, "foo   ", 0, GIT_PATH_REJECT_TRAILING_SPACE));
-       cl_assert_equal_b(false, git_path_validate(NULL, "foo/bar ", 0, GIT_PATH_REJECT_TRAILING_SPACE));
-       cl_assert_equal_b(false, git_path_validate(NULL, " ", 0, GIT_PATH_REJECT_TRAILING_SPACE));
-       cl_assert_equal_b(false, git_path_validate(NULL, "foo /bar", 0, GIT_PATH_REJECT_TRAILING_SPACE));
+       cl_assert_equal_b(true, git_fs_path_is_valid("foo ", 0));
+       cl_assert_equal_b(true, git_fs_path_is_valid("foo   ", 0));
+       cl_assert_equal_b(true, git_fs_path_is_valid("foo/bar ", 0));
+       cl_assert_equal_b(true, git_fs_path_is_valid(" ", 0));
+       cl_assert_equal_b(true, git_fs_path_is_valid("foo /bar", 0));
+
+       cl_assert_equal_b(false, git_fs_path_is_valid("foo ", GIT_FS_PATH_REJECT_TRAILING_SPACE));
+       cl_assert_equal_b(false, git_fs_path_is_valid("foo   ", GIT_FS_PATH_REJECT_TRAILING_SPACE));
+       cl_assert_equal_b(false, git_fs_path_is_valid("foo/bar ", GIT_FS_PATH_REJECT_TRAILING_SPACE));
+       cl_assert_equal_b(false, git_fs_path_is_valid(" ", GIT_FS_PATH_REJECT_TRAILING_SPACE));
+       cl_assert_equal_b(false, git_fs_path_is_valid("foo /bar", GIT_FS_PATH_REJECT_TRAILING_SPACE));
 }
 
 void test_path_core__isvalid_trailing_colon(void)
 {
-       cl_assert_equal_b(true, git_path_validate(NULL, "foo:", 0, 0));
-       cl_assert_equal_b(true, git_path_validate(NULL, "foo/bar:", 0, 0));
-       cl_assert_equal_b(true, git_path_validate(NULL, ":", 0, 0));
-       cl_assert_equal_b(true, git_path_validate(NULL, "foo:/bar", 0, 0));
-
-       cl_assert_equal_b(false, git_path_validate(NULL, "foo:", 0, GIT_PATH_REJECT_TRAILING_COLON));
-       cl_assert_equal_b(false, git_path_validate(NULL, "foo/bar:", 0, GIT_PATH_REJECT_TRAILING_COLON));
-       cl_assert_equal_b(false, git_path_validate(NULL, ":", 0, GIT_PATH_REJECT_TRAILING_COLON));
-       cl_assert_equal_b(false, git_path_validate(NULL, "foo:/bar", 0, GIT_PATH_REJECT_TRAILING_COLON));
-}
-
-void test_path_core__isvalid_dotgit_ntfs(void)
-{
-       cl_assert_equal_b(true, git_path_validate(NULL, ".git", 0, 0));
-       cl_assert_equal_b(true, git_path_validate(NULL, ".git ", 0, 0));
-       cl_assert_equal_b(true, git_path_validate(NULL, ".git.", 0, 0));
-       cl_assert_equal_b(true, git_path_validate(NULL, ".git.. .", 0, 0));
-
-       cl_assert_equal_b(true, git_path_validate(NULL, "git~1", 0, 0));
-       cl_assert_equal_b(true, git_path_validate(NULL, "git~1 ", 0, 0));
-       cl_assert_equal_b(true, git_path_validate(NULL, "git~1.", 0, 0));
-       cl_assert_equal_b(true, git_path_validate(NULL, "git~1.. .", 0, 0));
-
-       cl_assert_equal_b(false, git_path_validate(NULL, ".git", 0, GIT_PATH_REJECT_DOT_GIT_NTFS));
-       cl_assert_equal_b(false, git_path_validate(NULL, ".git ", 0, GIT_PATH_REJECT_DOT_GIT_NTFS));
-       cl_assert_equal_b(false, git_path_validate(NULL, ".git.", 0, GIT_PATH_REJECT_DOT_GIT_NTFS));
-       cl_assert_equal_b(false, git_path_validate(NULL, ".git.. .", 0, GIT_PATH_REJECT_DOT_GIT_NTFS));
-
-       cl_assert_equal_b(false, git_path_validate(NULL, "git~1", 0, GIT_PATH_REJECT_DOT_GIT_NTFS));
-       cl_assert_equal_b(false, git_path_validate(NULL, "git~1 ", 0, GIT_PATH_REJECT_DOT_GIT_NTFS));
-       cl_assert_equal_b(false, git_path_validate(NULL, "git~1.", 0, GIT_PATH_REJECT_DOT_GIT_NTFS));
-       cl_assert_equal_b(false, git_path_validate(NULL, "git~1.. .", 0, GIT_PATH_REJECT_DOT_GIT_NTFS));
+       cl_assert_equal_b(true, git_fs_path_is_valid("foo:", 0));
+       cl_assert_equal_b(true, git_fs_path_is_valid("foo/bar:", 0));
+       cl_assert_equal_b(true, git_fs_path_is_valid(":", 0));
+       cl_assert_equal_b(true, git_fs_path_is_valid("foo:/bar", 0));
+
+       cl_assert_equal_b(false, git_fs_path_is_valid("foo:", GIT_FS_PATH_REJECT_TRAILING_COLON));
+       cl_assert_equal_b(false, git_fs_path_is_valid("foo/bar:", GIT_FS_PATH_REJECT_TRAILING_COLON));
+       cl_assert_equal_b(false, git_fs_path_is_valid(":", GIT_FS_PATH_REJECT_TRAILING_COLON));
+       cl_assert_equal_b(false, git_fs_path_is_valid("foo:/bar", GIT_FS_PATH_REJECT_TRAILING_COLON));
 }
 
 void test_path_core__isvalid_dos_paths(void)
 {
-       cl_assert_equal_b(true, git_path_validate(NULL, "aux", 0, 0));
-       cl_assert_equal_b(true, git_path_validate(NULL, "aux.", 0, 0));
-       cl_assert_equal_b(true, git_path_validate(NULL, "aux:", 0, 0));
-       cl_assert_equal_b(true, git_path_validate(NULL, "aux.asdf", 0, 0));
-       cl_assert_equal_b(true, git_path_validate(NULL, "aux.asdf\\zippy", 0, 0));
-       cl_assert_equal_b(true, git_path_validate(NULL, "aux:asdf\\foobar", 0, 0));
-       cl_assert_equal_b(true, git_path_validate(NULL, "con", 0, 0));
-       cl_assert_equal_b(true, git_path_validate(NULL, "prn", 0, 0));
-       cl_assert_equal_b(true, git_path_validate(NULL, "nul", 0, 0));
-
-       cl_assert_equal_b(false, git_path_validate(NULL, "aux", 0, GIT_PATH_REJECT_DOS_PATHS));
-       cl_assert_equal_b(false, git_path_validate(NULL, "aux.", 0, GIT_PATH_REJECT_DOS_PATHS));
-       cl_assert_equal_b(false, git_path_validate(NULL, "aux:", 0, GIT_PATH_REJECT_DOS_PATHS));
-       cl_assert_equal_b(false, git_path_validate(NULL, "aux.asdf", 0, GIT_PATH_REJECT_DOS_PATHS));
-       cl_assert_equal_b(false, git_path_validate(NULL, "aux.asdf\\zippy", 0, GIT_PATH_REJECT_DOS_PATHS));
-       cl_assert_equal_b(false, git_path_validate(NULL, "aux:asdf\\foobar", 0, GIT_PATH_REJECT_DOS_PATHS));
-       cl_assert_equal_b(false, git_path_validate(NULL, "con", 0, GIT_PATH_REJECT_DOS_PATHS));
-       cl_assert_equal_b(false, git_path_validate(NULL, "prn", 0, GIT_PATH_REJECT_DOS_PATHS));
-       cl_assert_equal_b(false, git_path_validate(NULL, "nul", 0, GIT_PATH_REJECT_DOS_PATHS));
-
-       cl_assert_equal_b(true, git_path_validate(NULL, "aux1", 0, 0));
-       cl_assert_equal_b(true, git_path_validate(NULL, "aux1", 0, GIT_PATH_REJECT_DOS_PATHS));
-       cl_assert_equal_b(true, git_path_validate(NULL, "auxn", 0, GIT_PATH_REJECT_DOS_PATHS));
-       cl_assert_equal_b(true, git_path_validate(NULL, "aux\\foo", 0, GIT_PATH_REJECT_DOS_PATHS));
+       cl_assert_equal_b(true, git_fs_path_is_valid("aux", 0));
+       cl_assert_equal_b(true, git_fs_path_is_valid("aux.", 0));
+       cl_assert_equal_b(true, git_fs_path_is_valid("aux:", 0));
+       cl_assert_equal_b(true, git_fs_path_is_valid("aux.asdf", 0));
+       cl_assert_equal_b(true, git_fs_path_is_valid("aux.asdf\\zippy", 0));
+       cl_assert_equal_b(true, git_fs_path_is_valid("aux:asdf\\foobar", 0));
+       cl_assert_equal_b(true, git_fs_path_is_valid("con", 0));
+       cl_assert_equal_b(true, git_fs_path_is_valid("prn", 0));
+       cl_assert_equal_b(true, git_fs_path_is_valid("nul", 0));
+
+       cl_assert_equal_b(false, git_fs_path_is_valid("aux", GIT_FS_PATH_REJECT_DOS_PATHS));
+       cl_assert_equal_b(false, git_fs_path_is_valid("aux.", GIT_FS_PATH_REJECT_DOS_PATHS));
+       cl_assert_equal_b(false, git_fs_path_is_valid("aux:", GIT_FS_PATH_REJECT_DOS_PATHS));
+       cl_assert_equal_b(false, git_fs_path_is_valid("aux.asdf", GIT_FS_PATH_REJECT_DOS_PATHS));
+       cl_assert_equal_b(false, git_fs_path_is_valid("aux.asdf\\zippy", GIT_FS_PATH_REJECT_DOS_PATHS));
+       cl_assert_equal_b(false, git_fs_path_is_valid("aux:asdf\\foobar", GIT_FS_PATH_REJECT_DOS_PATHS));
+       cl_assert_equal_b(false, git_fs_path_is_valid("con", GIT_FS_PATH_REJECT_DOS_PATHS));
+       cl_assert_equal_b(false, git_fs_path_is_valid("prn", GIT_FS_PATH_REJECT_DOS_PATHS));
+       cl_assert_equal_b(false, git_fs_path_is_valid("nul", GIT_FS_PATH_REJECT_DOS_PATHS));
+
+       cl_assert_equal_b(true, git_fs_path_is_valid("aux1", 0));
+       cl_assert_equal_b(true, git_fs_path_is_valid("aux1", GIT_FS_PATH_REJECT_DOS_PATHS));
+       cl_assert_equal_b(true, git_fs_path_is_valid("auxn", GIT_FS_PATH_REJECT_DOS_PATHS));
+       cl_assert_equal_b(true, git_fs_path_is_valid("aux\\foo", GIT_FS_PATH_REJECT_DOS_PATHS));
 }
 
 void test_path_core__isvalid_dos_paths_withnum(void)
 {
-       cl_assert_equal_b(true, git_path_validate(NULL, "com1", 0, 0));
-       cl_assert_equal_b(true, git_path_validate(NULL, "com1.", 0, 0));
-       cl_assert_equal_b(true, git_path_validate(NULL, "com1:", 0, 0));
-       cl_assert_equal_b(true, git_path_validate(NULL, "com1.asdf", 0, 0));
-       cl_assert_equal_b(true, git_path_validate(NULL, "com1.asdf\\zippy", 0, 0));
-       cl_assert_equal_b(true, git_path_validate(NULL, "com1:asdf\\foobar", 0, 0));
-       cl_assert_equal_b(true, git_path_validate(NULL, "com1\\foo", 0, 0));
-       cl_assert_equal_b(true, git_path_validate(NULL, "lpt1", 0, 0));
-
-       cl_assert_equal_b(false, git_path_validate(NULL, "com1", 0, GIT_PATH_REJECT_DOS_PATHS));
-       cl_assert_equal_b(false, git_path_validate(NULL, "com1.", 0, GIT_PATH_REJECT_DOS_PATHS));
-       cl_assert_equal_b(false, git_path_validate(NULL, "com1:", 0, GIT_PATH_REJECT_DOS_PATHS));
-       cl_assert_equal_b(false, git_path_validate(NULL, "com1.asdf", 0, GIT_PATH_REJECT_DOS_PATHS));
-       cl_assert_equal_b(false, git_path_validate(NULL, "com1.asdf\\zippy", 0, GIT_PATH_REJECT_DOS_PATHS));
-       cl_assert_equal_b(false, git_path_validate(NULL, "com1:asdf\\foobar", 0, GIT_PATH_REJECT_DOS_PATHS));
-       cl_assert_equal_b(false, git_path_validate(NULL, "com1/foo", 0, GIT_PATH_REJECT_DOS_PATHS));
-       cl_assert_equal_b(false, git_path_validate(NULL, "lpt1", 0, GIT_PATH_REJECT_DOS_PATHS));
-
-       cl_assert_equal_b(true, git_path_validate(NULL, "com0", 0, 0));
-       cl_assert_equal_b(true, git_path_validate(NULL, "com0", 0, GIT_PATH_REJECT_DOS_PATHS));
-       cl_assert_equal_b(true, git_path_validate(NULL, "com10", 0, 0));
-       cl_assert_equal_b(true, git_path_validate(NULL, "com10", 0, GIT_PATH_REJECT_DOS_PATHS));
-       cl_assert_equal_b(true, git_path_validate(NULL, "comn", 0, GIT_PATH_REJECT_DOS_PATHS));
-       cl_assert_equal_b(true, git_path_validate(NULL, "com1\\foo", 0, GIT_PATH_REJECT_DOS_PATHS));
-       cl_assert_equal_b(true, git_path_validate(NULL, "lpt0", 0, GIT_PATH_REJECT_DOS_PATHS));
-       cl_assert_equal_b(true, git_path_validate(NULL, "lpt10", 0, GIT_PATH_REJECT_DOS_PATHS));
-       cl_assert_equal_b(true, git_path_validate(NULL, "lptn", 0, GIT_PATH_REJECT_DOS_PATHS));
+       cl_assert_equal_b(true, git_fs_path_is_valid("com1", 0));
+       cl_assert_equal_b(true, git_fs_path_is_valid("com1.", 0));
+       cl_assert_equal_b(true, git_fs_path_is_valid("com1:", 0));
+       cl_assert_equal_b(true, git_fs_path_is_valid("com1.asdf", 0));
+       cl_assert_equal_b(true, git_fs_path_is_valid("com1.asdf\\zippy", 0));
+       cl_assert_equal_b(true, git_fs_path_is_valid("com1:asdf\\foobar", 0));
+       cl_assert_equal_b(true, git_fs_path_is_valid("com1\\foo", 0));
+       cl_assert_equal_b(true, git_fs_path_is_valid("lpt1", 0));
+
+       cl_assert_equal_b(false, git_fs_path_is_valid("com1", GIT_FS_PATH_REJECT_DOS_PATHS));
+       cl_assert_equal_b(false, git_fs_path_is_valid("com1.", GIT_FS_PATH_REJECT_DOS_PATHS));
+       cl_assert_equal_b(false, git_fs_path_is_valid("com1:", GIT_FS_PATH_REJECT_DOS_PATHS));
+       cl_assert_equal_b(false, git_fs_path_is_valid("com1.asdf", GIT_FS_PATH_REJECT_DOS_PATHS));
+       cl_assert_equal_b(false, git_fs_path_is_valid("com1.asdf\\zippy", GIT_FS_PATH_REJECT_DOS_PATHS));
+       cl_assert_equal_b(false, git_fs_path_is_valid("com1:asdf\\foobar", GIT_FS_PATH_REJECT_DOS_PATHS));
+       cl_assert_equal_b(false, git_fs_path_is_valid("com1/foo", GIT_FS_PATH_REJECT_DOS_PATHS));
+       cl_assert_equal_b(false, git_fs_path_is_valid("lpt1", GIT_FS_PATH_REJECT_DOS_PATHS));
+
+       cl_assert_equal_b(true, git_fs_path_is_valid("com0", 0));
+       cl_assert_equal_b(true, git_fs_path_is_valid("com0", GIT_FS_PATH_REJECT_DOS_PATHS));
+       cl_assert_equal_b(true, git_fs_path_is_valid("com10", 0));
+       cl_assert_equal_b(true, git_fs_path_is_valid("com10", GIT_FS_PATH_REJECT_DOS_PATHS));
+       cl_assert_equal_b(true, git_fs_path_is_valid("comn", GIT_FS_PATH_REJECT_DOS_PATHS));
+       cl_assert_equal_b(true, git_fs_path_is_valid("com1\\foo", GIT_FS_PATH_REJECT_DOS_PATHS));
+       cl_assert_equal_b(true, git_fs_path_is_valid("lpt0", GIT_FS_PATH_REJECT_DOS_PATHS));
+       cl_assert_equal_b(true, git_fs_path_is_valid("lpt10", GIT_FS_PATH_REJECT_DOS_PATHS));
+       cl_assert_equal_b(true, git_fs_path_is_valid("lptn", GIT_FS_PATH_REJECT_DOS_PATHS));
 }
 
 void test_path_core__isvalid_nt_chars(void)
 {
-       cl_assert_equal_b(true, git_path_validate(NULL, "asdf\001foo", 0, 0));
-       cl_assert_equal_b(true, git_path_validate(NULL, "asdf\037bar", 0, 0));
-       cl_assert_equal_b(true, git_path_validate(NULL, "asdf<bar", 0, 0));
-       cl_assert_equal_b(true, git_path_validate(NULL, "asdf>foo", 0, 0));
-       cl_assert_equal_b(true, git_path_validate(NULL, "asdf:foo", 0, 0));
-       cl_assert_equal_b(true, git_path_validate(NULL, "asdf\"bar", 0, 0));
-       cl_assert_equal_b(true, git_path_validate(NULL, "asdf|foo", 0, 0));
-       cl_assert_equal_b(true, git_path_validate(NULL, "asdf?bar", 0, 0));
-       cl_assert_equal_b(true, git_path_validate(NULL, "asdf*bar", 0, 0));
-
-       cl_assert_equal_b(false, git_path_validate(NULL, "asdf\001foo", 0, GIT_PATH_REJECT_NT_CHARS));
-       cl_assert_equal_b(false, git_path_validate(NULL, "asdf\037bar", 0, GIT_PATH_REJECT_NT_CHARS));
-       cl_assert_equal_b(false, git_path_validate(NULL, "asdf<bar", 0, GIT_PATH_REJECT_NT_CHARS));
-       cl_assert_equal_b(false, git_path_validate(NULL, "asdf>foo", 0, GIT_PATH_REJECT_NT_CHARS));
-       cl_assert_equal_b(false, git_path_validate(NULL, "asdf:foo", 0, GIT_PATH_REJECT_NT_CHARS));
-       cl_assert_equal_b(false, git_path_validate(NULL, "asdf\"bar", 0, GIT_PATH_REJECT_NT_CHARS));
-       cl_assert_equal_b(false, git_path_validate(NULL, "asdf|foo", 0, GIT_PATH_REJECT_NT_CHARS));
-       cl_assert_equal_b(false, git_path_validate(NULL, "asdf?bar", 0, GIT_PATH_REJECT_NT_CHARS));
-       cl_assert_equal_b(false, git_path_validate(NULL, "asdf*bar", 0, GIT_PATH_REJECT_NT_CHARS));
-}
-
-void test_path_core__isvalid_dotgit_with_hfs_ignorables(void)
-{
-       cl_assert_equal_b(false, git_path_validate(NULL, ".git", 0, GIT_PATH_REJECT_DOT_GIT_HFS));
-       cl_assert_equal_b(false, git_path_validate(NULL, ".git\xe2\x80\x8c", 0, GIT_PATH_REJECT_DOT_GIT_HFS));
-       cl_assert_equal_b(false, git_path_validate(NULL, ".gi\xe2\x80\x8dT", 0, GIT_PATH_REJECT_DOT_GIT_HFS));
-       cl_assert_equal_b(false, git_path_validate(NULL, ".g\xe2\x80\x8eIt", 0, GIT_PATH_REJECT_DOT_GIT_HFS));
-       cl_assert_equal_b(false, git_path_validate(NULL, ".\xe2\x80\x8fgIt", 0, GIT_PATH_REJECT_DOT_GIT_HFS));
-       cl_assert_equal_b(false, git_path_validate(NULL, "\xe2\x80\xaa.gIt", 0, GIT_PATH_REJECT_DOT_GIT_HFS));
-
-       cl_assert_equal_b(false, git_path_validate(NULL, "\xe2\x80\xab.\xe2\x80\xacG\xe2\x80\xadI\xe2\x80\xaet", 0, GIT_PATH_REJECT_DOT_GIT_HFS));
-       cl_assert_equal_b(false, git_path_validate(NULL, "\xe2\x81\xab.\xe2\x80\xaaG\xe2\x81\xabI\xe2\x80\xact", 0, GIT_PATH_REJECT_DOT_GIT_HFS));
-       cl_assert_equal_b(false, git_path_validate(NULL, "\xe2\x81\xad.\xe2\x80\xaeG\xef\xbb\xbfIT", 0, GIT_PATH_REJECT_DOT_GIT_HFS));
-
-       cl_assert_equal_b(true, git_path_validate(NULL, ".", 0, GIT_PATH_REJECT_DOT_GIT_HFS));
-       cl_assert_equal_b(true, git_path_validate(NULL, ".g", 0, GIT_PATH_REJECT_DOT_GIT_HFS));
-       cl_assert_equal_b(true, git_path_validate(NULL, ".gi", 0, GIT_PATH_REJECT_DOT_GIT_HFS));
-       cl_assert_equal_b(true, git_path_validate(NULL, " .git", 0, GIT_PATH_REJECT_DOT_GIT_HFS));
-       cl_assert_equal_b(true, git_path_validate(NULL, "..git\xe2\x80\x8c", 0, GIT_PATH_REJECT_DOT_GIT_HFS));
-       cl_assert_equal_b(true, git_path_validate(NULL, ".gi\xe2\x80\x8dT.", 0, GIT_PATH_REJECT_DOT_GIT_HFS));
-       cl_assert_equal_b(true, git_path_validate(NULL, ".g\xe2\x80It", 0, GIT_PATH_REJECT_DOT_GIT_HFS));
-       cl_assert_equal_b(true, git_path_validate(NULL, ".\xe2gIt", 0, GIT_PATH_REJECT_DOT_GIT_HFS));
-       cl_assert_equal_b(true, git_path_validate(NULL, "\xe2\x80\xaa.gi", 0, GIT_PATH_REJECT_DOT_GIT_HFS));
-       cl_assert_equal_b(true, git_path_validate(NULL, ".gi\x80\x8dT", 0, GIT_PATH_REJECT_DOT_GIT_HFS));
-       cl_assert_equal_b(true, git_path_validate(NULL, ".gi\x8dT", 0, GIT_PATH_REJECT_DOT_GIT_HFS));
-       cl_assert_equal_b(true, git_path_validate(NULL, ".g\xe2i\x80T\x8e", 0, GIT_PATH_REJECT_DOT_GIT_HFS));
-       cl_assert_equal_b(true, git_path_validate(NULL, ".git\xe2\x80\xbf", 0, GIT_PATH_REJECT_DOT_GIT_HFS));
-       cl_assert_equal_b(true, git_path_validate(NULL, ".git\xe2\xab\x81", 0, GIT_PATH_REJECT_DOT_GIT_HFS));
+       cl_assert_equal_b(true, git_fs_path_is_valid("asdf\001foo", 0));
+       cl_assert_equal_b(true, git_fs_path_is_valid("asdf\037bar", 0));
+       cl_assert_equal_b(true, git_fs_path_is_valid("asdf<bar", 0));
+       cl_assert_equal_b(true, git_fs_path_is_valid("asdf>foo", 0));
+       cl_assert_equal_b(true, git_fs_path_is_valid("asdf:foo", 0));
+       cl_assert_equal_b(true, git_fs_path_is_valid("asdf\"bar", 0));
+       cl_assert_equal_b(true, git_fs_path_is_valid("asdf|foo", 0));
+       cl_assert_equal_b(true, git_fs_path_is_valid("asdf?bar", 0));
+       cl_assert_equal_b(true, git_fs_path_is_valid("asdf*bar", 0));
+
+       cl_assert_equal_b(false, git_fs_path_is_valid("asdf\001foo", GIT_FS_PATH_REJECT_NT_CHARS));
+       cl_assert_equal_b(false, git_fs_path_is_valid("asdf\037bar", GIT_FS_PATH_REJECT_NT_CHARS));
+       cl_assert_equal_b(false, git_fs_path_is_valid("asdf<bar", GIT_FS_PATH_REJECT_NT_CHARS));
+       cl_assert_equal_b(false, git_fs_path_is_valid("asdf>foo", GIT_FS_PATH_REJECT_NT_CHARS));
+       cl_assert_equal_b(false, git_fs_path_is_valid("asdf:foo", GIT_FS_PATH_REJECT_NT_CHARS));
+       cl_assert_equal_b(false, git_fs_path_is_valid("asdf\"bar", GIT_FS_PATH_REJECT_NT_CHARS));
+       cl_assert_equal_b(false, git_fs_path_is_valid("asdf|foo", GIT_FS_PATH_REJECT_NT_CHARS));
+       cl_assert_equal_b(false, git_fs_path_is_valid("asdf?bar", GIT_FS_PATH_REJECT_NT_CHARS));
+       cl_assert_equal_b(false, git_fs_path_is_valid("asdf*bar", GIT_FS_PATH_REJECT_NT_CHARS));
 }
 
 void test_path_core__validate_workdir(void)
 {
-       cl_must_pass(git_path_validate_workdir(NULL, "/foo/bar"));
-       cl_must_pass(git_path_validate_workdir(NULL, "C:\\Foo\\Bar"));
-       cl_must_pass(git_path_validate_workdir(NULL, "\\\\?\\C:\\Foo\\Bar"));
-       cl_must_pass(git_path_validate_workdir(NULL, "\\\\?\\C:\\Foo\\Bar"));
-       cl_must_pass(git_path_validate_workdir(NULL, "\\\\?\\UNC\\server\\C$\\folder"));
+       cl_must_pass(git_path_validate_length(NULL, "/foo/bar"));
+       cl_must_pass(git_path_validate_length(NULL, "C:\\Foo\\Bar"));
+       cl_must_pass(git_path_validate_length(NULL, "\\\\?\\C:\\Foo\\Bar"));
+       cl_must_pass(git_path_validate_length(NULL, "\\\\?\\C:\\Foo\\Bar"));
+       cl_must_pass(git_path_validate_length(NULL, "\\\\?\\UNC\\server\\C$\\folder"));
 
 #ifdef GIT_WIN32
        /*
-        * In the absense of a repo configuration, 259 character paths
+        * In the absence of a repo configuration, 259 character paths
         * succeed. >= 260 character paths fail.
         */
-       cl_must_pass(git_path_validate_workdir(NULL, "C:\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\ok.txt"));
-       cl_must_pass(git_path_validate_workdir(NULL, "C:\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\260.txt"));
-       cl_must_fail(git_path_validate_workdir(NULL, "C:\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\longer_than_260.txt"));
+       cl_must_pass(git_path_validate_length(NULL, "C:\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\ok.txt"));
+       cl_must_pass(git_path_validate_length(NULL, "C:\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\260.txt"));
+       cl_must_fail(git_path_validate_length(NULL, "C:\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\longer_than_260.txt"));
 
        /* count characters, not bytes */
-       cl_must_pass(git_path_validate_workdir(NULL, "C:\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\\xc2\xa2\xc2\xa2\xc2\xa2\xc2\xa2\xc2\xa2\xc2\xa2\xc2\xa2\xc2\xa2\xc2\xa2\\260.txt"));
-       cl_must_fail(git_path_validate_workdir(NULL, "C:\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\\xc2\xa2\xc2\xa2\xc2\xa2\xc2\xa2\xc2\xa2\xc2\xa2\xc2\xa2\xc2\xa2\xc2\xa2\\long.txt"));
+       cl_must_pass(git_path_validate_length(NULL, "C:\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\\xc2\xa2\xc2\xa2\xc2\xa2\xc2\xa2\xc2\xa2\xc2\xa2\xc2\xa2\xc2\xa2\xc2\xa2\\260.txt"));
+       cl_must_fail(git_path_validate_length(NULL, "C:\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\\xc2\xa2\xc2\xa2\xc2\xa2\xc2\xa2\xc2\xa2\xc2\xa2\xc2\xa2\xc2\xa2\xc2\xa2\\long.txt"));
 #else
-       cl_must_pass(git_path_validate_workdir(NULL, "/c/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/ok.txt"));
-       cl_must_pass(git_path_validate_workdir(NULL, "/c/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/260.txt"));
-       cl_must_pass(git_path_validate_workdir(NULL, "/c/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/longer_than_260.txt"));
-       cl_must_pass(git_path_validate_workdir(NULL, "C:\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\\xc2\xa2\xc2\xa2\xc2\xa2\xc2\xa2\xc2\xa2\xc2\xa2\xc2\xa2\xc2\xa2\xc2\xa2\\260.txt"));
-       cl_must_pass(git_path_validate_workdir(NULL, "C:\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\\xc2\xa2\xc2\xa2\xc2\xa2\xc2\xa2\xc2\xa2\xc2\xa2\xc2\xa2\xc2\xa2\xc2\xa2\\long.txt"));
+       cl_must_pass(git_path_validate_length(NULL, "/c/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/ok.txt"));
+       cl_must_pass(git_path_validate_length(NULL, "/c/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/260.txt"));
+       cl_must_pass(git_path_validate_length(NULL, "/c/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/longer_than_260.txt"));
+       cl_must_pass(git_path_validate_length(NULL, "C:\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\\xc2\xa2\xc2\xa2\xc2\xa2\xc2\xa2\xc2\xa2\xc2\xa2\xc2\xa2\xc2\xa2\xc2\xa2\\260.txt"));
+       cl_must_pass(git_path_validate_length(NULL, "C:\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\aaaaaaaaa\\\xc2\xa2\xc2\xa2\xc2\xa2\xc2\xa2\xc2\xa2\xc2\xa2\xc2\xa2\xc2\xa2\xc2\xa2\\long.txt"));
 #endif
 }
 
@@ -352,15 +321,15 @@ void test_path_core__validate_workdir_with_core_longpath(void)
        cl_git_pass(git_repository_config(&config, repo));
 
        /* fail by default */
-       cl_must_fail(git_path_validate_workdir(repo, "/c/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/longer_than_260.txt"));
+       cl_must_fail(git_path_validate_length(repo, "/c/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/longer_than_260.txt"));
 
        /* set core.longpaths explicitly on */
        cl_git_pass(git_config_set_bool(config, "core.longpaths", 1));
-       cl_must_pass(git_path_validate_workdir(repo, "/c/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/longer_than_260.txt"));
+       cl_must_pass(git_path_validate_length(repo, "/c/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/longer_than_260.txt"));
 
        /* set core.longpaths explicitly off */
        cl_git_pass(git_config_set_bool(config, "core.longpaths", 0));
-       cl_must_fail(git_path_validate_workdir(repo, "/c/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/longer_than_260.txt"));
+       cl_must_fail(git_path_validate_length(repo, "/c/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/aaaaaaaaa/longer_than_260.txt"));
 
        git_config_free(config);
        git_repository_free(repo);
@@ -373,19 +342,19 @@ static void test_join_unrooted(
        const char *path,
        const char *base)
 {
-       git_buf result = GIT_BUF_INIT;
+       git_str result = GIT_STR_INIT;
        ssize_t root_at;
 
-       cl_git_pass(git_path_join_unrooted(&result, path, base, &root_at));
+       cl_git_pass(git_fs_path_join_unrooted(&result, path, base, &root_at));
        cl_assert_equal_s(expected_result, result.ptr);
        cl_assert_equal_i(expected_rootlen, root_at);
 
-       git_buf_dispose(&result);
+       git_str_dispose(&result);
 }
 
 void test_path_core__join_unrooted(void)
 {
-       git_buf out = GIT_BUF_INIT;
+       git_str out = GIT_STR_INIT;
 
        test_join_unrooted("foo", 0, "foo", NULL);
        test_join_unrooted("foo/bar", 0, "foo/bar", NULL);
@@ -421,7 +390,7 @@ void test_path_core__join_unrooted(void)
        /* Trailing slash in the base is ignored */
        test_join_unrooted("c:/foo/bar/foobar", 6, "c:/foo/bar/foobar", "c:/foo/");
 
-       git_buf_dispose(&out);
+       git_str_dispose(&out);
 }
 
 void test_path_core__join_unrooted_respects_funny_windows_roots(void)