linux-c-programming.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Scott <drmemory@3rivers.net>
To: linux-c-programming@vger.kernel.org
Subject: Re: how to implement routines that return general strings?
Date: Mon, 14 Aug 2006 12:15:29 -0600	[thread overview]
Message-ID: <20060814181529.GA1143@drmemory.local> (raw)
In-Reply-To: <Pine.LNX.4.64.0608120534250.5194@localhost.localdomain>

On Sat, Aug 12, 2006 at 05:36:51AM -0400, Robert P. J. Day wrote:
> On Fri, 11 Aug 2006, Kelly Burkhart wrote:
> 
> > On 8/10/06, Scott <drmemory@3rivers.net> wrote:
> > > With the caveat that I haven't done any serious programming in C for
> > > many years:  As I recall, I always used a protocol halfway between
> > > these, as:
> > >
> > > char *func(size_t bufsiz)
> > > {
> > >         char *retval = malloc (bufsiz);
> > >         if (retval == NULL) return (NULL);
> > >         /* whatever */
> > >         return (retval);
> > > }
> >
> > This code is to live in a shared library and you wish for it to be
> > portable then you may want to keep in mind the difficulties on some
> > platforms of allocating memory in one shared library and freeing in
> > another.  If this concern is relevant to you, the above must be
> > paired with void funcCleanup(char*).
> 
> obviously, if i chose to do it this way, i'd first check if a malloc()
> had already been done, so i don't keep malloc()ing unnecessarily
> (keeping a static pointer, naturally).
> 
> that would seem to be functionally equivalent to just declaring a
> static array of characters within that routine, anyway.

I guess I assumed that the caller of a library routine like this would
*want* a brand-new array. And of course with that want comes the
responsibilty for taking care of it and letting it swim back into the
memory pool when you are finished with it. Use a static (whether array
or pointer) and you are back to problems with re-entrancy.

Scott Swanson

  reply	other threads:[~2006-08-14 18:15 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-08-10 14:10 how to implement routines that return general strings? Robert P. J. Day
2006-08-10 17:12 ` Scott
2006-08-10 19:04   ` David Rientjes
2006-08-11 20:06   ` Kelly Burkhart
2006-08-12  9:36     ` Robert P. J. Day
2006-08-14 18:15       ` Scott [this message]
2006-08-10 21:07 ` Glynn Clements
2006-08-11  7:03   ` Raseel Bhagat
2006-08-11 18:36     ` Shorty Porty
  -- strict thread matches above, loose matches on Subject: below --
2006-08-10 16:51 Khan, Ahmer

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20060814181529.GA1143@drmemory.local \
    --to=drmemory@3rivers.net \
    --cc=linux-c-programming@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).