Skip to content

Commit

Permalink
trim_last_path_component(): replace last_path_elm()
Browse files Browse the repository at this point in the history
Rewrite last_path_elm() to take a strbuf parameter and to trim off the
last path name element in place rather than returning a pointer to the
beginning of the last path name element. This simplifies the function
a bit and makes it integrate better with its caller, which is now also
strbuf-based. Rename the function accordingly and a bit less tersely.

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
Michael Haggerty authored and Junio C Hamano committed Oct 1, 2014
1 parent 6cad805 commit 0c0d6e8
Showing 1 changed file with 16 additions and 22 deletions.
38 changes: 16 additions & 22 deletions lockfile.c
Original file line number Diff line number Diff line change
Expand Up @@ -76,32 +76,28 @@ static void remove_lock_file_on_signal(int signo)
}

/*
* p = absolute or relative path name
* path = absolute or relative path name
*
* Return a pointer into p showing the beginning of the last path name
* element. If p is empty or the root directory ("/"), just return p.
* Remove the last path name element from path (leaving the preceding
* "/", if any). If path is empty or the root directory ("/"), set
* path to the empty string.
*/
static char *last_path_elm(char *p)
static void trim_last_path_component(struct strbuf *path)
{
/* r starts pointing to null at the end of the string */
char *r = strchr(p, '\0');

if (r == p)
return p; /* just return empty string */

r--; /* back up to last non-null character */
int i = path->len;

/* back up past trailing slashes, if any */
while (r > p && *r == '/')
r--;
while (i && path->buf[i - 1] == '/')
i--;

/*
* then go backwards until I hit a slash, or the beginning of
* the string
* then go backwards until a slash, or the beginning of the
* string
*/
while (r > p && *(r-1) != '/')
r--;
return r;
while (i && path->buf[i - 1] != '/')
i--;

strbuf_setlen(path, i);
}


Expand Down Expand Up @@ -131,14 +127,12 @@ static void resolve_symlink(struct strbuf *path)
if (is_absolute_path(link.buf))
/* absolute path simply replaces p */
strbuf_reset(path);
else {
else
/*
* link is a relative path, so replace the
* last element of p with it.
*/
char *r = last_path_elm(path->buf);
strbuf_setlen(path, r - path->buf);
}
trim_last_path_component(path);

strbuf_addbuf(path, &link);
}
Expand Down

0 comments on commit 0c0d6e8

Please sign in to comment.