Thread: pg_dump, and strings
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
"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
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