List for cgit developers and users
 help / color / mirror / Atom feed
* [PATCH 1/4] Replace most uses of strncmp() with prefixcmp()
@ 2014-01-10 11:44 cgit
  2014-01-10 11:44 ` [PATCH 2/4] Disallow use of undocumented snapshot delimiters cgit
                   ` (3 more replies)
  0 siblings, 4 replies; 8+ messages in thread
From: cgit @ 2014-01-10 11:44 UTC (permalink / raw)


This is a preparation for replacing all prefix checks with either
strip_prefix() or starts_with() when Git 1.8.6 is released.

Signed-off-by: Lukas Fleischer <cgit at cryptocrack.de>
---
 cgit.c       | 18 +++++++++---------
 parsing.c    | 12 ++++++------
 scan-tree.c  |  2 +-
 ui-refs.c    |  4 ++--
 ui-shared.c  |  2 +-
 ui-summary.c |  2 +-
 6 files changed, 20 insertions(+), 20 deletions(-)

diff --git a/cgit.c b/cgit.c
index 1f84da8..e31962d 100644
--- a/cgit.c
+++ b/cgit.c
@@ -863,7 +863,7 @@ static void cgit_parse_args(int argc, const char **argv)
 	int scan = 0;
 
 	for (i = 1; i < argc; i++) {
-		if (!strncmp(argv[i], "--cache=", 8)) {
+		if (!prefixcmp(argv[i], "--cache=")) {
 			ctx.cfg.cache_root = xstrdup(argv[i] + 8);
 		}
 		if (!strcmp(argv[i], "--nocache")) {
@@ -872,28 +872,28 @@ static void cgit_parse_args(int argc, const char **argv)
 		if (!strcmp(argv[i], "--nohttp")) {
 			ctx.env.no_http = "1";
 		}
-		if (!strncmp(argv[i], "--query=", 8)) {
+		if (!prefixcmp(argv[i], "--query=")) {
 			ctx.qry.raw = xstrdup(argv[i] + 8);
 		}
-		if (!strncmp(argv[i], "--repo=", 7)) {
+		if (!prefixcmp(argv[i], "--repo=")) {
 			ctx.qry.repo = xstrdup(argv[i] + 7);
 		}
-		if (!strncmp(argv[i], "--page=", 7)) {
+		if (!prefixcmp(argv[i], "--page=")) {
 			ctx.qry.page = xstrdup(argv[i] + 7);
 		}
-		if (!strncmp(argv[i], "--head=", 7)) {
+		if (!prefixcmp(argv[i], "--head=")) {
 			ctx.qry.head = xstrdup(argv[i] + 7);
 			ctx.qry.has_symref = 1;
 		}
-		if (!strncmp(argv[i], "--sha1=", 7)) {
+		if (!prefixcmp(argv[i], "--sha1=")) {
 			ctx.qry.sha1 = xstrdup(argv[i] + 7);
 			ctx.qry.has_sha1 = 1;
 		}
-		if (!strncmp(argv[i], "--ofs=", 6)) {
+		if (!prefixcmp(argv[i], "--ofs=")) {
 			ctx.qry.ofs = atoi(argv[i] + 6);
 		}
-		if (!strncmp(argv[i], "--scan-tree=", 12) ||
-		    !strncmp(argv[i], "--scan-path=", 12)) {
+		if (!prefixcmp(argv[i], "--scan-tree=") ||
+		    !prefixcmp(argv[i], "--scan-path=")) {
 			/* HACK: the global snapshot bitmask defines the
 			 * set of allowed snapshot formats, but the config
 			 * file hasn't been parsed yet so the mask is
diff --git a/parsing.c b/parsing.c
index 248b6ee..d740d38 100644
--- a/parsing.c
+++ b/parsing.c
@@ -142,25 +142,25 @@ struct commitinfo *cgit_parse_commit(struct commit *commit)
 	if (p == NULL)
 		return ret;
 
-	if (strncmp(p, "tree ", 5))
+	if (prefixcmp(p, "tree "))
 		die("Bad commit: %s", sha1_to_hex(commit->object.sha1));
 	else
 		p += 46; // "tree " + hex[40] + "\n"
 
-	while (!strncmp(p, "parent ", 7))
+	while (!prefixcmp(p, "parent "))
 		p += 48; // "parent " + hex[40] + "\n"
 
-	if (p && !strncmp(p, "author ", 7)) {
+	if (p && !prefixcmp(p, "author ")) {
 		p = parse_user(p + 7, &ret->author, &ret->author_email,
 			&ret->author_date);
 	}
 
-	if (p && !strncmp(p, "committer ", 9)) {
+	if (p && !prefixcmp(p, "committer ")) {
 		p = parse_user(p + 9, &ret->committer, &ret->committer_email,
 			&ret->committer_date);
 	}
 
-	if (p && !strncmp(p, "encoding ", 9)) {
+	if (p && !prefixcmp(p, "encoding ")) {
 		p += 9;
 		t = strchr(p, '\n');
 		if (t) {
@@ -239,7 +239,7 @@ struct taginfo *cgit_parse_tag(struct tag *tag)
 		if (*p == '\n')
 			break;
 
-		if (!strncmp(p, "tagger ", 7)) {
+		if (!prefixcmp(p, "tagger ")) {
 			p = parse_user(p + 7, &ret->tagger, &ret->tagger_email,
 				&ret->tagger_date);
 		} else {
diff --git a/scan-tree.c b/scan-tree.c
index 1a2ea87..49de658 100644
--- a/scan-tree.c
+++ b/scan-tree.c
@@ -105,7 +105,7 @@ static void add_repo(const char *base, struct strbuf *path, repo_config_fn fn)
 		return;
 	strbuf_setlen(path, pathlen);
 
-	if (strncmp(base, path->buf, strlen(base)))
+	if (prefixcmp(path->buf, base))
 		strbuf_addbuf(&rel, path);
 	else
 		strbuf_addstr(&rel, path->buf + strlen(base) + 1);
diff --git a/ui-refs.c b/ui-refs.c
index 7af6fed..20c91e3 100644
--- a/ui-refs.c
+++ b/ui-refs.c
@@ -240,9 +240,9 @@ void cgit_print_refs()
 
 	html("<table class='list nowrap'>");
 
-	if (ctx.qry.path && !strncmp(ctx.qry.path, "heads", 5))
+	if (ctx.qry.path && !prefixcmp(ctx.qry.path, "heads"))
 		cgit_print_branches(0);
-	else if (ctx.qry.path && !strncmp(ctx.qry.path, "tags", 4))
+	else if (ctx.qry.path && !prefixcmp(ctx.qry.path, "tags"))
 		cgit_print_tags(0);
 	else {
 		cgit_print_branches(0);
diff --git a/ui-shared.c b/ui-shared.c
index d32852f..2c12de7 100644
--- a/ui-shared.c
+++ b/ui-shared.c
@@ -120,7 +120,7 @@ const char *cgit_repobasename(const char *reponame)
 	/* strip trailing slashes */
 	while (p && rvbuf[p] == '/') rvbuf[p--] = 0;
 	/* strip trailing .git */
-	if (p >= 3 && !strncmp(&rvbuf[p-3], ".git", 4)) {
+	if (p >= 3 && !prefixcmp(&rvbuf[p-3], ".git")) {
 		p -= 3; rvbuf[p--] = 0;
 	}
 	/* strip more trailing slashes if any */
diff --git a/ui-summary.c b/ui-summary.c
index 3a7c7a7..63a5a75 100644
--- a/ui-summary.c
+++ b/ui-summary.c
@@ -116,7 +116,7 @@ static char* append_readme_path(const char *filename, const char *ref, const cha
 	if (!ref) {
 		resolved_base = realpath(base_dir, NULL);
 		resolved_full = realpath(full_path, NULL);
-		if (!resolved_base || !resolved_full || strncmp(resolved_base, resolved_full, strlen(resolved_base))) {
+		if (!resolved_base || !resolved_full || prefixcmp(resolved_full, resolved_base)) {
 			free(full_path);
 			full_path = NULL;
 		}
-- 
1.8.5.2



^ permalink raw reply	[flat|nested] 8+ messages in thread

* [PATCH 2/4] Disallow use of undocumented snapshot delimiters
  2014-01-10 11:44 [PATCH 1/4] Replace most uses of strncmp() with prefixcmp() cgit
@ 2014-01-10 11:44 ` cgit
  2014-01-10 16:04   ` Jason
  2014-01-10 11:44 ` [PATCH 3/4] Refactor cgit_parse_snapshots_mask() cgit
                   ` (2 subsequent siblings)
  3 siblings, 1 reply; 8+ messages in thread
From: cgit @ 2014-01-10 11:44 UTC (permalink / raw)


Since the introduction of selective snapshot format configuration in
dc3c9b5 (allow selective enabling of snapshots, 2007-07-21), we allowed
seven different delimiters for snapshot formats, while the documentation
has always been clear about spaces being the only valid delimiter:

    The value is a space-separated list of zero or more of the values
    "tar", "tar.gz", "tar.bz2", "tar.xz" and "zip".

Supporting the undocumented delimiters makes the code unnecessarily
complex. Remove them.

Signed-off-by: Lukas Fleischer <cgit at cryptocrack.de>
---
 shared.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/shared.c b/shared.c
index c5c4b00..1f6310a 100644
--- a/shared.c
+++ b/shared.c
@@ -405,7 +405,7 @@ void cgit_diff_commit(struct commit *commit, filepair_fn fn, const char *prefix)
 int cgit_parse_snapshots_mask(const char *str)
 {
 	const struct cgit_snapshot_format *f;
-	static const char *delim = " \t,:/|;";
+	static const char *delim = " ";
 	int tl, sl, rv = 0;
 
 	/* favor legacy setting */
-- 
1.8.5.2



^ permalink raw reply	[flat|nested] 8+ messages in thread

* [PATCH 3/4] Refactor cgit_parse_snapshots_mask()
  2014-01-10 11:44 [PATCH 1/4] Replace most uses of strncmp() with prefixcmp() cgit
  2014-01-10 11:44 ` [PATCH 2/4] Disallow use of undocumented snapshot delimiters cgit
@ 2014-01-10 11:44 ` cgit
  2014-01-10 16:04   ` Jason
  2014-01-10 11:44 ` [PATCH 4/4] ui-snapshot.c: Do not reinvent suffixcmp() cgit
  2014-01-10 16:02 ` [PATCH 1/4] Replace most uses of strncmp() with prefixcmp() Jason
  3 siblings, 1 reply; 8+ messages in thread
From: cgit @ 2014-01-10 11:44 UTC (permalink / raw)


Use Git string lists instead of str{spn,cspn,ncmp}() magic. This
significantly improves readability.

Signed-off-by: Lukas Fleischer <cgit at cryptocrack.de>
---
 shared.c | 23 ++++++++++++-----------
 1 file changed, 12 insertions(+), 11 deletions(-)

diff --git a/shared.c b/shared.c
index 1f6310a..01197f1 100644
--- a/shared.c
+++ b/shared.c
@@ -404,28 +404,29 @@ void cgit_diff_commit(struct commit *commit, filepair_fn fn, const char *prefix)
 
 int cgit_parse_snapshots_mask(const char *str)
 {
+	struct string_list tokens = STRING_LIST_INIT_DUP;
+	struct string_list_item *item;
 	const struct cgit_snapshot_format *f;
-	static const char *delim = " ";
-	int tl, sl, rv = 0;
+	int rv = 0;
 
 	/* favor legacy setting */
 	if (atoi(str))
 		return 1;
-	for (;;) {
-		str += strspn(str, delim);
-		tl = strcspn(str, delim);
-		if (!tl)
-			break;
+
+	string_list_split(&tokens, str, ' ', -1);
+	string_list_remove_empty_items(&tokens, 0);
+
+	for_each_string_list_item(item, &tokens) {
 		for (f = cgit_snapshot_formats; f->suffix; f++) {
-			sl = strlen(f->suffix);
-			if ((tl == sl && !strncmp(f->suffix, str, tl)) ||
-			   (tl == sl - 1 && !strncmp(f->suffix + 1, str, tl - 1))) {
+			if (!strcmp(item->string, f->suffix) ||
+			    !strcmp(item->string, f->suffix + 1)) {
 				rv |= f->bit;
 				break;
 			}
 		}
-		str += tl;
 	}
+
+	string_list_clear(&tokens, 0);
 	return rv;
 }
 
-- 
1.8.5.2



^ permalink raw reply	[flat|nested] 8+ messages in thread

* [PATCH 4/4] ui-snapshot.c: Do not reinvent suffixcmp()
  2014-01-10 11:44 [PATCH 1/4] Replace most uses of strncmp() with prefixcmp() cgit
  2014-01-10 11:44 ` [PATCH 2/4] Disallow use of undocumented snapshot delimiters cgit
  2014-01-10 11:44 ` [PATCH 3/4] Refactor cgit_parse_snapshots_mask() cgit
@ 2014-01-10 11:44 ` cgit
  2014-01-10 16:05   ` Jason
  2014-01-10 16:02 ` [PATCH 1/4] Replace most uses of strncmp() with prefixcmp() Jason
  3 siblings, 1 reply; 8+ messages in thread
From: cgit @ 2014-01-10 11:44 UTC (permalink / raw)


Use suffixcmp() from Git instead of reimplementing it. This is a
preparation for moving to ends_with() in Git 1.8.6.

Signed-off-by: Lukas Fleischer <cgit at cryptocrack.de>
---
 ui-snapshot.c | 7 +------
 1 file changed, 1 insertion(+), 6 deletions(-)

diff --git a/ui-snapshot.c b/ui-snapshot.c
index 901c0c9..8f82119 100644
--- a/ui-snapshot.c
+++ b/ui-snapshot.c
@@ -98,14 +98,9 @@ const struct cgit_snapshot_format cgit_snapshot_formats[] = {
 static const struct cgit_snapshot_format *get_format(const char *filename)
 {
 	const struct cgit_snapshot_format *fmt;
-	int fl, sl;
 
-	fl = strlen(filename);
 	for (fmt = cgit_snapshot_formats; fmt->suffix; fmt++) {
-		sl = strlen(fmt->suffix);
-		if (sl >= fl)
-			continue;
-		if (!strcmp(fmt->suffix, filename + fl - sl))
+		if (!suffixcmp(filename, fmt->suffix))
 			return fmt;
 	}
 	return NULL;
-- 
1.8.5.2



^ permalink raw reply	[flat|nested] 8+ messages in thread

* [PATCH 1/4] Replace most uses of strncmp() with prefixcmp()
  2014-01-10 11:44 [PATCH 1/4] Replace most uses of strncmp() with prefixcmp() cgit
                   ` (2 preceding siblings ...)
  2014-01-10 11:44 ` [PATCH 4/4] ui-snapshot.c: Do not reinvent suffixcmp() cgit
@ 2014-01-10 16:02 ` Jason
  3 siblings, 0 replies; 8+ messages in thread
From: Jason @ 2014-01-10 16:02 UTC (permalink / raw)


Looks good, merged.


^ permalink raw reply	[flat|nested] 8+ messages in thread

* [PATCH 2/4] Disallow use of undocumented snapshot delimiters
  2014-01-10 11:44 ` [PATCH 2/4] Disallow use of undocumented snapshot delimiters cgit
@ 2014-01-10 16:04   ` Jason
  0 siblings, 0 replies; 8+ messages in thread
From: Jason @ 2014-01-10 16:04 UTC (permalink / raw)


I don't really like removing this, even though it's undocumented. But
I looked where this patch series is headed, and I like that more, so
I'll apply this. Merged.


^ permalink raw reply	[flat|nested] 8+ messages in thread

* [PATCH 3/4] Refactor cgit_parse_snapshots_mask()
  2014-01-10 11:44 ` [PATCH 3/4] Refactor cgit_parse_snapshots_mask() cgit
@ 2014-01-10 16:04   ` Jason
  0 siblings, 0 replies; 8+ messages in thread
From: Jason @ 2014-01-10 16:04 UTC (permalink / raw)


Great. Merged.


^ permalink raw reply	[flat|nested] 8+ messages in thread

* [PATCH 4/4] ui-snapshot.c: Do not reinvent suffixcmp()
  2014-01-10 11:44 ` [PATCH 4/4] ui-snapshot.c: Do not reinvent suffixcmp() cgit
@ 2014-01-10 16:05   ` Jason
  0 siblings, 0 replies; 8+ messages in thread
From: Jason @ 2014-01-10 16:05 UTC (permalink / raw)


Thank goodness gracious. Merged.


^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2014-01-10 16:05 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-01-10 11:44 [PATCH 1/4] Replace most uses of strncmp() with prefixcmp() cgit
2014-01-10 11:44 ` [PATCH 2/4] Disallow use of undocumented snapshot delimiters cgit
2014-01-10 16:04   ` Jason
2014-01-10 11:44 ` [PATCH 3/4] Refactor cgit_parse_snapshots_mask() cgit
2014-01-10 16:04   ` Jason
2014-01-10 11:44 ` [PATCH 4/4] ui-snapshot.c: Do not reinvent suffixcmp() cgit
2014-01-10 16:05   ` Jason
2014-01-10 16:02 ` [PATCH 1/4] Replace most uses of strncmp() with prefixcmp() Jason

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).