summaryrefslogtreecommitdiffabout
authorLars Hjemli <hjemli@gmail.com>2007-05-15 22:14:51 (UTC)
committer Lars Hjemli <hjemli@gmail.com>2007-05-15 22:16:00 (UTC)
commitb28b105ec172b258ae5d629381a5890697c2f938 (patch) (unidiff)
tree0673dc5ed94c8ce99c714d1204b6582f9ba96fc5
parent47a81c77fdd017227632c4df9a0b7b135b8a738d (diff)
downloadcgit-b28b105ec172b258ae5d629381a5890697c2f938.zip
cgit-b28b105ec172b258ae5d629381a5890697c2f938.tar.gz
cgit-b28b105ec172b258ae5d629381a5890697c2f938.tar.bz2
Enable default value for head parameter
Pages which expect head to be specified in the querystring can now be given a default value, configurable per repository (via repo.defbranch, which defaults to "master"). Currently, only the log page actually works without parameters, but the defbranch is bound to be exploited. This also removes some dead code from shared.c Signed-off-by: Lars Hjemli <hjemli@gmail.com>
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--cgit.c3
-rw-r--r--cgit.h1
-rw-r--r--shared.c17
3 files changed, 7 insertions, 14 deletions
diff --git a/cgit.c b/cgit.c
index 3c11ff0..b282a67 100644
--- a/cgit.c
+++ b/cgit.c
@@ -20,96 +20,99 @@ static struct repoinfo *cgit_get_repoinfo(char *url)
20 repo = &cgit_repolist.repos[i]; 20 repo = &cgit_repolist.repos[i];
21 if (!strcmp(repo->url, url)) 21 if (!strcmp(repo->url, url))
22 return repo; 22 return repo;
23 } 23 }
24 return NULL; 24 return NULL;
25} 25}
26 26
27 27
28static int cgit_prepare_cache(struct cacheitem *item) 28static int cgit_prepare_cache(struct cacheitem *item)
29{ 29{
30 if (!cgit_query_repo) { 30 if (!cgit_query_repo) {
31 item->name = xstrdup(fmt("%s/index.html", cgit_cache_root)); 31 item->name = xstrdup(fmt("%s/index.html", cgit_cache_root));
32 item->ttl = cgit_cache_root_ttl; 32 item->ttl = cgit_cache_root_ttl;
33 return 1; 33 return 1;
34 } 34 }
35 cgit_repo = cgit_get_repoinfo(cgit_query_repo); 35 cgit_repo = cgit_get_repoinfo(cgit_query_repo);
36 if (!cgit_repo) { 36 if (!cgit_repo) {
37 char *title = fmt("%s - %s", cgit_root_title, "Bad request"); 37 char *title = fmt("%s - %s", cgit_root_title, "Bad request");
38 cgit_print_docstart(title, item); 38 cgit_print_docstart(title, item);
39 cgit_print_pageheader(title, 0); 39 cgit_print_pageheader(title, 0);
40 cgit_print_error(fmt("Unknown repo: %s", cgit_query_repo)); 40 cgit_print_error(fmt("Unknown repo: %s", cgit_query_repo));
41 cgit_print_docend(); 41 cgit_print_docend();
42 return 0; 42 return 0;
43 } 43 }
44 44
45 if (!cgit_query_page) { 45 if (!cgit_query_page) {
46 item->name = xstrdup(fmt("%s/%s/index.html", cgit_cache_root, 46 item->name = xstrdup(fmt("%s/%s/index.html", cgit_cache_root,
47 cgit_repo->url)); 47 cgit_repo->url));
48 item->ttl = cgit_cache_repo_ttl; 48 item->ttl = cgit_cache_repo_ttl;
49 } else { 49 } else {
50 item->name = xstrdup(fmt("%s/%s/%s/%s.html", cgit_cache_root, 50 item->name = xstrdup(fmt("%s/%s/%s/%s.html", cgit_cache_root,
51 cgit_repo->url, cgit_query_page, 51 cgit_repo->url, cgit_query_page,
52 cache_safe_filename(cgit_querystring))); 52 cache_safe_filename(cgit_querystring)));
53 if (cgit_query_has_symref) 53 if (cgit_query_has_symref)
54 item->ttl = cgit_cache_dynamic_ttl; 54 item->ttl = cgit_cache_dynamic_ttl;
55 else if (cgit_query_has_sha1) 55 else if (cgit_query_has_sha1)
56 item->ttl = cgit_cache_static_ttl; 56 item->ttl = cgit_cache_static_ttl;
57 else 57 else
58 item->ttl = cgit_cache_repo_ttl; 58 item->ttl = cgit_cache_repo_ttl;
59 } 59 }
60 return 1; 60 return 1;
61} 61}
62 62
63static void cgit_print_repo_page(struct cacheitem *item) 63static void cgit_print_repo_page(struct cacheitem *item)
64{ 64{
65 char *title; 65 char *title;
66 int show_search; 66 int show_search;
67 67
68 if (!cgit_query_head)
69 cgit_query_head = cgit_repo->defbranch;
70
68 if (chdir(cgit_repo->path)) { 71 if (chdir(cgit_repo->path)) {
69 title = fmt("%s - %s", cgit_root_title, "Bad request"); 72 title = fmt("%s - %s", cgit_root_title, "Bad request");
70 cgit_print_docstart(title, item); 73 cgit_print_docstart(title, item);
71 cgit_print_pageheader(title, 0); 74 cgit_print_pageheader(title, 0);
72 cgit_print_error(fmt("Unable to scan repository: %s", 75 cgit_print_error(fmt("Unable to scan repository: %s",
73 strerror(errno))); 76 strerror(errno)));
74 cgit_print_docend(); 77 cgit_print_docend();
75 return; 78 return;
76 } 79 }
77 80
78 title = fmt("%s - %s", cgit_repo->name, cgit_repo->desc); 81 title = fmt("%s - %s", cgit_repo->name, cgit_repo->desc);
79 show_search = 0; 82 show_search = 0;
80 setenv("GIT_DIR", cgit_repo->path, 1); 83 setenv("GIT_DIR", cgit_repo->path, 1);
81 84
82 if (cgit_query_page) { 85 if (cgit_query_page) {
83 if (cgit_repo->snapshots && !strcmp(cgit_query_page, "snapshot")) { 86 if (cgit_repo->snapshots && !strcmp(cgit_query_page, "snapshot")) {
84 cgit_print_snapshot(item, cgit_query_sha1, "zip", 87 cgit_print_snapshot(item, cgit_query_sha1, "zip",
85 cgit_repo->url, cgit_query_name); 88 cgit_repo->url, cgit_query_name);
86 return; 89 return;
87 } 90 }
88 if (!strcmp(cgit_query_page, "blob")) { 91 if (!strcmp(cgit_query_page, "blob")) {
89 cgit_print_blob(item, cgit_query_sha1, cgit_query_path); 92 cgit_print_blob(item, cgit_query_sha1, cgit_query_path);
90 return; 93 return;
91 } 94 }
92 } 95 }
93 96
94 if (cgit_query_page && !strcmp(cgit_query_page, "log")) 97 if (cgit_query_page && !strcmp(cgit_query_page, "log"))
95 show_search = 1; 98 show_search = 1;
96 99
97 cgit_print_docstart(title, item); 100 cgit_print_docstart(title, item);
98 101
99 102
100 if (!cgit_query_page) { 103 if (!cgit_query_page) {
101 cgit_print_pageheader("summary", show_search); 104 cgit_print_pageheader("summary", show_search);
102 cgit_print_summary(); 105 cgit_print_summary();
103 cgit_print_docend(); 106 cgit_print_docend();
104 return; 107 return;
105 } 108 }
106 109
107 cgit_print_pageheader(cgit_query_page, show_search); 110 cgit_print_pageheader(cgit_query_page, show_search);
108 111
109 if (!strcmp(cgit_query_page, "log")) { 112 if (!strcmp(cgit_query_page, "log")) {
110 cgit_print_log(cgit_query_head, cgit_query_ofs, 113 cgit_print_log(cgit_query_head, cgit_query_ofs,
111 cgit_max_commit_count, cgit_query_search, 114 cgit_max_commit_count, cgit_query_search,
112 cgit_query_path); 115 cgit_query_path);
113 } else if (!strcmp(cgit_query_page, "tree")) { 116 } else if (!strcmp(cgit_query_page, "tree")) {
114 cgit_print_tree(cgit_query_head, cgit_query_sha1, cgit_query_path); 117 cgit_print_tree(cgit_query_head, cgit_query_sha1, cgit_query_path);
115 } else if (!strcmp(cgit_query_page, "commit")) { 118 } else if (!strcmp(cgit_query_page, "commit")) {
diff --git a/cgit.h b/cgit.h
index f5906ad..ac710a6 100644
--- a/cgit.h
+++ b/cgit.h
@@ -1,85 +1,86 @@
1#ifndef CGIT_H 1#ifndef CGIT_H
2#define CGIT_H 2#define CGIT_H
3 3
4 4
5#include <git-compat-util.h> 5#include <git-compat-util.h>
6#include <cache.h> 6#include <cache.h>
7#include <grep.h> 7#include <grep.h>
8#include <object.h> 8#include <object.h>
9#include <tree.h> 9#include <tree.h>
10#include <commit.h> 10#include <commit.h>
11#include <tag.h> 11#include <tag.h>
12#include <diff.h> 12#include <diff.h>
13#include <diffcore.h> 13#include <diffcore.h>
14#include <refs.h> 14#include <refs.h>
15#include <revision.h> 15#include <revision.h>
16#include <log-tree.h> 16#include <log-tree.h>
17#include <archive.h> 17#include <archive.h>
18#include <xdiff/xdiff.h> 18#include <xdiff/xdiff.h>
19 19
20 20
21typedef void (*configfn)(const char *name, const char *value); 21typedef void (*configfn)(const char *name, const char *value);
22typedef void (*filepair_fn)(struct diff_filepair *pair); 22typedef void (*filepair_fn)(struct diff_filepair *pair);
23typedef void (*linediff_fn)(char *line, int len); 23typedef void (*linediff_fn)(char *line, int len);
24 24
25struct cacheitem { 25struct cacheitem {
26 char *name; 26 char *name;
27 struct stat st; 27 struct stat st;
28 int ttl; 28 int ttl;
29 int fd; 29 int fd;
30}; 30};
31 31
32struct repoinfo { 32struct repoinfo {
33 char *url; 33 char *url;
34 char *name; 34 char *name;
35 char *path; 35 char *path;
36 char *desc; 36 char *desc;
37 char *owner; 37 char *owner;
38 char *defbranch;
38 char *module_link; 39 char *module_link;
39 int snapshots; 40 int snapshots;
40}; 41};
41 42
42struct repolist { 43struct repolist {
43 int length; 44 int length;
44 int count; 45 int count;
45 struct repoinfo *repos; 46 struct repoinfo *repos;
46}; 47};
47 48
48struct commitinfo { 49struct commitinfo {
49 struct commit *commit; 50 struct commit *commit;
50 char *author; 51 char *author;
51 char *author_email; 52 char *author_email;
52 unsigned long author_date; 53 unsigned long author_date;
53 char *committer; 54 char *committer;
54 char *committer_email; 55 char *committer_email;
55 unsigned long committer_date; 56 unsigned long committer_date;
56 char *subject; 57 char *subject;
57 char *msg; 58 char *msg;
58}; 59};
59 60
60struct taginfo { 61struct taginfo {
61 char *tagger; 62 char *tagger;
62 char *tagger_email; 63 char *tagger_email;
63 int tagger_date; 64 int tagger_date;
64 char *msg; 65 char *msg;
65}; 66};
66 67
67extern const char cgit_version[]; 68extern const char cgit_version[];
68 69
69extern struct repolist cgit_repolist; 70extern struct repolist cgit_repolist;
70extern struct repoinfo *cgit_repo; 71extern struct repoinfo *cgit_repo;
71 72
72extern char *cgit_root_title; 73extern char *cgit_root_title;
73extern char *cgit_css; 74extern char *cgit_css;
74extern char *cgit_logo; 75extern char *cgit_logo;
75extern char *cgit_logo_link; 76extern char *cgit_logo_link;
76extern char *cgit_module_link; 77extern char *cgit_module_link;
77extern char *cgit_virtual_root; 78extern char *cgit_virtual_root;
78extern char *cgit_script_name; 79extern char *cgit_script_name;
79extern char *cgit_cache_root; 80extern char *cgit_cache_root;
80 81
81extern int cgit_nocache; 82extern int cgit_nocache;
82extern int cgit_snapshots; 83extern int cgit_snapshots;
83extern int cgit_max_lock_attempts; 84extern int cgit_max_lock_attempts;
84extern int cgit_cache_root_ttl; 85extern int cgit_cache_root_ttl;
85extern int cgit_cache_repo_ttl; 86extern int cgit_cache_repo_ttl;
diff --git a/shared.c b/shared.c
index 8505397..a1e1acd 100644
--- a/shared.c
+++ b/shared.c
@@ -1,201 +1,190 @@
1/* shared.c: global vars + some callback functions 1/* shared.c: global vars + some callback functions
2 * 2 *
3 * Copyright (C) 2006 Lars Hjemli 3 * Copyright (C) 2006 Lars Hjemli
4 * 4 *
5 * Licensed under GNU General Public License v2 5 * Licensed under GNU General Public License v2
6 * (see COPYING for full license text) 6 * (see COPYING for full license text)
7 */ 7 */
8 8
9#include "cgit.h" 9#include "cgit.h"
10 10
11struct repolist cgit_repolist; 11struct repolist cgit_repolist;
12struct repoinfo *cgit_repo; 12struct repoinfo *cgit_repo;
13 13
14char *cgit_root_title = "Git repository browser"; 14char *cgit_root_title = "Git repository browser";
15char *cgit_css = "/cgit.css"; 15char *cgit_css = "/cgit.css";
16char *cgit_logo = "/git-logo.png"; 16char *cgit_logo = "/git-logo.png";
17char *cgit_logo_link = "http://www.kernel.org/pub/software/scm/git/docs/"; 17char *cgit_logo_link = "http://www.kernel.org/pub/software/scm/git/docs/";
18char *cgit_module_link = "./?repo=%s&page=commit&id=%s"; 18char *cgit_module_link = "./?repo=%s&page=commit&id=%s";
19char *cgit_virtual_root = NULL; 19char *cgit_virtual_root = NULL;
20char *cgit_script_name = CGIT_SCRIPT_NAME; 20char *cgit_script_name = CGIT_SCRIPT_NAME;
21char *cgit_cache_root = "/var/cache/cgit"; 21char *cgit_cache_root = "/var/cache/cgit";
22 22
23int cgit_nocache = 0; 23int cgit_nocache = 0;
24int cgit_snapshots = 0; 24int cgit_snapshots = 0;
25int cgit_max_lock_attempts = 5; 25int cgit_max_lock_attempts = 5;
26int cgit_cache_root_ttl = 5; 26int cgit_cache_root_ttl = 5;
27int cgit_cache_repo_ttl = 5; 27int cgit_cache_repo_ttl = 5;
28int cgit_cache_dynamic_ttl = 5; 28int cgit_cache_dynamic_ttl = 5;
29int cgit_cache_static_ttl = -1; 29int cgit_cache_static_ttl = -1;
30int cgit_cache_max_create_time = 5; 30int cgit_cache_max_create_time = 5;
31 31
32int cgit_max_msg_len = 60; 32int cgit_max_msg_len = 60;
33int cgit_max_commit_count = 50; 33int cgit_max_commit_count = 50;
34 34
35char *cgit_repo_name = NULL;
36char *cgit_repo_desc = NULL;
37char *cgit_repo_owner = NULL;
38
39int cgit_query_has_symref = 0; 35int cgit_query_has_symref = 0;
40int cgit_query_has_sha1 = 0; 36int cgit_query_has_sha1 = 0;
41 37
42char *cgit_querystring = NULL; 38char *cgit_querystring = NULL;
43char *cgit_query_repo = NULL; 39char *cgit_query_repo = NULL;
44char *cgit_query_page = NULL; 40char *cgit_query_page = NULL;
45char *cgit_query_head = NULL; 41char *cgit_query_head = NULL;
46char *cgit_query_search = NULL; 42char *cgit_query_search = NULL;
47char *cgit_query_sha1 = NULL; 43char *cgit_query_sha1 = NULL;
48char *cgit_query_sha2 = NULL; 44char *cgit_query_sha2 = NULL;
49char *cgit_query_path = NULL; 45char *cgit_query_path = NULL;
50char *cgit_query_name = NULL; 46char *cgit_query_name = NULL;
51int cgit_query_ofs = 0; 47int cgit_query_ofs = 0;
52 48
53int htmlfd = 0; 49int htmlfd = 0;
54 50
55int chk_zero(int result, char *msg) 51int chk_zero(int result, char *msg)
56{ 52{
57 if (result != 0) 53 if (result != 0)
58 die("%s: %s", msg, strerror(errno)); 54 die("%s: %s", msg, strerror(errno));
59 return result; 55 return result;
60} 56}
61 57
62int chk_positive(int result, char *msg) 58int chk_positive(int result, char *msg)
63{ 59{
64 if (result <= 0) 60 if (result <= 0)
65 die("%s: %s", msg, strerror(errno)); 61 die("%s: %s", msg, strerror(errno));
66 return result; 62 return result;
67} 63}
68 64
69struct repoinfo *add_repo(const char *url) 65struct repoinfo *add_repo(const char *url)
70{ 66{
71 struct repoinfo *ret; 67 struct repoinfo *ret;
72 68
73 if (++cgit_repolist.count > cgit_repolist.length) { 69 if (++cgit_repolist.count > cgit_repolist.length) {
74 if (cgit_repolist.length == 0) 70 if (cgit_repolist.length == 0)
75 cgit_repolist.length = 8; 71 cgit_repolist.length = 8;
76 else 72 else
77 cgit_repolist.length *= 2; 73 cgit_repolist.length *= 2;
78 cgit_repolist.repos = xrealloc(cgit_repolist.repos, 74 cgit_repolist.repos = xrealloc(cgit_repolist.repos,
79 cgit_repolist.length * 75 cgit_repolist.length *
80 sizeof(struct repoinfo)); 76 sizeof(struct repoinfo));
81 } 77 }
82 78
83 ret = &cgit_repolist.repos[cgit_repolist.count-1]; 79 ret = &cgit_repolist.repos[cgit_repolist.count-1];
84 ret->url = xstrdup(url); 80 ret->url = xstrdup(url);
85 ret->name = ret->url; 81 ret->name = ret->url;
86 ret->path = NULL; 82 ret->path = NULL;
87 ret->desc = NULL; 83 ret->desc = NULL;
88 ret->owner = NULL; 84 ret->owner = NULL;
85 ret->defbranch = "master";
89 ret->snapshots = cgit_snapshots; 86 ret->snapshots = cgit_snapshots;
90 ret->module_link = cgit_module_link; 87 ret->module_link = cgit_module_link;
91 return ret; 88 return ret;
92} 89}
93 90
94void cgit_global_config_cb(const char *name, const char *value) 91void cgit_global_config_cb(const char *name, const char *value)
95{ 92{
96 if (!strcmp(name, "root-title")) 93 if (!strcmp(name, "root-title"))
97 cgit_root_title = xstrdup(value); 94 cgit_root_title = xstrdup(value);
98 else if (!strcmp(name, "css")) 95 else if (!strcmp(name, "css"))
99 cgit_css = xstrdup(value); 96 cgit_css = xstrdup(value);
100 else if (!strcmp(name, "logo")) 97 else if (!strcmp(name, "logo"))
101 cgit_logo = xstrdup(value); 98 cgit_logo = xstrdup(value);
102 else if (!strcmp(name, "logo-link")) 99 else if (!strcmp(name, "logo-link"))
103 cgit_logo_link = xstrdup(value); 100 cgit_logo_link = xstrdup(value);
104 else if (!strcmp(name, "module-link")) 101 else if (!strcmp(name, "module-link"))
105 cgit_module_link = xstrdup(value); 102 cgit_module_link = xstrdup(value);
106 else if (!strcmp(name, "virtual-root")) 103 else if (!strcmp(name, "virtual-root"))
107 cgit_virtual_root = xstrdup(value); 104 cgit_virtual_root = xstrdup(value);
108 else if (!strcmp(name, "nocache")) 105 else if (!strcmp(name, "nocache"))
109 cgit_nocache = atoi(value); 106 cgit_nocache = atoi(value);
110 else if (!strcmp(name, "snapshots")) 107 else if (!strcmp(name, "snapshots"))
111 cgit_snapshots = atoi(value); 108 cgit_snapshots = atoi(value);
112 else if (!strcmp(name, "cache-root")) 109 else if (!strcmp(name, "cache-root"))
113 cgit_cache_root = xstrdup(value); 110 cgit_cache_root = xstrdup(value);
114 else if (!strcmp(name, "cache-root-ttl")) 111 else if (!strcmp(name, "cache-root-ttl"))
115 cgit_cache_root_ttl = atoi(value); 112 cgit_cache_root_ttl = atoi(value);
116 else if (!strcmp(name, "cache-repo-ttl")) 113 else if (!strcmp(name, "cache-repo-ttl"))
117 cgit_cache_repo_ttl = atoi(value); 114 cgit_cache_repo_ttl = atoi(value);
118 else if (!strcmp(name, "cache-static-ttl")) 115 else if (!strcmp(name, "cache-static-ttl"))
119 cgit_cache_static_ttl = atoi(value); 116 cgit_cache_static_ttl = atoi(value);
120 else if (!strcmp(name, "cache-dynamic-ttl")) 117 else if (!strcmp(name, "cache-dynamic-ttl"))
121 cgit_cache_dynamic_ttl = atoi(value); 118 cgit_cache_dynamic_ttl = atoi(value);
122 else if (!strcmp(name, "max-message-length")) 119 else if (!strcmp(name, "max-message-length"))
123 cgit_max_msg_len = atoi(value); 120 cgit_max_msg_len = atoi(value);
124 else if (!strcmp(name, "max-commit-count")) 121 else if (!strcmp(name, "max-commit-count"))
125 cgit_max_commit_count = atoi(value); 122 cgit_max_commit_count = atoi(value);
126 else if (!strcmp(name, "repo.url")) 123 else if (!strcmp(name, "repo.url"))
127 cgit_repo = add_repo(value); 124 cgit_repo = add_repo(value);
128 else if (!strcmp(name, "repo.name")) 125 else if (!strcmp(name, "repo.name"))
129 cgit_repo->name = xstrdup(value); 126 cgit_repo->name = xstrdup(value);
130 else if (cgit_repo && !strcmp(name, "repo.path")) 127 else if (cgit_repo && !strcmp(name, "repo.path"))
131 cgit_repo->path = xstrdup(value); 128 cgit_repo->path = xstrdup(value);
132 else if (cgit_repo && !strcmp(name, "repo.desc")) 129 else if (cgit_repo && !strcmp(name, "repo.desc"))
133 cgit_repo->desc = xstrdup(value); 130 cgit_repo->desc = xstrdup(value);
134 else if (cgit_repo && !strcmp(name, "repo.owner")) 131 else if (cgit_repo && !strcmp(name, "repo.owner"))
135 cgit_repo->owner = xstrdup(value); 132 cgit_repo->owner = xstrdup(value);
133 else if (cgit_repo && !strcmp(name, "repo.defbranch"))
134 cgit_repo->defbranch = xstrdup(value);
136 else if (cgit_repo && !strcmp(name, "repo.snapshots")) 135 else if (cgit_repo && !strcmp(name, "repo.snapshots"))
137 cgit_repo->snapshots = atoi(value); 136 cgit_repo->snapshots = atoi(value);
138 else if (cgit_repo && !strcmp(name, "repo.module-link")) 137 else if (cgit_repo && !strcmp(name, "repo.module-link"))
139 cgit_repo->module_link= xstrdup(value); 138 cgit_repo->module_link= xstrdup(value);
140 else if (!strcmp(name, "include")) 139 else if (!strcmp(name, "include"))
141 cgit_read_config(value, cgit_global_config_cb); 140 cgit_read_config(value, cgit_global_config_cb);
142} 141}
143 142
144void cgit_repo_config_cb(const char *name, const char *value)
145{
146 if (!strcmp(name, "name"))
147 cgit_repo_name = xstrdup(value);
148 else if (!strcmp(name, "desc"))
149 cgit_repo_desc = xstrdup(value);
150 else if (!strcmp(name, "owner"))
151 cgit_repo_owner = xstrdup(value);
152}
153
154void cgit_querystring_cb(const char *name, const char *value) 143void cgit_querystring_cb(const char *name, const char *value)
155{ 144{
156 if (!strcmp(name,"r")) { 145 if (!strcmp(name,"r")) {
157 cgit_query_repo = xstrdup(value); 146 cgit_query_repo = xstrdup(value);
158 } else if (!strcmp(name, "p")) { 147 } else if (!strcmp(name, "p")) {
159 cgit_query_page = xstrdup(value); 148 cgit_query_page = xstrdup(value);
160 } else if (!strcmp(name, "q")) { 149 } else if (!strcmp(name, "q")) {
161 cgit_query_search = xstrdup(value); 150 cgit_query_search = xstrdup(value);
162 } else if (!strcmp(name, "h")) { 151 } else if (!strcmp(name, "h")) {
163 cgit_query_head = xstrdup(value); 152 cgit_query_head = xstrdup(value);
164 cgit_query_has_symref = 1; 153 cgit_query_has_symref = 1;
165 } else if (!strcmp(name, "id")) { 154 } else if (!strcmp(name, "id")) {
166 cgit_query_sha1 = xstrdup(value); 155 cgit_query_sha1 = xstrdup(value);
167 cgit_query_has_sha1 = 1; 156 cgit_query_has_sha1 = 1;
168 } else if (!strcmp(name, "id2")) { 157 } else if (!strcmp(name, "id2")) {
169 cgit_query_sha2 = xstrdup(value); 158 cgit_query_sha2 = xstrdup(value);
170 cgit_query_has_sha1 = 1; 159 cgit_query_has_sha1 = 1;
171 } else if (!strcmp(name, "ofs")) { 160 } else if (!strcmp(name, "ofs")) {
172 cgit_query_ofs = atoi(value); 161 cgit_query_ofs = atoi(value);
173 } else if (!strcmp(name, "path")) { 162 } else if (!strcmp(name, "path")) {
174 cgit_query_path = xstrdup(value); 163 cgit_query_path = xstrdup(value);
175 } else if (!strcmp(name, "name")) { 164 } else if (!strcmp(name, "name")) {
176 cgit_query_name = xstrdup(value); 165 cgit_query_name = xstrdup(value);
177 } 166 }
178} 167}
179 168
180void *cgit_free_commitinfo(struct commitinfo *info) 169void *cgit_free_commitinfo(struct commitinfo *info)
181{ 170{
182 free(info->author); 171 free(info->author);
183 free(info->author_email); 172 free(info->author_email);
184 free(info->committer); 173 free(info->committer);
185 free(info->committer_email); 174 free(info->committer_email);
186 free(info->subject); 175 free(info->subject);
187 free(info); 176 free(info);
188 return NULL; 177 return NULL;
189} 178}
190 179
191int hextoint(char c) 180int hextoint(char c)
192{ 181{
193 if (c >= 'a' && c <= 'f') 182 if (c >= 'a' && c <= 'f')
194 return 10 + c - 'a'; 183 return 10 + c - 'a';
195 else if (c >= 'A' && c <= 'F') 184 else if (c >= 'A' && c <= 'F')
196 return 10 + c - 'A'; 185 return 10 + c - 'A';
197 else if (c >= '0' && c <= '9') 186 else if (c >= '0' && c <= '9')
198 return c - '0'; 187 return c - '0';
199 else 188 else
200 return -1; 189 return -1;
201} 190}