Commit 644c973f by Carlos Martín Nieto Committed by Patrick Steinhardt

path: accept the name length as a parameter

We may take in names from the middle of a string so we want the caller to let us
know how long the path component is that we should be checking.
parent 2143a0de
...@@ -1634,10 +1634,8 @@ GIT_INLINE(bool) only_spaces_and_dots(const char *path) ...@@ -1634,10 +1634,8 @@ GIT_INLINE(bool) only_spaces_and_dots(const char *path)
return true; return true;
} }
GIT_INLINE(bool) verify_dotgit_ntfs_generic(const char *name, const char *dotgit_name, const char *shortname_pfix) GIT_INLINE(bool) verify_dotgit_ntfs_generic(const char *name, size_t len, const char *dotgit_name, size_t dotgit_len, const char *shortname_pfix)
{ {
size_t len = strlen(name);
size_t dotgit_len = strlen(dotgit_name);
int i, saw_tilde; int i, saw_tilde;
if (name[0] == '.' && len >= dotgit_len && if (name[0] == '.' && len >= dotgit_len &&
...@@ -1841,64 +1839,64 @@ int git_path_normalize_slashes(git_buf *out, const char *path) ...@@ -1841,64 +1839,64 @@ int git_path_normalize_slashes(git_buf *out, const char *path)
return 0; return 0;
} }
static int verify_dotgit_generic(const char *name, const char *dotgit_name, const char *shortname_pfix) static int verify_dotgit_generic(const char *name, size_t len, const char *dotgit_name, size_t dotgit_len, const char *shortname_pfix)
{ {
if (!verify_dotgit_ntfs_generic(name, dotgit_name, shortname_pfix)) if (!verify_dotgit_ntfs_generic(name, len, dotgit_name, dotgit_len, shortname_pfix))
return false; return false;
return verify_dotgit_hfs_generic(name, strlen(name), dotgit_name, strlen(dotgit_name)); return verify_dotgit_hfs_generic(name, len, dotgit_name, dotgit_len);
} }
int git_path_is_ntfs_dotgit_modules(const char *name) int git_path_is_ntfs_dotgit_modules(const char *name, size_t len)
{ {
return !verify_dotgit_ntfs_generic(name, "gitmodules", "gi7eba"); return !verify_dotgit_ntfs_generic(name, len, "gitmodules", CONST_STRLEN("gitmodules"), "gi7eba");
} }
int git_path_is_hfs_dotgit_modules(const char *name) int git_path_is_hfs_dotgit_modules(const char *name, size_t len)
{ {
return !verify_dotgit_hfs_generic(name, strlen(name), "gitmodules", CONST_STRLEN("gitmodules")); return !verify_dotgit_hfs_generic(name, len, "gitmodules", CONST_STRLEN("gitmodules"));
} }
int git_path_is_dotgit_modules(const char *name) int git_path_is_dotgit_modules(const char *name, size_t len)
{ {
if (git_path_is_hfs_dotgit_modules(name)) if (git_path_is_hfs_dotgit_modules(name, len))
return 1; return 1;
return git_path_is_ntfs_dotgit_modules(name); return git_path_is_ntfs_dotgit_modules(name, len);
} }
int git_path_is_ntfs_dotgit_ignore(const char *name) int git_path_is_ntfs_dotgit_ignore(const char *name, size_t len)
{ {
return !verify_dotgit_ntfs_generic(name, "gitignore", "gi250a"); return !verify_dotgit_ntfs_generic(name, len, "gitignore", CONST_STRLEN("gitignore"), "gi250a");
} }
int git_path_is_hfs_dotgit_ignore(const char *name) int git_path_is_hfs_dotgit_ignore(const char *name, size_t len)
{ {
return !verify_dotgit_hfs_generic(name, strlen(name), "gitignore", CONST_STRLEN("gitignore")); return !verify_dotgit_hfs_generic(name, len, "gitignore", CONST_STRLEN("gitignore"));
} }
int git_path_is_dotgit_ignore(const char *name) int git_path_is_dotgit_ignore(const char *name, size_t len)
{ {
if (git_path_is_hfs_dotgit_ignore(name)) if (git_path_is_hfs_dotgit_ignore(name, len))
return 1; return 1;
return git_path_is_ntfs_dotgit_ignore(name); return git_path_is_ntfs_dotgit_ignore(name, len);
} }
int git_path_is_hfs_dotgit_attributes(const char *name) int git_path_is_hfs_dotgit_attributes(const char *name, size_t len)
{ {
return !verify_dotgit_hfs_generic(name, strlen(name), "gitattributes", CONST_STRLEN("gitattributes")); return !verify_dotgit_hfs_generic(name, len, "gitattributes", CONST_STRLEN("gitattributes"));
} }
int git_path_is_ntfs_dotgit_attributes(const char *name) int git_path_is_ntfs_dotgit_attributes(const char *name, size_t len)
{ {
return !verify_dotgit_ntfs_generic(name, "gitattributes", "gi7d29"); return !verify_dotgit_ntfs_generic(name, len, "gitattributes", CONST_STRLEN("gitattributes"), "gi7d29");
} }
int git_path_is_dotgit_attributes(const char *name) int git_path_is_dotgit_attributes(const char *name, size_t len)
{ {
if (git_path_is_hfs_dotgit_attributes(name)) if (git_path_is_hfs_dotgit_attributes(name, len))
return 1; return 1;
return git_path_is_ntfs_dotgit_attributes(name); return git_path_is_ntfs_dotgit_attributes(name, len);
} }
...@@ -634,63 +634,72 @@ int git_path_normalize_slashes(git_buf *out, const char *path); ...@@ -634,63 +634,72 @@ int git_path_normalize_slashes(git_buf *out, const char *path);
* Check whether a path component corresponds to a .gitmodules file * Check whether a path component corresponds to a .gitmodules file
* *
* @param name the path component to check * @param name the path component to check
* @param len the length of `name`
*/ */
extern int git_path_is_dotgit_modules(const char *name); extern int git_path_is_dotgit_modules(const char *name, size_t len);
/** /**
* Check whether a path component corresponds to a .gitmodules file in NTFS * Check whether a path component corresponds to a .gitmodules file in NTFS
* *
* @param name the path component to check * @param name the path component to check
* @param len the length of `name`
*/ */
extern int git_path_is_ntfs_dotgit_modules(const char *name); extern int git_path_is_ntfs_dotgit_modules(const char *name, size_t len);
/** /**
* Check whether a path component corresponds to a .gitmodules file in HFS+ * Check whether a path component corresponds to a .gitmodules file in HFS+
* *
* @param name the path component to check * @param name the path component to check
* @param len the length of `name`
*/ */
extern int git_path_is_hfs_dotgit_modules(const char *name); extern int git_path_is_hfs_dotgit_modules(const char *name, size_t len);
/** /**
* Check whether a path component corresponds to a .gitignore file * Check whether a path component corresponds to a .gitignore file
* *
* @param name the path component to check * @param name the path component to check
* @param len the length of `name`
*/ */
extern int git_path_is_dotgit_ignore(const char *name); extern int git_path_is_dotgit_ignore(const char *name, size_t len);
/** /**
* Check whether a path component corresponds to a .gitignore file in NTFS * Check whether a path component corresponds to a .gitignore file in NTFS
* *
* @param name the path component to check * @param name the path component to check
* @param len the length of `name`
*/ */
extern int git_path_is_ntfs_dotgit_ignore(const char *name); extern int git_path_is_ntfs_dotgit_ignore(const char *name, size_t len);
/** /**
* Check whether a path component corresponds to a .gitignore file in HFS+ * Check whether a path component corresponds to a .gitignore file in HFS+
* *
* @param name the path component to check * @param name the path component to check
* @param len the length of `name`
*/ */
extern int git_path_is_hfs_dotgit_ignore(const char *name); extern int git_path_is_hfs_dotgit_ignore(const char *name, size_t len);
/** /**
* Check whether a path component corresponds to a .gitignore file * Check whether a path component corresponds to a .gitignore file
* *
* @param name the path component to check * @param name the path component to check
* @param len the length of `name`
*/ */
extern int git_path_is_dotgit_attributes(const char *name); extern int git_path_is_dotgit_attributes(const char *name, size_t len);
/** /**
* Check whether a path component corresponds to a .gitattributes file in NTFS * Check whether a path component corresponds to a .gitattributes file in NTFS
* *
* @param name the path component to check * @param name the path component to check
* @param len the length of `name`
*/ */
extern int git_path_is_ntfs_dotgit_attributes(const char *name); extern int git_path_is_ntfs_dotgit_attributes(const char *name, size_t len);
/** /**
* Check whether a path component corresponds to a .gitattributes file in HFS+ * Check whether a path component corresponds to a .gitattributes file in HFS+
* *
* @param name the path component to check * @param name the path component to check
* @param len the length of `name`
*/ */
extern int git_path_is_hfs_dotgit_attributes(const char *name); extern int git_path_is_hfs_dotgit_attributes(const char *name, size_t len);
#endif #endif
...@@ -90,18 +90,18 @@ static char *gitmodules_not_altnames[] = { ...@@ -90,18 +90,18 @@ static char *gitmodules_not_altnames[] = {
void test_path_dotgit__dotgit_modules(void) void test_path_dotgit__dotgit_modules(void)
{ {
size_t i; size_t i;
cl_assert_equal_i(1, git_path_is_dotgit_modules(".gitmodules")); cl_assert_equal_i(1, git_path_is_dotgit_modules(".gitmodules", strlen(".gitmodules")));
cl_assert_equal_i(1, git_path_is_dotgit_modules(".git\xe2\x80\x8cmodules")); cl_assert_equal_i(1, git_path_is_dotgit_modules(".git\xe2\x80\x8cmodules", strlen(".git\xe2\x80\x8cmodules")));
for (i = 0; i < ARRAY_SIZE(gitmodules_altnames); i++) { for (i = 0; i < ARRAY_SIZE(gitmodules_altnames); i++) {
const char *name = gitmodules_altnames[i]; const char *name = gitmodules_altnames[i];
if (!git_path_is_dotgit_modules(name)) if (!git_path_is_dotgit_modules(name, strlen(name)))
cl_fail(name); cl_fail(name);
} }
for (i = 0; i < ARRAY_SIZE(gitmodules_not_altnames); i++) { for (i = 0; i < ARRAY_SIZE(gitmodules_not_altnames); i++) {
const char *name = gitmodules_not_altnames[i]; const char *name = gitmodules_not_altnames[i];
if (git_path_is_dotgit_modules(name)) if (git_path_is_dotgit_modules(name, strlen(name)))
cl_fail(name); cl_fail(name);
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment