Re: [PATCH v2 4/4] cat-file: add mailmap support

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Siddarth,

On Thu, 7 Jul 2022, Siddharth Asthana wrote:

> diff --git a/builtin/cat-file.c b/builtin/cat-file.c
> index 50cf38999d..6dc750a367 100644
> --- a/builtin/cat-file.c
> +++ b/builtin/cat-file.c
> @@ -36,6 +37,19 @@ struct batch_options {
>
>  static const char *force_path;
>
> +static struct string_list mailmap = STRING_LIST_INIT_NODUP;
> +static int use_mailmap;
> +
> +char *replace_idents_using_mailmap(char *object_buf, size_t *size)

Here, we declare the `size` parameter as a pointer to a `size_t`.

> +{
> +	struct strbuf sb = STRBUF_INIT;
> +	strbuf_attach(&sb, object_buf, *size, *size + 1);
> +	const char *headers[] = { "author ", "committer ", "tagger ", NULL };
> +	apply_mailmap_to_header(&sb, headers, &mailmap);
> +	*size = sb.len;
> +	return strbuf_detach(&sb, NULL);
> +}
> +
>  static int filter_object(const char *path, unsigned mode,
>  			 const struct object_id *oid,
>  			 char **buf, unsigned long *size)
> @@ -152,6 +166,9 @@ static int cat_one_file(int opt, const char *exp_type, const char *obj_name,
>  		if (!buf)
>  			die("Cannot read object %s", obj_name);
>
> +		if (use_mailmap)
> +			buf = replace_idents_using_mailmap(buf, &size);

But here, we are once more bitten by Git's usage of last century's data
types: the `size` variable is of type `unsigned long`.

Now, you are probably developing this patch on 64-bit Linux or macOS,
where it just so happens that `size_t` is idempotent to `unsigned long`.

But that is not the case on 32-bit Linux nor on Windows, and therefore the
build fails with this patch. I need this to get the build to pass:

-- snipsnap --
>From 237c783705b30ed4bcce81aeb860dc7e152fc8bf Mon Sep 17 00:00:00 2001
From: Johannes Schindelin <johannes.schindelin@xxxxxx>
Date: Fri, 8 Jul 2022 13:47:52 +0200
Subject: [PATCH] fixup??? cat-file: add mailmap support

This is needed whenever `unsigned long` is different from `size_t`, e.g.
on 32-bit Linux and on Windows.

Signed-off-by: Johannes Schindelin <johannes.schindelin@xxxxxx>
---
 builtin/cat-file.c | 27 +++++++++++++++++++++------
 1 file changed, 21 insertions(+), 6 deletions(-)

diff --git a/builtin/cat-file.c b/builtin/cat-file.c
index ac852087a74..baa6aca53ce 100644
--- a/builtin/cat-file.c
+++ b/builtin/cat-file.c
@@ -185,8 +185,13 @@ static int cat_one_file(int opt, const char *exp_type, const char *obj_name,
 		if (!buf)
 			die("Cannot read object %s", obj_name);

-		if (use_mailmap)
-			buf = replace_idents_using_mailmap(buf, &size);
+		if (use_mailmap) {
+			size_t s;
+
+			buf = replace_idents_using_mailmap(buf, &s);
+
+			size = cast_size_t_to_ulong(s);
+		}

 		/* otherwise just spit out the data */
 		break;
@@ -222,8 +227,13 @@ static int cat_one_file(int opt, const char *exp_type, const char *obj_name,
 		buf = read_object_with_reference(the_repository, &oid,
 						 exp_type_id, &size, NULL);

-		if (use_mailmap)
-			buf = replace_idents_using_mailmap(buf, &size);
+		if (use_mailmap) {
+			size_t s;
+
+			buf = replace_idents_using_mailmap(buf, &s);
+
+			size = cast_size_t_to_ulong(s);
+		}
 		break;
 	}
 	default:
@@ -392,8 +402,13 @@ static void print_object_or_die(struct batch_options *opt, struct expand_data *d

 		contents = read_object_file(oid, &type, &size);

-		if (use_mailmap)
-			contents = replace_idents_using_mailmap(contents, &size);
+		if (use_mailmap) {
+			size_t s;
+
+			contents = replace_idents_using_mailmap(contents, &s);
+
+			size = cast_size_t_to_ulong(s);
+		}

 		if (!contents)
 			die("object %s disappeared", oid_to_hex(oid));
--
2.37.0.windows.1





[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]

  Powered by Linux