formatting cosmetics
[webgit] / src / query.c
1 /*
2     cehtehs git web frontend
3
4   Copyright (C)
5     2007,               Christian Thaeter <ct@pipapo.org>
6
7   This program is free software; you can redistribute it and/or
8   modify it under the terms of the GNU General Public License as
9   published by the Free Software Foundation; either version 2 of the
10   License, or (at your option) any later version.
11
12   This program is distributed in the hope that it will be useful,
13   but WITHOUT ANY WARRANTY; without even the implied warranty of
14   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15   GNU General Public License for more details.
16
17   You should have received a copy of the GNU General Public License
18   along with this program; if not, write to the Free Software
19   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
20 */
21
22
23 #include "query.h"
24
25 #include "cwa.h"
26
27
28 void
29 ctgit_query_init (struct ctgit_query* q)
30 {
31   q->repo = NULL;
32   q->action = cwa_strdup ("main");
33   q->object = NULL;
34   q->head = NULL;
35   llist_init (&q->repos);
36 }
37
38 struct ctgit_query*
39 ctgit_query_destroy (struct ctgit_query* q)
40 {
41   cgi_free (q->request);
42
43   free (q->repo);
44   free (q->action);
45   free (q->object);
46   free (q->head);
47
48   LLIST_WHILE_HEAD (&q->repos, head)
49     {
50       struct ctgit_repo_info* h = (struct ctgit_repo_info*)head;
51
52       free (h->path);
53       free (h->name);
54
55       free (h->owner);
56       free (h->description);
57       free (h->pull_url);
58
59       llist_unlink (head);
60       free (h);
61     }
62
63   return q;
64 }
65
66
67 void
68 ctgit_query_add_repo (struct ctgit_query* q, char* path)
69 {
70   if (!path)
71     return;
72
73   struct ctgit_repo_info* self = cwa_malloc (sizeof(struct ctgit_repo_info));
74
75   llist_init (&self->node);
76   self->path = cwa_strdup (path);
77
78   self->owner = NULL;
79   self->description = NULL;
80   self->pull_url = NULL;
81 }
82
83
84 static void
85 ctgit_repo_param (const Cgi self, const char* v, size_t v_sz, void* u_dat)
86 {
87   struct ctgit_query* q = (struct ctgit_query*) u_dat;
88
89   free (q->repo);
90   q->repo = strdup(v);
91
92   fprintf (stderr,"repo='%s'\n", v);
93 }
94
95 static void
96 ctgit_action_param (const Cgi self, const char* v, size_t v_sz, void* u_dat)
97 {
98   struct ctgit_query* q = (struct ctgit_query*) u_dat;
99
100   free (q->action);
101   q->action = strdup(v);
102
103   fprintf (stderr,"action='%s'\n", v);
104 }
105
106 static void
107 ctgit_object_param (const Cgi self, const char* v, size_t v_sz, void* u_dat)
108 {
109   struct ctgit_query* q = (struct ctgit_query*) u_dat;
110
111   free (q->object);
112   q->object = strdup (v);
113
114   fprintf (stderr,"object='%s'\n", v);
115 }
116
117 static void
118 ctgit_ref_param (const Cgi self, const char* v, size_t v_sz, void* u_dat)
119 {
120   struct ctgit_query* q = (struct ctgit_query*) u_dat;
121
122   free (q->head);
123   q->head = strdup(v);
124
125   fprintf (stderr,"head='%s'\n", v);
126 }
127
128
129
130 void
131 ctgit_param_dispatch (const Cgi self,
132                       const char* name,
133                       const char* value,
134                       size_t value_len,
135                       void* user_data)
136 {
137 #define CTGIT_PARAM(name, _) {#name, ctgit_##name##_param},
138   struct param_table{
139     char* name;
140     void (*cb)(const Cgi, const char* v, size_t v_sz, void* u_dat);
141   } cmds[] = {CTGIT_PARAMS {"", NULL}};
142 #undef CTGIT_PARAMS
143
144   for (struct param_table* j = cmds; j->cb; ++j)
145     {
146       if (!strcmp (j->name, name))
147         {
148           j->cb (self, value, value_len, user_data);
149           break;
150         }
151     }
152 }