+struct cgit_page {
+ time_t modified;
+ time_t expires;
+ size_t size;
+ const char *mimetype;
+ const char *charset;
+ const char *filename;
+ const char *etag;
+ const char *title;
+ int status;
+ const char *statusmsg;
+};
+
+struct cgit_environment {
+ const char *cgit_config;
+ const char *http_host;
+ const char *https;
+ const char *no_http;
+ const char *path_info;
+ const char *query_string;
+ const char *request_method;
+ const char *script_name;
+ const char *server_name;
+ const char *server_port;
+ const char *http_cookie;
+ const char *http_referer;
+ unsigned int content_length;
+ int authenticated;
+};
+
+struct cgit_context {
+ struct cgit_environment env;
+ struct cgit_query qry;
+ struct cgit_config cfg;
+ struct cgit_repo *repo;
+ struct cgit_page page;
+};
+
+typedef int (*write_archive_fn_t)(const char *, const char *);
+
+struct cgit_snapshot_format {
+ const char *suffix;
+ const char *mimetype;
+ write_archive_fn_t write_func;
+ int bit;
+};
+
+extern const char *cgit_version;
+
+extern struct cgit_repolist cgit_repolist;
+extern struct cgit_context ctx;
+extern const struct cgit_snapshot_format cgit_snapshot_formats[];
+
+extern char *cgit_default_repo_desc;
+extern struct cgit_repo *cgit_add_repo(const char *url);
+extern struct cgit_repo *cgit_get_repoinfo(const char *url);
+extern void cgit_repo_config_cb(const char *name, const char *value);
+
+extern int chk_zero(int result, char *msg);
+extern int chk_positive(int result, char *msg);
+extern int chk_non_negative(int result, char *msg);
+
+extern char *trim_end(const char *str, char c);
+extern char *ensure_end(const char *str, char c);
+extern char *strlpart(char *txt, int maxlen);
+extern char *strrpart(char *txt, int maxlen);
+
+extern void strbuf_ensure_end(struct strbuf *sb, char c);
+
+extern void cgit_add_ref(struct reflist *list, struct refinfo *ref);
+extern void cgit_free_reflist_inner(struct reflist *list);
+extern int cgit_refs_cb(const char *refname, const unsigned char *sha1,
+ int flags, void *cb_data);
+
+extern void *cgit_free_commitinfo(struct commitinfo *info);
+
+extern int cgit_diff_files(const unsigned char *old_sha1,
+ const unsigned char *new_sha1,
+ unsigned long *old_size, unsigned long *new_size,
+ int *binary, int context, int ignorews,
+ linediff_fn fn);
+
+extern void cgit_diff_tree(const unsigned char *old_sha1,
+ const unsigned char *new_sha1,
+ filepair_fn fn, const char *prefix, int ignorews);
+
+extern void cgit_diff_commit(struct commit *commit, filepair_fn fn,
+ const char *prefix);
+
+__attribute__((format (printf,1,2)))