Download raw body.
introduce got_error_checksum
On Fri, Feb 03, 2023 at 11:53:36AM +0100, Omar Polo wrote:
> we have a few instance of got_error_fmt(GOT_ERR_OBJ_CSUM) with the
> same error string so it'd made sense to add an helper function.
I like this, ok.
> diffstat /home/op/w/got
> M include/got_error.h | 8+ 0-
> M lib/error.c | 18+ 0-
> M lib/object_parse.c | 4+ 20-
> M libexec/got-read-blob/got-read-blob.c | 1+ 5-
>
> 4 files changed, 31 insertions(+), 25 deletions(-)
>
> diff /home/op/w/got
> commit - 09cbb981df84d9c12f0fa371cb6b85d3f1b615c0
> path + /home/op/w/got
> blob - 3fd06efcdadb789fef14e683086013ed87d5bfd9
> file + include/got_error.h
> --- include/got_error.h
> +++ include/got_error.h
> @@ -261,6 +261,14 @@ const struct got_error *got_error_no_obj(struct got_ob
> const struct got_error *got_error_no_obj(struct got_object_id *);
>
> /*
> + * Obtain an error with code GOT_ERR_OBJ_CSUM and an error message which
> + * contains the specified object ID. The message buffer is statically
> + * allocated; future invocations of this function will overwrite the
> + * message set during earlier invocations.
> + */
> +const struct got_error *got_error_checksum(struct got_object_id *);
> +
> +/*
> * Obtain an error with code GOT_ERR_NOT_REF and an error message which
> * contains the specified reference name. The message buffer is statically
> * allocated; future invocations of this function will overwrite the
> blob - a63dabdbb6ea9f180683f4d148b335902323042d (staged)
> file + lib/error.c
> --- lib/error.c
> +++ lib/error.c
> @@ -382,6 +382,24 @@ got_error_not_ref(const char *refname)
> }
>
> const struct got_error *
> +got_error_checksum(struct got_object_id *id)
> +{
> + char id_str[SHA1_DIGEST_STRING_LENGTH];
> + char msg[sizeof("checksum failure for object ") + sizeof(id_str)];
> + int ret;
> +
> + if (!got_object_id_serialize(id, id_str, sizeof(id_str)))
> + return got_error(GOT_ERR_OBJ_CSUM);
> +
> + ret = snprintf(msg, sizeof(msg), "checksum failure for object %s",
> + id_str);
> + if (ret < 0 || (size_t)ret >= sizeof(msg))
> + return got_error(GOT_ERR_OBJ_CSUM);
> +
> + return got_error_msg(GOT_ERR_OBJ_CSUM, msg);
> +}
> +
> +const struct got_error *
> got_error_not_ref(const char *refname)
> {
> char msg[sizeof("reference not found") + 1004];
> blob - 27d66bb8f8798c76dc4f448a3c48249d762a5f98 (staged)
> file + lib/object_parse.c
> --- lib/object_parse.c
> +++ lib/object_parse.c
> @@ -343,11 +343,7 @@ got_object_read_raw(uint8_t **outbuf, off_t *size, siz
>
> SHA1Final(sha1, &sha1_ctx);
> if (memcmp(expected_id->sha1, sha1, SHA1_DIGEST_LENGTH) != 0) {
> - char buf[SHA1_DIGEST_STRING_LENGTH];
> - err = got_error_fmt(GOT_ERR_OBJ_CSUM,
> - "checksum failure for object %s",
> - got_sha1_digest_to_str(expected_id->sha1, buf,
> - sizeof(buf)));
> + err = got_error_checksum(expected_id);
> goto done;
> }
>
> @@ -766,11 +762,7 @@ got_object_read_commit(struct got_commit_object **comm
>
> SHA1Final(id.sha1, &sha1_ctx);
> if (got_object_id_cmp(expected_id, &id) != 0) {
> - char buf[SHA1_DIGEST_STRING_LENGTH];
> - err = got_error_fmt(GOT_ERR_OBJ_CSUM,
> - "checksum failure for object %s",
> - got_sha1_digest_to_str(expected_id->sha1, buf,
> - sizeof(buf)));
> + err = got_error_checksum(expected_id);
> goto done;
> }
>
> @@ -939,11 +931,7 @@ got_object_read_tree(struct got_parsed_tree_entry **en
>
> SHA1Final(id.sha1, &sha1_ctx);
> if (got_object_id_cmp(expected_id, &id) != 0) {
> - char buf[SHA1_DIGEST_STRING_LENGTH];
> - err = got_error_fmt(GOT_ERR_OBJ_CSUM,
> - "checksum failure for object %s",
> - got_sha1_digest_to_str(expected_id->sha1, buf,
> - sizeof(buf)));
> + err = got_error_checksum(expected_id);
> goto done;
> }
>
> @@ -1183,11 +1171,7 @@ got_object_read_tag(struct got_tag_object **tag, int f
>
> SHA1Final(id.sha1, &sha1_ctx);
> if (got_object_id_cmp(expected_id, &id) != 0) {
> - char buf[SHA1_DIGEST_STRING_LENGTH];
> - err = got_error_fmt(GOT_ERR_OBJ_CSUM,
> - "checksum failure for object %s",
> - got_sha1_digest_to_str(expected_id->sha1, buf,
> - sizeof(buf)));
> + err = got_error_checksum(expected_id);
> goto done;
> }
>
> blob - 0f7e7ecca20145a10ab4146b77499313ccdd89ed
> file + libexec/got-read-blob/got-read-blob.c
> --- libexec/got-read-blob/got-read-blob.c
> +++ libexec/got-read-blob/got-read-blob.c
> @@ -172,11 +172,7 @@ main(int argc, char *argv[])
> }
> SHA1Final(id.sha1, &sha1_ctx);
> if (got_object_id_cmp(&expected_id, &id) != 0) {
> - char buf[SHA1_DIGEST_STRING_LENGTH];
> - err = got_error_fmt(GOT_ERR_OBJ_CSUM,
> - "checksum failure for object %s",
> - got_sha1_digest_to_str(expected_id.sha1, buf,
> - sizeof(buf)));
> + err = got_error_checksum(&expected_id);
> goto done;
> }
>
>
>
introduce got_error_checksum