path: root/convert.h
diff options
authorJunio C Hamano <>2011-05-20 21:33:31 (GMT)
committerJunio C Hamano <>2011-05-26 23:47:15 (GMT)
commitb6691092d707860019bbab80eaaf9173ada10586 (patch)
treeb9e7e80502085bb9237a4d1726afb38a36fb5ba8 /convert.h
parentd1bf0e08313927c269846476f99f59d878807371 (diff)
Add streaming filter API
This introduces an API to plug custom filters to an input stream. The caller gets get_stream_filter("path") to obtain an appropriate filter for the path, and then uses it when opening an input stream via open_istream(). After that, the caller can read from the stream with read_istream(), and close it with close_istream(), just like an unfiltered stream. This only adds a "null" filter that is a pass-thru filter, but later changes can add LF-to-CRLF and other filters, and the callers of the streaming API do not have to change. Signed-off-by: Junio C Hamano <>
Diffstat (limited to 'convert.h')
1 files changed, 22 insertions, 1 deletions
diff --git a/convert.h b/convert.h
index b1b4a38..17d7509 100644
--- a/convert.h
+++ b/convert.h
@@ -40,5 +40,26 @@ extern int convert_to_working_tree(const char *path, const char *src,
size_t len, struct strbuf *dst);
extern int renormalize_buffer(const char *path, const char *src, size_t len,
struct strbuf *dst);
-extern int can_bypass_conversion(const char *path);
+ *
+ * Streaming converison support
+ *
+ *****************************************************************/
+struct stream_filter; /* opaque */
+extern struct stream_filter *get_stream_filter(const char *path, const unsigned char *);
+extern void free_stream_filter(struct stream_filter *);
+extern int is_null_stream_filter(struct stream_filter *);
+ * Use as much input up to *isize_p and fill output up to *osize_p;
+ * update isize_p and osize_p to indicate how much buffer space was
+ * consumed and filled. Return 0 on success, non-zero on error.
+ */
+extern int stream_filter(struct stream_filter *,
+ const char *input, size_t *isize_p,
+ char *output, size_t *osize_p);
#endif /* CONVERT_H */