Thread: pg_dump, and strings

pg_dump, and strings

From
"Ansley, Michael"
Date:
Hi, all

In pg_dump there is a file called common.c.  This file has some string
handling routines in it that return a pointer to a fixed-length, static
string (char *).  I need to remove the fixed-length bit (besides the fact
fact that this is horrendously un-threadsafe).  So, what is the best
mechanism to use on replacement?  There seem to be two fairly standard
methods to use, a) make the calling function allocate the memory it
requires, and pass that in to the called function, or b) the called function
allocates memory using a documented call (say, malloc), and hands
responsibility for freeing the memory to the calling function.  Given the
non-fixed-length constraint, the second option would appear better, but does
any body out there have any other ideas?

MikeA


Re: [HACKERS] pg_dump, and strings

From
Tom Lane
Date:
"Ansley, Michael" <Michael.Ansley@intec.co.za> writes:
> In pg_dump there is a file called common.c.  This file has some string
> handling routines in it that return a pointer to a fixed-length, static
> string (char *).  I need to remove the fixed-length bit (besides the fact
> fact that this is horrendously un-threadsafe).  So, what is the best
> mechanism to use on replacement?  There seem to be two fairly standard
> methods to use, a) make the calling function allocate the memory it
> requires, and pass that in to the called function, or b) the called function
> allocates memory using a documented call (say, malloc), and hands
> responsibility for freeing the memory to the calling function.  Given the
> non-fixed-length constraint, the second option would appear better, but does
> any body out there have any other ideas?

The first approach requires that the caller know in advance how much
result space the callee will need; unless the return type is fixed-size
that's usually a bad design.

Another possibility is to do something like the backend's palloc()
stuff, wherein responsibility for eventually cleaning up the garbage
is handed to a third party.  But that's probably overkill for pg_dump.
        regards, tom lane


Re: [HACKERS] pg_dump, and strings

From
Peter Eisentraut
Date:
On Oct 31, Ansley, Michael mentioned:

> Hi, all
> 
> In pg_dump there is a file called common.c.  This file has some string
> handling routines in it that return a pointer to a fixed-length, static
> string (char *).  I need to remove the fixed-length bit (besides the fact
> fact that this is horrendously un-threadsafe).  So, what is the best
> mechanism to use on replacement?  There seem to be two fairly standard
> methods to use, a) make the calling function allocate the memory it
> requires, and pass that in to the called function, or b) the called function
> allocates memory using a documented call (say, malloc), and hands
> responsibility for freeing the memory to the calling function.  Given the
> non-fixed-length constraint, the second option would appear better, but does
> any body out there have any other ideas?
> 
> MikeA

Of course malloc is not very thread-safe either.

But as far is I'm concerned, the difference between a) and b) is cosmetic.

-- 
Peter Eisentraut                  Sernanders vaeg 10:115
peter_e@gmx.net                   75262 Uppsala
http://yi.org/peter-e/            Sweden