summaryrefslogtreecommitdiff
path: root/src/fileops.h
diff options
context:
space:
mode:
authornulltoken <emeric.fermas@gmail.com>2011-01-11 20:12:53 +0100
committernulltoken <emeric.fermas@gmail.com>2011-01-11 20:12:53 +0100
commit170d3f2fbbaf529afc209f78fc7ee88b5680eb5d (patch)
treecb8b671e4152fb34a68ffad6c1c689c3495f8ee1 /src/fileops.h
parent0740b462da240a455ad35e011a44832d04fa2d7a (diff)
downloadlibgit2-170d3f2fbbaf529afc209f78fc7ee88b5680eb5d.tar.gz
Added git_prettify_dir_path().
Clean up a provided absolute or relative directory path. This prettification relies on basic operations such as coalescing multiple forward slashes into a single slash, removing '.' and './' current directory segments, and removing parent directory whenever '..' is encountered. If not empty, the returned path ends with a forward slash. For instance, this will turn "d1/s1///s2/..//../s3" into "d1/s3/". This only performs a string based analysis of the path. No checks are done to make sure the path actually makes sense from the file system perspective.
Diffstat (limited to 'src/fileops.h')
-rw-r--r--src/fileops.h24
1 files changed, 24 insertions, 0 deletions
diff --git a/src/fileops.h b/src/fileops.h
index 6656cdf43..30dc0b849 100644
--- a/src/fileops.h
+++ b/src/fileops.h
@@ -131,4 +131,28 @@ extern int gitfo_write_cached(gitfo_cache *ioc, void *buf, size_t len);
extern int gitfo_flush_cached(gitfo_cache *ioc);
extern int gitfo_close_cached(gitfo_cache *ioc);
+/**
+ * Clean up a provided absolute or relative directory path.
+ *
+ * This prettification relies on basic operations such as coalescing
+ * multiple forward slashes into a single slash, removing '.' and
+ * './' current directory segments, and removing parent directory
+ * whenever '..' is encountered.
+ *
+ * If not empty, the returned path ends with a forward slash.
+ *
+ * For instance, this will turn "d1/s1///s2/..//../s3" into "d1/s3/".
+ *
+ * This only performs a string based analysis of the path.
+ * No checks are done to make sure the path actually makes sense from
+ * the file system perspective.
+ *
+ * @param buffer_out buffer to populate with the normalized path.
+ * @param path directory path to clean up.
+ * @return
+ * - GIT_SUCCESS on success;
+ * - GIT_ERROR when the input path is invalid or escapes the current directory.
+ */
+GIT_EXTERN(int) git_prettify_dir_path(char *buffer_out, const char *path);
+
#endif /* INCLUDE_fileops_h__ */