summaryrefslogtreecommitdiff
path: root/src/fileops.c
diff options
context:
space:
mode:
authorVicent Marti <tanoku@gmail.com>2011-07-05 01:11:33 +0200
committerVicent Marti <tanoku@gmail.com>2011-07-05 02:09:05 +0200
commiteec3fe394ad5953cc5e290e8bc6492dfbe463a1f (patch)
tree049e3c3956cec1841f0c9e9e014212c856890ecd /src/fileops.c
parent19ac1ed702b043790f4a6f0d095dd81f078b6c4c (diff)
downloadlibgit2-eec3fe394ad5953cc5e290e8bc6492dfbe463a1f.tar.gz
fileutils: Finish dropping the old `prettify_path`
Diffstat (limited to 'src/fileops.c')
-rw-r--r--src/fileops.c147
1 files changed, 0 insertions, 147 deletions
diff --git a/src/fileops.c b/src/fileops.c
index fa45fde96..52aeb41a3 100644
--- a/src/fileops.c
+++ b/src/fileops.c
@@ -306,153 +306,6 @@ int git_futils_mkdir_r(const char *path, int mode)
return GIT_SUCCESS;
}
-static int retrieve_previous_path_component_start(const char *path)
-{
- int offset, len, root_offset, start = 0;
-
- root_offset = git_path_root(path);
- if (root_offset > -1)
- start += root_offset;
-
- len = strlen(path);
- offset = len - 1;
-
- /* Skip leading slash */
- if (path[start] == '/')
- start++;
-
- /* Skip trailing slash */
- if (path[offset] == '/')
- offset--;
-
- if (offset < root_offset)
- return git__throw(GIT_ERROR, "Failed to retrieve path component. Wrong offset");
-
- while (offset > start && path[offset-1] != '/') {
- offset--;
- }
-
- return offset;
-}
-
-int git_futils_prettify_dir(char *buffer_out, size_t size, const char *path, const char *base_path)
-{
- int len = 0, segment_len, only_dots, root_path_offset, error = GIT_SUCCESS;
- char *current;
- const char *buffer_out_start, *buffer_end;
-
- current = (char *)path;
- buffer_end = path + strlen(path);
- buffer_out_start = buffer_out;
-
- root_path_offset = git_path_root(path);
- if (root_path_offset < 0) {
- if (base_path == NULL) {
- error = p_getcwd(buffer_out, size);
- if (error < GIT_SUCCESS)
- return error; /* The callee already takes care of setting the correct error message. */
- } else {
- if (size < (strlen(base_path) + 1) * sizeof(char))
- return git__throw(GIT_EOVERFLOW, "Failed to prettify dir path: the base path is too long for the buffer.");
-
- strcpy(buffer_out, base_path);
- git_path_mkposix(buffer_out);
- git_path_join(buffer_out, buffer_out, "");
- }
-
- len = strlen(buffer_out);
- buffer_out += len;
- }
-
- while (current < buffer_end) {
- /* Prevent multiple slashes from being added to the output */
- if (*current == '/' && len > 0 && buffer_out_start[len - 1] == '/') {
- current++;
- continue;
- }
-
- only_dots = 1;
- segment_len = 0;
-
- /* Copy path segment to the output */
- while (current < buffer_end && *current != '/')
- {
- only_dots &= (*current == '.');
- *buffer_out++ = *current++;
- segment_len++;
- len++;
- }
-
- /* Skip current directory */
- if (only_dots && segment_len == 1)
- {
- current++;
- buffer_out -= segment_len;
- len -= segment_len;
- continue;
- }
-
- /* Handle the double-dot upward directory navigation */
- if (only_dots && segment_len == 2)
- {
- current++;
- buffer_out -= segment_len;
-
- *buffer_out ='\0';
- len = retrieve_previous_path_component_start(buffer_out_start);
-
- /* Are we escaping out of the root dir? */
- if (len < 0)
- return git__throw(GIT_EINVALIDPATH, "Failed to normalize path `%s`. The path escapes out of the root directory", path);
-
- buffer_out = (char *)buffer_out_start + len;
- continue;
- }
-
- /* Guard against potential multiple dot path traversal (cf http://cwe.mitre.org/data/definitions/33.html) */
- if (only_dots && segment_len > 0)
- return git__throw(GIT_EINVALIDPATH, "Failed to normalize path `%s`. The path contains a segment with three `.` or more", path);
-
- *buffer_out++ = '/';
- len++;
- }
-
- *buffer_out = '\0';
- return GIT_SUCCESS;
-}
-
-int git_futils_prettyify_file(char *buffer_out, size_t size, const char *path, const char *base_path)
-{
- int error, path_len, i, root_offset;
- const char* pattern = "/..";
-
- path_len = strlen(path);
-
- /* Let's make sure the filename isn't empty nor a dot */
- if (path_len == 0 || (path_len == 1 && *path == '.'))
- return git__throw(GIT_EINVALIDPATH, "Failed to normalize file path `%s`. The path is either empty or equals `.`", path);
-
- /* Let's make sure the filename doesn't end with "/", "/." or "/.." */
- for (i = 1; path_len > i && i < 4; i++) {
- if (!strncmp(path + path_len - i, pattern, i))
- return git__throw(GIT_EINVALIDPATH, "Failed to normalize file path `%s`. The path points to a folder", path);
- }
-
- error = git_futils_prettify_dir(buffer_out, size, path, base_path);
- if (error < GIT_SUCCESS)
- return error; /* The callee already takes care of setting the correct error message. */
-
- path_len = strlen(buffer_out);
- root_offset = git_path_root(buffer_out) + 1;
- if (path_len == root_offset)
- return git__throw(GIT_EINVALIDPATH, "Failed to normalize file path `%s`. The path points to a folder", path);
-
- /* Remove the trailing slash */
- buffer_out[path_len - 1] = '\0';
-
- return GIT_SUCCESS;
-}
-
int git_futils_cmp_path(const char *name1, int len1, int isdir1,
const char *name2, int len2, int isdir2)
{