convert.hon commit Sync with maint (35f6318)
   1/*
   2 * Copyright (c) 2011, Google Inc.
   3 */
   4#ifndef CONVERT_H
   5#define CONVERT_H
   6
   7enum safe_crlf {
   8        SAFE_CRLF_FALSE = 0,
   9        SAFE_CRLF_FAIL = 1,
  10        SAFE_CRLF_WARN = 2,
  11        SAFE_CRLF_RENORMALIZE = 3
  12};
  13
  14extern enum safe_crlf safe_crlf;
  15
  16enum auto_crlf {
  17        AUTO_CRLF_FALSE = 0,
  18        AUTO_CRLF_TRUE = 1,
  19        AUTO_CRLF_INPUT = -1
  20};
  21
  22extern enum auto_crlf auto_crlf;
  23
  24enum eol {
  25        EOL_UNSET,
  26        EOL_CRLF,
  27        EOL_LF,
  28#ifdef NATIVE_CRLF
  29        EOL_NATIVE = EOL_CRLF
  30#else
  31        EOL_NATIVE = EOL_LF
  32#endif
  33};
  34
  35extern enum eol core_eol;
  36extern const char *get_cached_convert_stats_ascii(const char *path);
  37extern const char *get_wt_convert_stats_ascii(const char *path);
  38extern const char *get_convert_attr_ascii(const char *path);
  39
  40/* returns 1 if *dst was used */
  41extern int convert_to_git(const char *path, const char *src, size_t len,
  42                          struct strbuf *dst, enum safe_crlf checksafe);
  43extern int convert_to_working_tree(const char *path, const char *src,
  44                                   size_t len, struct strbuf *dst);
  45extern int renormalize_buffer(const char *path, const char *src, size_t len,
  46                              struct strbuf *dst);
  47static inline int would_convert_to_git(const char *path)
  48{
  49        return convert_to_git(path, NULL, 0, NULL, 0);
  50}
  51/* Precondition: would_convert_to_git_filter_fd(path) == true */
  52extern void convert_to_git_filter_fd(const char *path, int fd,
  53                                     struct strbuf *dst,
  54                                     enum safe_crlf checksafe);
  55extern int would_convert_to_git_filter_fd(const char *path);
  56
  57/*****************************************************************
  58 *
  59 * Streaming conversion support
  60 *
  61 *****************************************************************/
  62
  63struct stream_filter; /* opaque */
  64
  65extern struct stream_filter *get_stream_filter(const char *path, const unsigned char *);
  66extern void free_stream_filter(struct stream_filter *);
  67extern int is_null_stream_filter(struct stream_filter *);
  68
  69/*
  70 * Use as much input up to *isize_p and fill output up to *osize_p;
  71 * update isize_p and osize_p to indicate how much buffer space was
  72 * consumed and filled. Return 0 on success, non-zero on error.
  73 *
  74 * Some filters may need to buffer the input and look-ahead inside it
  75 * to decide what to output, and they may consume more than zero bytes
  76 * of input and still not produce any output. After feeding all the
  77 * input, pass NULL as input and keep calling this function, to let
  78 * such filters know there is no more input coming and it is time for
  79 * them to produce the remaining output based on the buffered input.
  80 */
  81extern int stream_filter(struct stream_filter *,
  82                         const char *input, size_t *isize_p,
  83                         char *output, size_t *osize_p);
  84
  85#endif /* CONVERT_H */