aboutsummaryrefslogtreecommitdiff
path: root/cforum.c
diff options
context:
space:
mode:
Diffstat (limited to 'cforum.c')
-rw-r--r--cforum.c68
1 files changed, 68 insertions, 0 deletions
diff --git a/cforum.c b/cforum.c
new file mode 100644
index 0000000..a42a0b3
--- /dev/null
+++ b/cforum.c
@@ -0,0 +1,68 @@
+#include <sqlite3.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#define warn(...) fprintf(stderr, __VA_ARGS__)
+#define die(...) do{ fprintf(stderr, __VA_ARGS__); exit(1); }while(0)
+char *query(char *);
+struct site {
+ char *name;
+} site;
+
+#include "front.c"
+
+int
+main(int argc, char *argv[])
+{
+ char *qs;
+ sqlite3 *db;
+ sqlite3_stmt *res;
+
+ /* Retrieve site name from database. */
+ if(sqlite3_open("db", &db) != SQLITE_OK){
+ warn("%s\n", sqlite3_errmsg(db));
+ sqlite3_close(db);
+ return 1;
+ }
+
+ if(sqlite3_prepare(db,
+ "SELECT value FROM settings WHERE key = 'name'",
+ -1, &res, 0) != SQLITE_OK){
+ warn("%s\n", sqlite3_errmsg(db));
+ sqlite3_close(db);
+ return 1;
+ }
+
+ if(sqlite3_step(res) == SQLITE_ROW)
+ site.name = strdup(sqlite3_column_text(res, 0));
+
+ sqlite3_finalize(res);
+ sqlite3_close(db);
+
+ /* Handle request. */
+ qs = getenv("QUERY_STRING");
+ if(!qs || !*qs)
+ front();
+
+ return 0;
+}
+
+char *
+query(char *key)
+{
+ static char *qs;
+ char *w;
+ int n;
+
+ if(!qs) qs = getenv("QUERY_STRING");
+ if(!qs) die("no QUERY_STRING");
+
+ for(w = strtok(qs, "&"); w; w = strtok(NULL, "&")){
+ n = strcspn(w, "=");
+ if(strncmp(w, key, n) == 0)
+ return w + n + (w[n] == '=');
+ }
+
+ return NULL;
+} \ No newline at end of file