summaryrefslogtreecommitdiffabout
authorLars Hjemli <hjemli@gmail.com>2009-08-11 08:12:53 (UTC)
committer Lars Hjemli <hjemli@gmail.com>2009-08-11 08:12:53 (UTC)
commit2c742d1a925486a47f74710325b3076a7742a9f9 (patch) (unidiff)
treee16e8de4c65cb659a5b487ac3f8a7d7254fef395
parentfcc6056230e367e276dcb5a292d45e272cc6e7e6 (diff)
parent80550bbe028b551550395653d32a0ba50db540ef (diff)
downloadcgit-2c742d1a925486a47f74710325b3076a7742a9f9.zip
cgit-2c742d1a925486a47f74710325b3076a7742a9f9.tar.gz
cgit-2c742d1a925486a47f74710325b3076a7742a9f9.tar.bz2
Merge branch 'lh/embedded'
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--cgit.c37
-rw-r--r--cgit.h14
-rw-r--r--ui-shared.c51
3 files changed, 63 insertions, 39 deletions
diff --git a/cgit.c b/cgit.c
index bf46b5a..66dd140 100644
--- a/cgit.c
+++ b/cgit.c
@@ -217,2 +217,7 @@ static void querystring_cb(const char *name, const char *value)
217 217
218char *xstrdupn(const char *str)
219{
220 return (str ? xstrdup(str) : NULL);
221}
222
218static void prepare_context(struct cgit_context *ctx) 223static void prepare_context(struct cgit_context *ctx)
@@ -247,2 +252,12 @@ static void prepare_context(struct cgit_context *ctx)
247 ctx->cfg.summary_tags = 10; 252 ctx->cfg.summary_tags = 10;
253 ctx->env.cgit_config = xstrdupn(getenv("CGIT_CONFIG"));
254 ctx->env.http_host = xstrdupn(getenv("HTTP_HOST"));
255 ctx->env.https = xstrdupn(getenv("HTTPS"));
256 ctx->env.no_http = xstrdupn(getenv("NO_HTTP"));
257 ctx->env.path_info = xstrdupn(getenv("PATH_INFO"));
258 ctx->env.query_string = xstrdupn(getenv("QUERY_STRING"));
259 ctx->env.request_method = xstrdupn(getenv("REQUEST_METHOD"));
260 ctx->env.script_name = xstrdupn(getenv("SCRIPT_NAME"));
261 ctx->env.server_name = xstrdupn(getenv("SERVER_NAME"));
262 ctx->env.server_port = xstrdupn(getenv("SERVER_PORT"));
248 ctx->page.mimetype = "text/html"; 263 ctx->page.mimetype = "text/html";
@@ -255,2 +270,8 @@ static void prepare_context(struct cgit_context *ctx)
255 memset(&ctx->cfg.mimetypes, 0, sizeof(struct string_list)); 270 memset(&ctx->cfg.mimetypes, 0, sizeof(struct string_list));
271 if (ctx->env.script_name)
272 ctx->cfg.script_name = ctx->env.script_name;
273 if (ctx->env.query_string)
274 ctx->qry.raw = ctx->env.query_string;
275 if (!ctx->env.cgit_config)
276 ctx->env.cgit_config = CGIT_CONFIG;
256} 277}
@@ -427,2 +448,5 @@ static void cgit_parse_args(int argc, const char **argv)
427 } 448 }
449 if (!strcmp(argv[i], "--nohttp")) {
450 ctx.env.no_http = "1";
451 }
428 if (!strncmp(argv[i], "--query=", 8)) { 452 if (!strncmp(argv[i], "--query=", 8)) {
@@ -479,4 +503,2 @@ int main(int argc, const char **argv)
479{ 503{
480 const char *cgit_config_env = getenv("CGIT_CONFIG");
481 const char *method = getenv("REQUEST_METHOD");
482 const char *path; 504 const char *path;
@@ -490,9 +512,4 @@ int main(int argc, const char **argv)
490 512
491 if (getenv("SCRIPT_NAME"))
492 ctx.cfg.script_name = xstrdup(getenv("SCRIPT_NAME"));
493 if (getenv("QUERY_STRING"))
494 ctx.qry.raw = xstrdup(getenv("QUERY_STRING"));
495 cgit_parse_args(argc, argv); 513 cgit_parse_args(argc, argv);
496 parse_configfile(cgit_config_env ? cgit_config_env : CGIT_CONFIG, 514 parse_configfile(ctx.env.cgit_config, config_cb);
497 config_cb);
498 ctx.repo = NULL; 515 ctx.repo = NULL;
@@ -511,3 +528,3 @@ int main(int argc, const char **argv)
511 */ 528 */
512 path = getenv("PATH_INFO"); 529 path = ctx.env.path_info;
513 if (!ctx.qry.url && path) { 530 if (!ctx.qry.url && path) {
@@ -527,3 +544,3 @@ int main(int argc, const char **argv)
527 ctx.page.expires += ttl*60; 544 ctx.page.expires += ttl*60;
528 if (method && !strcmp(method, "HEAD")) 545 if (ctx.env.request_method && !strcmp(ctx.env.request_method, "HEAD"))
529 ctx.cfg.nocache = 1; 546 ctx.cfg.nocache = 1;
diff --git a/cgit.h b/cgit.h
index 4c854ea..d90ccdc 100644
--- a/cgit.h
+++ b/cgit.h
@@ -209,3 +209,17 @@ struct cgit_page {
209 209
210struct cgit_environment {
211 char *cgit_config;
212 char *http_host;
213 char *https;
214 char *no_http;
215 char *path_info;
216 char *query_string;
217 char *request_method;
218 char *script_name;
219 char *server_name;
220 char *server_port;
221};
222
210struct cgit_context { 223struct cgit_context {
224 struct cgit_environment env;
211 struct cgit_query qry; 225 struct cgit_query qry;
diff --git a/ui-shared.c b/ui-shared.c
index 015c52b..cf06511 100644
--- a/ui-shared.c
+++ b/ui-shared.c
@@ -38,6 +38,3 @@ char *cgit_httpscheme()
38{ 38{
39 char *https; 39 if (ctx.env.https && !strcmp(ctx.env.https, "on"))
40
41 https = getenv("HTTPS");
42 if (https != NULL && strcmp(https, "on") == 0)
43 return "https://"; 40 return "https://";
@@ -49,18 +46,9 @@ char *cgit_hosturl()
49{ 46{
50 char *host, *port; 47 if (ctx.env.http_host)
51 48 return ctx.env.http_host;
52 host = getenv("HTTP_HOST"); 49 if (!ctx.env.server_name)
53 if (host) { 50 return NULL;
54 host = xstrdup(host); 51 if (!ctx.env.server_port || atoi(ctx.env.server_port) == 80)
55 } else { 52 return ctx.env.server_name;
56 host = getenv("SERVER_NAME"); 53 return xstrdup(fmt("%s:%s", ctx.env.server_name, ctx.env.server_port));
57 if (!host)
58 return NULL;
59 port = getenv("SERVER_PORT");
60 if (port && atoi(port) != 80)
61 host = xstrdup(fmt("%s:%d", host, atoi(port)));
62 else
63 host = xstrdup(host);
64 }
65 return host;
66} 54}
@@ -469,5 +457,3 @@ void cgit_print_http_headers(struct cgit_context *ctx)
469{ 457{
470 const char *method = getenv("REQUEST_METHOD"); 458 if (ctx->env.no_http && !strcmp(ctx->env.no_http, "1"))
471
472 if (ctx->cfg.embedded)
473 return; 459 return;
@@ -491,3 +477,3 @@ void cgit_print_http_headers(struct cgit_context *ctx)
491 html("\n"); 477 html("\n");
492 if (method && !strcmp(method, "HEAD")) 478 if (ctx->env.request_method && !strcmp(ctx->env.request_method, "HEAD"))
493 exit(0); 479 exit(0);
@@ -497,4 +483,7 @@ void cgit_print_docstart(struct cgit_context *ctx)
497{ 483{
498 if (ctx->cfg.embedded) 484 if (ctx->cfg.embedded) {
485 if (ctx->cfg.header)
486 html_include(ctx->cfg.header);
499 return; 487 return;
488 }
500 489
@@ -536,3 +525,9 @@ void cgit_print_docend()
536{ 525{
537 html("</div>"); 526 html("</div> <!-- class=content -->\n");
527 if (ctx.cfg.embedded) {
528 html("</div> <!-- id=cgit -->\n");
529 if (ctx.cfg.footer)
530 html_include(ctx.cfg.footer);
531 return;
532 }
538 if (ctx.cfg.footer) 533 if (ctx.cfg.footer)
@@ -545,5 +540,3 @@ void cgit_print_docend()
545 } 540 }
546 html("</div>"); 541 html("</div> <!-- id=cgit -->\n");
547 if (ctx.cfg.embedded)
548 return;
549 html("</body>\n</html>\n"); 542 html("</body>\n</html>\n");