libgcgi.h - libgcgi - REST library for Gopher HTML git clone git://bitreich.org/libgcgi/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/libgcgi/ DIR Log DIR Files DIR Refs DIR Tags DIR README DIR LICENSE --- libgcgi.h (1554B) --- 1 #include <stddef.h> 2 3 #ifndef LIBGCGI_H 4 #define LIBGCGI_H 5 6 /* 7 * Gopher CGI library to use in CGI scripts 8 * 9 * See libgcgi(3) or the README for usage and examples. 10 */ 11 12 /* maps glob pattern */ 13 struct gcgi_handler { 14 char const *glob; 15 void (*fn)(char **matches); 16 }; 17 18 /* storage for key-value pair */ 19 struct gcgi_var_list { 20 struct gcgi_var { 21 char *key, *val; 22 } *list; 23 size_t len; 24 char *buf; 25 }; 26 27 /* main loop executing h->fn() if h->glob is matching */ 28 void gcgi_handle_request(struct gcgi_handler h[], char **argv, int argc); 29 30 /* abort the program with an error message sent to the client */ 31 void gcgi_fatal(char *fmt, ...); 32 33 /* print a template with every "{{name}}" looked up in `vars` */ 34 void gcgi_template(char const *path, struct gcgi_var_list *vars); 35 36 /* manage a `key`-`val` pair storage `vars`, as used with gcgi_template */ 37 void gcgi_set_var(struct gcgi_var_list *vars, char *key, char *val); 38 char *gcgi_get_var(struct gcgi_var_list *vars, char *key); 39 void gcgi_free_var_list(struct gcgi_var_list *vars); 40 41 /* store and read a list of variables onto a simple RFC822-like format */ 42 void gcgi_read_var_list(struct gcgi_var_list *vars, char *path); 43 int gcgi_write_var_list(struct gcgi_var_list *vars, char *path); 44 45 /* components of the gopher request */ 46 extern char *gcgi_gopher_search; 47 extern char *gcgi_gopher_path; 48 extern struct gcgi_var_list gcgi_gopher_query; 49 extern char *gcgi_gopher_host; 50 extern char *gcgi_gopher_port; 51 52 /* need to be provided if not present in libc, which is rare */ 53 char *strsep(char **s, const char *delims); 54 55 #endif