Richard W.M. Jones wrote:
On Mon, Nov 09, 2009 at 08:21:59PM +0100, Jim Meyering wrote:
> >From 27e5dc065892802214860686b30abfe208fcca8b Mon Sep 17 00:00:00 2001
> From: Jim Meyering <meyering(a)redhat.com>
> Date: Mon, 9 Nov 2009 15:06:36 +0100
> Subject: [PATCH libguestfs] avoid "syntax-check" failure
>
> * fuse/guestmount.c (fg_readlink): Perform cast in a
> separate statement to hide it from "make syntax-check".
> ---
> fuse/guestmount.c | 6 ++++--
> 1 files changed, 4 insertions(+), 2 deletions(-)
>
> diff --git a/fuse/guestmount.c b/fuse/guestmount.c
> index c7220c0..d45c18b 100644
> --- a/fuse/guestmount.c
> +++ b/fuse/guestmount.c
> @@ -360,8 +360,10 @@ fg_readlink (const char *path, char *buf, size_t size)
> memcpy (buf, r, len);
> buf[len] = '\0';
>
> - if (free_it)
> - free ((char *) r);
> + if (free_it) {
> + char *tmp = (char *) r;
> + free (tmp);
> + }
>
> return 0;
> }
> --
> 1.6.5.2.351.g0943
ACK.
What's wrong with casting a pointer when freeing it?
Nothing horribly wrong, but more of a code cleanliness issue.
In the vast majority of cases (at least in old code) it's an
anachronistic cast from 10-15 years ago when it was often needed.
In new code, the only cases that really require the cast are
like this one (which is unusual, imho). In most others,
the conceptual error is in assigning to a "const" pointer
something that will later be freed.