content type handling
authorChristian Thaeter <ct@pipapo.org>
Tue, 8 Jan 2008 03:29:14 +0000 (04:29 +0100)
committerChristian Thaeter <ct@pipapo.org>
Tue, 8 Jan 2008 03:29:14 +0000 (04:29 +0100)
store content_type for the generated html in query
webgit_mimetype() queries a mimetype from /etc/mime.types for a given path

src/query.c
src/webgit.c
src/webgit.h

index 55b3b70d4912c992f0a0cfe77f11e90da73788ad..d2cac725214ec07e239b00166014a72c03ab7955 100644 (file)
@@ -35,7 +35,7 @@ webgit_query_init (struct webgit_query* q)
   q->now = time (NULL);
 
   q->deref_to_tree = 0;
-  q->content_type = "text/html";
+  q->content_type = cwa_strndup ("text/html", SIZE_MAX);
 
   q->repo = NULL;
   q->action = NULL;
@@ -49,6 +49,7 @@ webgit_query_destroy (struct webgit_query* q)
 {
   cgi_free (q->request);
 
+  free (q->content_type);
   free (q->repo);
   free (q->action);
   free (q->object);
index deae91fe4775f20b36b0992a0f6e9021578eb2b1..a2f1823ec107caed27ec7bdce1bebbf26cf8b58a 100644 (file)
@@ -99,6 +99,40 @@ webgit_enter_repository (struct webgit_query* query)
 }
 
 
+const char*
+webgit_mimetype (const char* name)
+{
+  char buf[256];
+
+  char* ext = strrchr (name, '.');
+  if (!ext)
+    return "";
+  ++ext;
+  if (!*ext)
+    return "";
+
+  FILE* mime_types = fopen ("/etc/mime.types", "r");
+  if (!mime_types)
+    return "";
+
+  while (fgets (buf, 256, mime_types))
+    {
+      if (buf[0] == '#' || !strtok (buf, " \t\n"))
+        continue;
+
+      char* suffix;
+      while ((suffix = strtok (NULL, " \t\n")))
+        if (!strcmp (suffix, ext))
+          goto done;
+    }
+  *buf = '\0';
+
+ done:
+  fclose (mime_types);
+  return cwa_strndup (buf, SIZE_MAX);
+}
+
+
 int
 main (int argc, char**argv)
 {
index 15a7edb86a260306049b303d93c591a72d2153ac..8072c31350de4d1ee104bf716e6142b378415b28 100644 (file)
@@ -84,4 +84,7 @@ webgit_email_link (Html name, Html email);
 void
 webgit_enter_repository (struct webgit_query* query);
 
+const char*
+webgit_mimetype (const char* name);
+
 #endif