libcgi

Warum noch eine CGI library ?

Es gibt ein paar andere CGI libraries im Internet, aber keine wurde wirklich meinen Anforderungen gerecht.
Manche sind ziemlich gross und aufgebläht (und daher eher langsam), aber keine davon hat die Fähigkeit, HTML Vorlagen (Templates) zu verwenden.

Die API

HINWEIS: Diese API Übersicht ist noch lange nicht vollständig!
Im Zweifelsfall einen Blick in das include-file werfen...

Config file functions

int cgi_readconfig(cgi_ctx c, char *file);	/* read a config file */
char *cgi_get_configval(cgi_ctx c, char *key);	/* get value of key */

HTML template functions

int cgi_tmpl_open(cgi_ctx c, char *f)	/* open a html template file */
int cgi_tmpl_set(cgi_ctx c, char *k, char *v);
int cgi_tmpl_print(cgi_ctx c);		/* print the template to stdout */

Ein kurzes Beispiel

Dieses kurze Beispiel öffnet eine HTML Vorlage, fügt ein Testcookie (falls eines gesetzt ist) und ein Wert aus einen Testformular (wenn gesetzt) ein und zeigt die Vorlage dann an.

int main(int argc, char **argv)
{
	char *p;
	cgi_ctx	mycgi = NULL;

	if((mycgi=cgi_initlib()) == NULL) {
		fatal_error("out of memory");
		exit(10);
	}
	if(cgi_requestmethod(mycgi) != REQ_M_GET) {
		cgi_errlog("programm not called with GET");
		cgi_exit_status_405(mycgi, "GET");
	}
	cgi_tmpl_open(mycgi, "example.tmpl");
	if((p=cgi_get_formval(mycgi, "test")) != NULL) {
		cgi_tmpl_set(mycgi, "form_test", p);
	}
	if((p=cgi_get_cookieval(mycgi, "TEST")) != NULL) {
		cgi_tmpl_set(mycgi, "cookie_test", p);
	}
	cgi_sendheader(mycgi, 200, "text/html");
	cgi_tmpl_print(mycgi);
	cgi_tmpl_free(mycgi);
	cgi_cleanup(mycgi);
	return 0;
}

Download