Re: What's cooking in git.git (Jun 2010, #02; Wed, 16)
- From
Matthieu Moy <matthieu.moy@grenoble-inp.fr>
- Date
- Jun 18, 2010, 06:30 UTC
- Message-ID
- <vpq8w6cc0om.fsf@bauges.imag.fr>
- In-Reply-To
- <7vmxut1b8v.fsf@alter.siamese.dyndns.org>
Junio C Hamano <gitster@pobox.com> writes:
Show 8 quoted lines
> Clément Poulain <clement.poulain@ensimag.imag.fr> writes: > >> A fix was proposed here: >> http://mid.gmane.org/1276610328-28532-1-git-send-email-axel.bonnet@ensimag.imag.fr > > This one changes textconv_object() to take a pointer to ulong*; a caller > is changed to cast a long* down to that pointer (in > fill_origin_blob);
Isn't sign-casting safe? If not, then the existing call to read_sha1_file should be fixed too:
-file->ptr = read_sha1_file(o->blob_sha1, &type, - (unsigned long *)(&(file->size))); [...] +file->ptr = read_sha1_file(o->blob_sha1, &type, + (unsigned long *)(&(file->size)));
(it's been there for a while)
Show 6 quoted lines
> The only portable way in C to convert between types is by assignment. So > you have to do: > > unsigned long foo; > textconv_object(read_from, null_sha1, &buf.buf, &foo); > buf.len = foo;
This is what the patch does a little later:
+unsigned long buf_len; [...] +if (DIFF_OPT_TST(opt, ALLOW_TEXTCONV) && + textconv_object(read_from, null_sha1, &buf.buf, &buf_len)) +buf.len = buf_len;
-- Matthieu Moy http://www-verimag.imag.fr/~moy/