diff mbox series

[v3,07/10] git-zlib: cast away potential constness of `next_in` pointer

Message ID 20250116-b4-pks-compat-drop-uncompress2-v3-7-f2af1f5c4a06@pks.im (mailing list archive)
State Superseded
Headers show
Series compat/zlib: allow use of zlib-ng as backend | expand

Commit Message

Patrick Steinhardt Jan. 16, 2025, 9:17 a.m. UTC
The `struct git_zstream::next_in` variable points to the input data and
is used in combination with `struct z_stream::next_in`. While that
latter field is not marked as a constant in zlib, it is marked as such
in zlib-ng. This causes a couple of compiler errors when we try to
assign these fields to one another due to mismatching constness.

Fix the issue by casting away the potential constness of `next_in`.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
---
 git-zlib.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Justin Tobler Jan. 27, 2025, 12:58 a.m. UTC | #1
On 25/01/16 10:17AM, Patrick Steinhardt wrote:
> The `struct git_zstream::next_in` variable points to the input data and
> is used in combination with `struct z_stream::next_in`. While that
> latter field is not marked as a constant in zlib, it is marked as such
> in zlib-ng. This causes a couple of compiler errors when we try to
> assign these fields to one another due to mismatching constness.
> 
> Fix the issue by casting away the potential constness of `next_in`.
> 
> Signed-off-by: Patrick Steinhardt <ps@pks.im>
> ---
>  git-zlib.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/git-zlib.c b/git-zlib.c
> index 2e973320c2..519b3647ac 100644
> --- a/git-zlib.c
> +++ b/git-zlib.c
> @@ -59,7 +59,7 @@ static void zlib_post_call(git_zstream *s)
>  
>  	s->total_out = s->z.total_out;
>  	s->total_in = s->z.total_in;
> -	s->next_in = s->z.next_in;
> +	s->next_in = (unsigned char *) s->z.next_in;

Without the context of the commit, its not obvious to me why this cast
is happening and looks curious. It might be nice to leave a comment here
explaining its purpose.

-Justin

>  	s->next_out = s->z.next_out;
>  	s->avail_in -= bytes_consumed;
>  	s->avail_out -= bytes_produced;
> 
> -- 
> 2.48.0.257.gd3603152ad.dirty
> 
>
Patrick Steinhardt Jan. 28, 2025, 8:35 a.m. UTC | #2
On Sun, Jan 26, 2025 at 06:58:40PM -0600, Justin Tobler wrote:
> On 25/01/16 10:17AM, Patrick Steinhardt wrote:
> > The `struct git_zstream::next_in` variable points to the input data and
> > is used in combination with `struct z_stream::next_in`. While that
> > latter field is not marked as a constant in zlib, it is marked as such
> > in zlib-ng. This causes a couple of compiler errors when we try to
> > assign these fields to one another due to mismatching constness.
> > 
> > Fix the issue by casting away the potential constness of `next_in`.
> > 
> > Signed-off-by: Patrick Steinhardt <ps@pks.im>
> > ---
> >  git-zlib.c | 2 +-
> >  1 file changed, 1 insertion(+), 1 deletion(-)
> > 
> > diff --git a/git-zlib.c b/git-zlib.c
> > index 2e973320c2..519b3647ac 100644
> > --- a/git-zlib.c
> > +++ b/git-zlib.c
> > @@ -59,7 +59,7 @@ static void zlib_post_call(git_zstream *s)
> >  
> >  	s->total_out = s->z.total_out;
> >  	s->total_in = s->z.total_in;
> > -	s->next_in = s->z.next_in;
> > +	s->next_in = (unsigned char *) s->z.next_in;
> 
> Without the context of the commit, its not obvious to me why this cast
> is happening and looks curious. It might be nice to leave a comment here
> explaining its purpose.

Fair, otherwise someone using zlib might wonder why we have a seemingly
unnecessary cast in the first place.

Thanks for your input!

Patrick
diff mbox series

Patch

diff --git a/git-zlib.c b/git-zlib.c
index 2e973320c2..519b3647ac 100644
--- a/git-zlib.c
+++ b/git-zlib.c
@@ -59,7 +59,7 @@  static void zlib_post_call(git_zstream *s)
 
 	s->total_out = s->z.total_out;
 	s->total_in = s->z.total_in;
-	s->next_in = s->z.next_in;
+	s->next_in = (unsigned char *) s->z.next_in;
 	s->next_out = s->z.next_out;
 	s->avail_in -= bytes_consumed;
 	s->avail_out -= bytes_produced;