mirror of
https://github.com/git/git.git
synced 2024-11-25 19:04:18 +08:00
90a398bbd7
When fsck'ing an incoming pack, we need to fsck objects that cannot be read via read_sha1_file() because they are not local yet (and might even be rejected if transfer.fsckobjects is set to 'true'). For commits, there is a hack in place: we basically cache commit objects' buffers anyway, but the same is not true, say, for tag objects. By refactoring fsck_object() to take the object buffer and size as optional arguments -- optional, because we still fall back to the previous method to look at the cached commit objects if the caller passes NULL -- we prepare the machinery for the upcoming handling of tag objects. The assumption that such buffers are inherently NUL terminated is now wrong, of course, hence we pass the size of the buffer so that we can add a sanity check later, to prevent running past the end of the buffer. Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>
36 lines
1.1 KiB
C
36 lines
1.1 KiB
C
#ifndef GIT_FSCK_H
|
|
#define GIT_FSCK_H
|
|
|
|
#define FSCK_ERROR 1
|
|
#define FSCK_WARN 2
|
|
|
|
/*
|
|
* callback function for fsck_walk
|
|
* type is the expected type of the object or OBJ_ANY
|
|
* the return value is:
|
|
* 0 everything OK
|
|
* <0 error signaled and abort
|
|
* >0 error signaled and do not abort
|
|
*/
|
|
typedef int (*fsck_walk_func)(struct object *obj, int type, void *data);
|
|
|
|
/* callback for fsck_object, type is FSCK_ERROR or FSCK_WARN */
|
|
typedef int (*fsck_error)(struct object *obj, int type, const char *err, ...);
|
|
|
|
__attribute__((format (printf, 3, 4)))
|
|
int fsck_error_function(struct object *obj, int type, const char *fmt, ...);
|
|
|
|
/* descend in all linked child objects
|
|
* the return value is:
|
|
* -1 error in processing the object
|
|
* <0 return value of the callback, which lead to an abort
|
|
* >0 return value of the first signaled error >0 (in the case of no other errors)
|
|
* 0 everything OK
|
|
*/
|
|
int fsck_walk(struct object *obj, fsck_walk_func walk, void *data);
|
|
/* If NULL is passed for data, we assume the object is local and read it. */
|
|
int fsck_object(struct object *obj, void *data, unsigned long size,
|
|
int strict, fsck_error error_func);
|
|
|
|
#endif
|