summaryrefslogtreecommitdiffstats
path: root/cgi/cgihttpsscriptptr.c
diff options
context:
space:
mode:
Diffstat (limited to 'cgi/cgihttpsscriptptr.c')
-rw-r--r--cgi/cgihttpsscriptptr.c47
1 files changed, 47 insertions, 0 deletions
diff --git a/cgi/cgihttpsscriptptr.c b/cgi/cgihttpsscriptptr.c
new file mode 100644
index 0000000..93f5339
--- /dev/null
+++ b/cgi/cgihttpsscriptptr.c
@@ -0,0 +1,47 @@
+/*
+** Copyright 1998 - 2007 Double Precision, Inc.
+** See COPYING for distribution information.
+*/
+
+/*
+*/
+#include "cgi.h"
+
+#if HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
+#include <string.h>
+#include <stdlib.h>
+#include <stdio.h>
+
+static char *scriptptr=0;
+extern void error(const char *);
+
+void cgihttpsscriptptr_init()
+{
+ /* Reinitialisation required when running as fastcgi */
+ if (scriptptr) {
+ free(scriptptr);
+ scriptptr=0;
+ }
+}
+
+const char *cgihttpsscriptptr()
+{
+ if (!scriptptr)
+ {
+ char *p=getenv("SCRIPT_NAME");
+ char *h=getenv("HTTP_HOST");
+ char *q;
+
+ if (!h) h="";
+ if (!p) p="";
+
+ q=malloc(strlen(p)+strlen(h)+sizeof("https://"));
+ if (!q) error("Out of memory.");
+ sprintf(q, "https:%s%s%s", (*h ? "//":""), h, p);
+ scriptptr=q;
+ }
+ return (scriptptr);
+}