Skip to content

Commit

Permalink
add common fsck error printing function
Browse files Browse the repository at this point in the history
Signed-off-by: Martin Koegler <mkoegler@auto.tuwien.ac.at>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
Martin Koegler authored and Junio C Hamano committed Feb 26, 2008
1 parent ba002f3 commit d6ffc8d
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 0 deletions.
29 changes: 29 additions & 0 deletions fsck.c
Original file line number Diff line number Diff line change
Expand Up @@ -304,3 +304,32 @@ int fsck_object(struct object *obj, int strict, fsck_error error_func)
return error_func(obj, FSCK_ERROR, "unknown type '%d' (internal fsck error)",
obj->type);
}

int fsck_error_function(struct object *obj, int type, const char *fmt, ...)
{
va_list ap;
int len;
struct strbuf sb;

strbuf_init(&sb, 0);
strbuf_addf(&sb, "object %s:", obj->sha1?sha1_to_hex(obj->sha1):"(null)");

va_start(ap, fmt);
len = vsnprintf(sb.buf + sb.len, strbuf_avail(&sb), fmt, ap);
va_end(ap);

if (len < 0)
len = 0;
if (len >= strbuf_avail(&sb)) {
strbuf_grow(&sb, len + 2);
va_start(ap, fmt);
len = vsnprintf(sb.buf + sb.len, strbuf_avail(&sb), fmt, ap);
va_end(ap);
if (len >= strbuf_avail(&sb))
die("this should not happen, your snprintf is broken");
}

error(sb.buf);
strbuf_release(&sb);
return 1;
}
2 changes: 2 additions & 0 deletions fsck.h
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@ 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, ...);

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
Expand Down

0 comments on commit d6ffc8d

Please sign in to comment.