# [PATCH] resolve-undo.c: silence compiler complaints by casting void * to char *

4 messages from 2010-02-01 to 2010-02-02. Participants: Brandon Casey, Junio C Hamano.
Thread: https://gitlist.dev/t/22476

## Brandon Casey, 2010-02-01 23:00

Subject: [PATCH] resolve-undo.c: silence compiler complaints by casting void * to char *
Message-ID: <qzbyPiTgRGI0lsxvEmFa0WtwK5ko5snXQDNffxC66y9v0rlie5pcKzGT28WpzfQlFd0OvJNY_jo@cipher.nrlssc.navy.mil>
URL: https://gitlist.dev/e/qzbyPiTgRGI0lsxvEmFa0WtwK5ko5snXQDNffxC66y9v0rlie5pcKzGT28WpzfQlFd0OvJNY_jo%40cipher.nrlssc.navy.mil

```
From: Brandon Casey <drafnel@gmail.com>

Some compilers produce errors when arithmetic is attempted on pointers to
void.  We want computations done on byte addresses, so cast them to char *
to work them around.

Signed-off-by: Brandon Casey <casey@nrlssc.navy.mil>
---
 resolve-undo.c |    6 +++---
 1 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/resolve-undo.c b/resolve-undo.c
index 37d73cd..c259fe6 100644
--- a/resolve-undo.c
+++ b/resolve-undo.c
@@ -75,7 +75,7 @@ struct string_list *resolve_undo_read(void *data, unsigned long size)
 			lost->util = xcalloc(1, sizeof(*ui));
 		ui = lost->util;
 		size -= len;
-		data += len;
+		data = (char*) data + len;
 
 		for (i = 0; i < 3; i++) {
 			ui->mode[i] = strtoul(data, &endptr, 8);
@@ -85,7 +85,7 @@ struct string_list *resolve_undo_read(void *data, unsigned long size)
 			if (size <= len)
 				goto error;
 			size -= len;
-			data += len;
+			data = (char*) data + len;
 		}
 
 		for (i = 0; i < 3; i++) {
@@ -95,7 +95,7 @@ struct string_list *resolve_undo_read(void *data, unsigned long size)
 				goto error;
 			hashcpy(ui->sha1[i], data);
 			size -= 20;
-			data += 20;
+			data = (char*) data + 20;
 		}
 	}
 	return resolve_undo;
-- 
1.6.6

```

## Junio C Hamano, 2010-02-01 23:44

Subject: Re: [PATCH] resolve-undo.c: silence compiler complaints by casting void * to char *
Message-ID: <7vsk9kplla.fsf@alter.siamese.dyndns.org>
URL: https://gitlist.dev/e/7vsk9kplla.fsf%40alter.siamese.dyndns.org
In-Reply-To: <qzbyPiTgRGI0lsxvEmFa0WtwK5ko5snXQDNffxC66y9v0rlie5pcKzGT28WpzfQlFd0OvJNY_jo@cipher.nrlssc.navy.mil>

```
Thanks for catching this.

In this particular case, I however suspect that it would be cleaner to
declare that the first parameter to resolve_undo_read() is a "char *"
(or even "const char *"), as we are dealing with NUL delimited list of
octal numbers and character strings.

```

## Junio C Hamano, 2010-02-02 05:46

Subject: Re: [PATCH] resolve-undo.c: silence compiler complaints by casting void * to char *
Message-ID: <7vr5p4favs.fsf@alter.siamese.dyndns.org>
URL: https://gitlist.dev/e/7vr5p4favs.fsf%40alter.siamese.dyndns.org
In-Reply-To: <7vsk9kplla.fsf@alter.siamese.dyndns.org>

```
Junio C Hamano <gitster@pobox.com> writes:

> Thanks for catching this.
>
> In this particular case, I however suspect that it would be cleaner to
> declare that the first parameter to resolve_undo_read() is a "char *"
> (or even "const char *"), as we are dealing with NUL delimited list of
> octal numbers and character strings.

It would look like this.  I wonder if we should make hash*() inline
functions to take (void *) or (const void *) pointers to avoid further
noises like this but that would be a separate topic.

 resolve-undo.c |    4 ++--
 resolve-undo.h |    2 +-
 2 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/resolve-undo.c b/resolve-undo.c
index 37d73cd..0f50ee0 100644
--- a/resolve-undo.c
+++ b/resolve-undo.c
@@ -53,7 +53,7 @@ void resolve_undo_write(struct strbuf *sb, struct string_list *resolve_undo)
 	for_each_string_list(write_one, resolve_undo, sb);
 }
 
-struct string_list *resolve_undo_read(void *data, unsigned long size)
+struct string_list *resolve_undo_read(const char *data, unsigned long size)
 {
 	struct string_list *resolve_undo;
 	size_t len;
@@ -93,7 +93,7 @@ struct string_list *resolve_undo_read(void *data, unsigned long size)
 				continue;
 			if (size < 20)
 				goto error;
-			hashcpy(ui->sha1[i], data);
+			hashcpy(ui->sha1[i], (const unsigned char *)data);
 			size -= 20;
 			data += 20;
 		}
diff --git a/resolve-undo.h b/resolve-undo.h
index e4e5c1b..8458769 100644
--- a/resolve-undo.h
+++ b/resolve-undo.h
@@ -8,7 +8,7 @@ struct resolve_undo_info {
 
 extern void record_resolve_undo(struct index_state *, struct cache_entry *);
 extern void resolve_undo_write(struct strbuf *, struct string_list *);
-extern struct string_list *resolve_undo_read(void *, unsigned long);
+extern struct string_list *resolve_undo_read(const char *, unsigned long);
 extern void resolve_undo_clear_index(struct index_state *);
 extern int unmerge_index_entry_at(struct index_state *, int);
 extern void unmerge_index(struct index_state *, const char **);

```

## Brandon Casey, 2010-02-02 15:23

Subject: Re: [PATCH] resolve-undo.c: silence compiler complaints by casting void * to char *
Message-ID: <97tOvtEqk8MiRaSVk9lJHcwIzHMJLo8v4hw8LEH-4JfIi16BeIKnLA@cipher.nrlssc.navy.mil>
URL: https://gitlist.dev/e/97tOvtEqk8MiRaSVk9lJHcwIzHMJLo8v4hw8LEH-4JfIi16BeIKnLA%40cipher.nrlssc.navy.mil
In-Reply-To: <7vr5p4favs.fsf@alter.siamese.dyndns.org>

```
Junio C Hamano wrote:
> Junio C Hamano <gitster@pobox.com> writes:
> 
>> Thanks for catching this.
>>
>> In this particular case, I however suspect that it would be cleaner to
>> declare that the first parameter to resolve_undo_read() is a "char *"
>> (or even "const char *"), as we are dealing with NUL delimited list of
>> octal numbers and character strings.
> 
> It would look like this.

This works for me.

Thanks,
-brandon

```
