| tresolve absolute paths to repodir, remove basename just use strrchr. - stagit … | |
| git clone git://src.adamsgaard.dk/stagit | |
| Log | |
| Files | |
| Refs | |
| README | |
| LICENSE | |
| --- | |
| commit 8df54926f2ad80ae46a4cc701f3341e97839e0c8 | |
| parent 70b777831a80a7a204f02697563d39dba612c8c4 | |
| Author: Hiltjo Posthuma <[email protected]> | |
| Date: Wed, 27 Apr 2016 19:19:50 +0200 | |
| resolve absolute paths to repodir, remove basename just use strrchr. | |
| - resolve repodir, for example: stagit-index ../ used to use ".." as the name, | |
| now it will resolve to the real directory name. | |
| - just use strrchr(path, '/') instead of basename, '/' path separator is now | |
| used. | |
| Diffstat: | |
| M stagit-index.c | 37 ++++++++---------------------… | |
| M stagit.c | 32 ++++++++---------------------… | |
| 2 files changed, 17 insertions(+), 52 deletions(-) | |
| --- | |
| diff --git a/stagit-index.c b/stagit-index.c | |
| t@@ -3,7 +3,6 @@ | |
| #include <err.h> | |
| #include <errno.h> | |
| #include <inttypes.h> | |
| -#include <libgen.h> | |
| #include <limits.h> | |
| #include <stdio.h> | |
| #include <stdlib.h> | |
| t@@ -21,7 +20,7 @@ static const char *relpath = ""; | |
| static const char *repodir; | |
| static char description[255] = "Repositories"; | |
| -static char name[255]; | |
| +static char *name = ""; | |
| static char owner[255]; | |
| /* Escape characters below as HTML 2.0 / XML 1.0. */ | |
| t@@ -42,27 +41,6 @@ xmlencode(FILE *fp, const char *s, size_t len) | |
| } | |
| } | |
| -/* Some implementations of basename(3) return a pointer to a static | |
| - * internal buffer (OpenBSD). Others modify the contents of `path` (POSIX). | |
| - * This is a wrapper function that is compatible with both versions. | |
| - * The program will error out if basename(3) failed, this can only happen | |
| - * with the OpenBSD version. */ | |
| -char * | |
| -xbasename(const char *path) | |
| -{ | |
| - char *p, *b; | |
| - | |
| - if (!(p = strdup(path))) | |
| - err(1, "strdup"); | |
| - if (!(b = basename(p))) | |
| - err(1, "basename"); | |
| - if (!(b = strdup(b))) | |
| - err(1, "strdup"); | |
| - free(p); | |
| - | |
| - return b; | |
| -} | |
| - | |
| void | |
| printtimeformat(FILE *fp, const git_time *intime, const char *fmt) | |
| { | |
| t@@ -166,7 +144,7 @@ main(int argc, char *argv[]) | |
| { | |
| const git_error *e = NULL; | |
| FILE *fp; | |
| - char path[PATH_MAX], *p; | |
| + char path[PATH_MAX], repodirabs[PATH_MAX + 1]; | |
| int i, r, ret = 0; | |
| if (argc < 2) { | |
| t@@ -179,6 +157,8 @@ main(int argc, char *argv[]) | |
| for (i = 1; i < argc; i++) { | |
| repodir = argv[i]; | |
| + if (!realpath(repodir, repodirabs)) | |
| + err(1, "realpath"); | |
| if (git_repository_open_ext(&repo, repodir, | |
| GIT_REPOSITORY_OPEN_NO_SEARCH, NULL)) { | |
| t@@ -188,10 +168,11 @@ main(int argc, char *argv[]) | |
| continue; | |
| } | |
| - /* use directory name as name, truncation of name is no proble… | |
| - p = xbasename(repodir); | |
| - snprintf(name, sizeof(name), "%s", p); | |
| - free(p); | |
| + /* use directory name as name */ | |
| + if ((name = strrchr(repodirabs, '/'))) | |
| + name++; | |
| + else | |
| + name = ""; | |
| /* read description or .git/description */ | |
| description[0] = '\0'; | |
| diff --git a/stagit.c b/stagit.c | |
| t@@ -42,7 +42,7 @@ static git_repository *repo; | |
| static const char *relpath = ""; | |
| static const char *repodir; | |
| -static char *name; | |
| +static char *name = ""; | |
| static char *stripped_name; | |
| static char description[255]; | |
| static char cloneurl[1024]; | |
| t@@ -162,27 +162,6 @@ xdirname(const char *path) | |
| return b; | |
| } | |
| -/* Some implementations of basename(3) return a pointer to a static | |
| - * internal buffer (OpenBSD). Others modify the contents of `path` (POSIX). | |
| - * This is a wrapper function that is compatible with both versions. | |
| - * The program will error out if basename(3) failed, this can only happen | |
| - * with the OpenBSD version. */ | |
| -char * | |
| -xbasename(const char *path) | |
| -{ | |
| - char *p, *b; | |
| - | |
| - if (!(p = strdup(path))) | |
| - err(1, "strdup"); | |
| - if (!(b = basename(p))) | |
| - err(1, "basename"); | |
| - if (!(b = strdup(b))) | |
| - err(1, "strdup"); | |
| - free(p); | |
| - | |
| - return b; | |
| -} | |
| - | |
| int | |
| mkdirp(const char *path) | |
| { | |
| t@@ -879,7 +858,7 @@ main(int argc, char *argv[]) | |
| const git_oid *head = NULL; | |
| const git_error *e = NULL; | |
| FILE *fp, *fpread; | |
| - char path[PATH_MAX], *p; | |
| + char path[PATH_MAX], repodirabs[PATH_MAX + 1], *p; | |
| int r, status; | |
| if (argc != 2) { | |
| t@@ -887,6 +866,8 @@ main(int argc, char *argv[]) | |
| return 1; | |
| } | |
| repodir = argv[1]; | |
| + if (!realpath(repodir, repodirabs)) | |
| + err(1, "realpath"); | |
| git_libgit2_init(); | |
| t@@ -904,7 +885,10 @@ main(int argc, char *argv[]) | |
| git_object_free(obj); | |
| /* use directory name as name */ | |
| - name = xbasename(repodir); | |
| + if ((name = strrchr(repodirabs, '/'))) | |
| + name++; | |
| + else | |
| + name = ""; | |
| /* strip .git suffix */ | |
| if (!(stripped_name = strdup(name))) |