* [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).