Skip to content

Commit

Permalink
Remove unused normalize_absolute_path()
Browse files Browse the repository at this point in the history
This function is now superseded by normalize_path_copy().

Signed-off-by: Johannes Sixt <j6t@kdbg.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
Johannes Sixt authored and Junio C Hamano committed Feb 7, 2009
1 parent f42302b commit f2a782b
Show file tree
Hide file tree
Showing 2 changed files with 6 additions and 46 deletions.
1 change: 0 additions & 1 deletion cache.h
Original file line number Diff line number Diff line change
Expand Up @@ -547,7 +547,6 @@ static inline int is_absolute_path(const char *path)
const char *make_absolute_path(const char *path);
const char *make_nonrelative_path(const char *path);
const char *make_relative_path(const char *abs, const char *base);
int normalize_absolute_path(char *buf, const char *path);
int normalize_path_copy(char *dst, const char *src);
int longest_ancestor_length(const char *path, const char *prefix_list);

Expand Down
51 changes: 6 additions & 45 deletions path.c
Original file line number Diff line number Diff line change
Expand Up @@ -363,58 +363,19 @@ const char *make_relative_path(const char *abs, const char *base)
}

/*
* path = absolute path
* buf = buffer of at least max(2, strlen(path)+1) bytes
* It is okay if buf == path, but they should not overlap otherwise.
* It is okay if dst == src, but they should not overlap otherwise.
*
* Performs the following normalizations on path, storing the result in buf:
* - Removes trailing slashes.
* - Removes empty components.
* Performs the following normalizations on src, storing the result in dst:
* - Ensures that components are separated by '/' (Windows only)
* - Squashes sequences of '/'.
* - Removes "." components.
* - Removes ".." components, and the components the precede them.
* "" and paths that contain only slashes are normalized to "/".
* Returns the length of the output.
* Returns failure (non-zero) if a ".." component appears as first path
* component anytime during the normalization. Otherwise, returns success (0).
*
* Note that this function is purely textual. It does not follow symlinks,
* verify the existence of the path, or make any system calls.
*/
int normalize_absolute_path(char *buf, const char *path)
{
const char *comp_start = path, *comp_end = path;
char *dst = buf;
int comp_len;
assert(buf);
assert(path);

while (*comp_start) {
assert(*comp_start == '/');
while (*++comp_end && *comp_end != '/')
; /* nothing */
comp_len = comp_end - comp_start;

if (!strncmp("/", comp_start, comp_len) ||
!strncmp("/.", comp_start, comp_len))
goto next;

if (!strncmp("/..", comp_start, comp_len)) {
while (dst > buf && *--dst != '/')
; /* nothing */
goto next;
}

memmove(dst, comp_start, comp_len);
dst += comp_len;
next:
comp_start = comp_end;
}

if (dst == buf)
*dst++ = '/';

*dst = '\0';
return dst - buf;
}

int normalize_path_copy(char *dst, const char *src)
{
char *dst0;
Expand Down

0 comments on commit f2a782b

Please sign in to comment.