diff options
| author | Ramsay Jones <ramsay@ramsay1.demon.co.uk> | 2009-01-12 19:42:13 +0000 |
|---|---|---|
| committer | Shawn O. Pearce <spearce@spearce.org> | 2009-01-28 12:25:24 -0800 |
| commit | ced645ea9ca4170bd75c17cb9c2c8f19f935491d (patch) | |
| tree | f2e2e7e17751b629cc3c13b0a7d0cab059cd1df4 /src/util.c | |
| parent | 66a4bfac99c07b79d75c015aed8f5972f0a4a336 (diff) | |
| download | libgit2-ced645ea9ca4170bd75c17cb9c2c8f19f935491d.tar.gz | |
Add git__dirname and git__basename utility routines
These routines are intended to extract the directory and
base name from a path string. Note that these routines
do not interact with any filesystem and work only on the
text of the path.
Signed-off-by: Ramsay Jones <ramsay@ramsay1.demon.co.uk>
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Diffstat (limited to 'src/util.c')
| -rw-r--r-- | src/util.c | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/src/util.c b/src/util.c index 80829e69e..3184a3abd 100644 --- a/src/util.c +++ b/src/util.c @@ -59,3 +59,65 @@ int git__suffixcmp(const char *str, const char *suffix) return -1; return strcmp(str + (a - b), suffix); } + +int git__dirname(char *dir, size_t n, char *path) +{ + char *s; + int len; + + assert(dir && n > 1); + + if (!path || !*path || !(s = strrchr(path, '/'))) { + strcpy(dir, "."); + return 1; + } + + if (s == path) { /* "/[aaa]" */ + strcpy(dir, "/"); + return 1; + } + + if ((len = s - path) >= n) + return GIT_ERROR; + + memcpy(dir, path, len); + dir[len] = '\0'; + + return len; +} + +int git__basename(char *base, size_t n, char *path) +{ + char *s; + int len; + + assert(base && n > 1); + + if (!path || !*path) { + strcpy(base, "."); + return 1; + } + len = strlen(path); + + if (!(s = strrchr(path, '/'))) { + if (len >= n) + return GIT_ERROR; + strcpy(base, path); + return len; + } + + if (s == path && len == 1) { /* "/" */ + strcpy(base, "/"); + return 1; + } + + len -= s - path; + if (len >= n) + return GIT_ERROR; + + memcpy(base, s+1, len); + base[len] = '\0'; + + return len; +} + |
