Date: Fri, 8 Jun 2001 06:55:50 -0400 (EDT) From: Thomas David Rivers <rivers@dignus.com> To: jhb@FreeBSD.ORG, roam@orbitel.bg Cc: hackers@FreeBSD.ORG Subject: Re: free() and const warnings Message-ID: <200106081055.GAA49069@lakes.dignus.com> In-Reply-To: <20010608114957.C19938@ringworld.oblivion.bg>
next in thread | previous in thread | raw e-mail | index | archive | help
Peter Pentchev <roam@orbitel.bg> wrote:
>
> On Thu, Jun 07, 2001 at 10:20:51AM -0700, John Baldwin wrote:
> >
> > On 07-Jun-01 Peter Pentchev wrote:
> > > On Thu, Jun 07, 2001 at 07:07:22PM +0300, Peter Pentchev wrote:
> > >> Hi,
> > >>
> > >> Is free((void *) (size_t) ptr) the only way to free a const whatever *ptr
> > >> with WARNS=2? (or more specifically, with -Wcast-qual)
> > >
> > > Uhm. OK. So size_t may not be enough to hold a pointer. What is it then -
> > > caddr_t?
> >
> > uintptr_t for data pointers. In theory I think code pointers may not fit in a
> > uintptr_t.
> >
> > free((void *)(uintptr_t)ptr) should work.
> >
> > Of course, this begs the question of why you are free'ing a const. :)
>
> OK, here's a scenario:
>
> struct validation_fun {
> const char *name;
> valfun *fun;
> int dyn;
> };
>
> This is a structure for a set of validation functions, referenced by
> name from another type of object. There are some predefined functions,
> present in the code at compile-time, and hardcoded in an array, with
> names given as "strings". Thus, the 'const'.
>
> However, some of the functions may be defined at runtime, with both
> name and code sent by a server. In that case, the name is a dynamically
> allocated char *, which needs to be freed upon cleanup. So I have:
>
> [cleanup function]
> ...
> if (val->dyn)
> free(val->name);
>
> Any suggestions on how to improve the design to avoid this, if possible,
> would be greatly welcome.
>
> G'luck,
> Peter
Since some strings are non-constant (the are allocated) - I believe
the `const' qualifier in the structure declaration is incorrect.
What happens if you simply don't have it in the structure declaration?
- Dave Rivers -
--
rivers@dignus.com Work: (919) 676-0847
Get your mainframe programming tools at http://www.dignus.com
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-hackers" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200106081055.GAA49069>
