fsck.hon commit patch-delta: consistently report corruption (fa72f90)
   1#ifndef GIT_FSCK_H
   2#define GIT_FSCK_H
   3
   4#define FSCK_ERROR 1
   5#define FSCK_WARN 2
   6#define FSCK_IGNORE 3
   7
   8struct fsck_options;
   9struct object;
  10
  11void fsck_set_msg_type(struct fsck_options *options,
  12                const char *msg_id, const char *msg_type);
  13void fsck_set_msg_types(struct fsck_options *options, const char *values);
  14int is_valid_msg_type(const char *msg_id, const char *msg_type);
  15
  16/*
  17 * callback function for fsck_walk
  18 * type is the expected type of the object or OBJ_ANY
  19 * the return value is:
  20 *     0        everything OK
  21 *     <0       error signaled and abort
  22 *     >0       error signaled and do not abort
  23 */
  24typedef int (*fsck_walk_func)(struct object *obj, int type, void *data, struct fsck_options *options);
  25
  26/* callback for fsck_object, type is FSCK_ERROR or FSCK_WARN */
  27typedef int (*fsck_error)(struct fsck_options *o,
  28        struct object *obj, int type, const char *message);
  29
  30int fsck_error_function(struct fsck_options *o,
  31        struct object *obj, int type, const char *message);
  32
  33struct fsck_options {
  34        fsck_walk_func walk;
  35        fsck_error error_func;
  36        unsigned strict:1;
  37        int *msg_type;
  38        struct oid_array *skiplist;
  39        struct decoration *object_names;
  40};
  41
  42#define FSCK_OPTIONS_DEFAULT { NULL, fsck_error_function, 0, NULL }
  43#define FSCK_OPTIONS_STRICT { NULL, fsck_error_function, 1, NULL }
  44
  45/* descend in all linked child objects
  46 * the return value is:
  47 *    -1        error in processing the object
  48 *    <0        return value of the callback, which lead to an abort
  49 *    >0        return value of the first signaled error >0 (in the case of no other errors)
  50 *    0         everything OK
  51 */
  52int fsck_walk(struct object *obj, void *data, struct fsck_options *options);
  53/* If NULL is passed for data, we assume the object is local and read it. */
  54int fsck_object(struct object *obj, void *data, unsigned long size,
  55        struct fsck_options *options);
  56
  57/*
  58 * Some fsck checks are context-dependent, and may end up queued; run this
  59 * after completing all fsck_object() calls in order to resolve any remaining
  60 * checks.
  61 */
  62int fsck_finish(struct fsck_options *options);
  63
  64#endif